SMOC REST v2 API reference
REST v2 is the public HTTP API for company data. Every domain tool uses the same JSON body as the matching MCP tool. Customer keys are read-only by default and scoped to your company. Write-enabled keys may call the limited write tools below. GET /api/company/mongocontact is unchanged for Zapier.
Base URL
https://v2.api.smoc.ai
Machine-readable catalog: GET /api/v2 or GET /api/v2/openapi.json.
Auth
Send a key from Settings → Integrations → API (or MCP) as Authorization: Bearer <key> or the legacy token header.
curl -s -X POST https://v2.api.smoc.ai/api/v2/whoami \
-H "Authorization: Bearer YOUR_SMOC_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
Do not use Clerk sk_… or pk_… keys.
Shape
POST /api/v2/{toolName} with Content-Type: application/json.
Success is HTTP 200 with a JSON object. Errors are 4xx with { "code", "error", "details?" }. Common codes: MISSING_BEARER_TOKEN, INVALID_INPUT, TOOL_DENIED, FLOWCHART_NOT_FOUND.
Customer keys do not send companyId. The key already selects the company.
GET|POST /api/v2/whoami is on REST. Discovery tools mcp_capabilities, skills_search, and skills_get stay on MCP only (https://v2.api.smoc.ai/mcp).
Identity
GET|POST /api/v2/whoami
Returns role, company scope, permissions, token kind, and environment. Body optional.
Company
| Call | Body | Returns |
|---|---|---|
POST /api/v2/companies_get |
{} |
Company profile (title, key, URL, languages, settings) |
POST /api/v2/company_assets_get |
{} |
Products, positioning, website links, files |
POST /api/v2/settings_notifications_get |
{} |
Notification preference summary (no email addresses) |
Company asset extractions
Permission: company:read or cpcs:read.
| Call | Body | Returns |
|---|---|---|
POST /api/v2/company_asset_extraction_results_list |
limit? (1–100), includeData?, statuses?, templateNameKey?, tag? |
Extraction result summaries |
POST /api/v2/company_asset_extraction_results_get |
resultId (required), includeData? |
One result |
POST /api/v2/company_asset_extraction_templates_list |
limit?, templateNameKey?, tag? |
Template / tag / freshness summaries |
Contacts
Permission: contacts:read.
| Call | Body | Returns |
|---|---|---|
POST /api/v2/contacts_search |
Filters below, plus page?, pageSize? (1–100), sortBy?, sortDirection? (asc | desc) |
Paginated contacts |
POST /api/v2/contacts_get |
contactId (required) |
One sanitized contact |
POST /api/v2/contacts_get_stats |
Same filters as search (no page) | Counts and engagement summary |
POST /api/v2/contacts_get_filter_options |
Same filters, plus optionLimit? (1–200) |
Valid filter values |
POST /api/v2/contact_tags_list |
{} |
Contact tags |
POST /api/v2/prospect_lists_list |
{} |
Prospect lists |
POST /api/v2/prospect_lists_get |
listId (required) |
One prospect list |
Contact filters (all optional): dateFrom, dateTo (YYYY-MM-DD), search (max 200), location, flow, surveyQuestionAnswer, promosRedeemed, profileInfo, device, os, browser, utmSource, utmMedium, utmCampaign (string or array of up to 50), surveyLanguage, firstName, lastName, msisdn, company, city, street, zip, brandId, status.
sortBy: createdAt, updatedAt, lastConversationDate, email, firstName, lastName, company, city, status.
curl -s -X POST https://v2.api.smoc.ai/api/v2/contacts_search \
-H "Authorization: Bearer YOUR_SMOC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"search":"ada","pageSize":20,"sortBy":"updatedAt","sortDirection":"desc"}'
Zapier / compat contacts remain GET /api/company/mongocontact with the token header. Field-level mongocontact shapes: Public Contacts API.
Inbox and conversations
Permission: inbox:read for reads. Write-enabled keys also need inbox:write for triage and text send.
| Call | Body | Returns |
|---|---|---|
POST /api/v2/inbox_threads_list |
q?, sender?, flowId?, contactId?, companyUserId?, conversationId?, inboxFolder? (inbox | archived | all), unreadOnly?, unansweredOnly?, page?, limit? (1–50) |
Threads |
POST /api/v2/inbox_threads_get |
threadId (required), includeMessages? |
One thread |
POST /api/v2/inbox_messages_list |
threadId (required), limit? (1–200) |
Messages, including merged peer threads |
POST /api/v2/conversations_list |
flowId?, contactId?, conversationId?, q?, page?, limit? (1–50) |
Message-flow runs |
POST /api/v2/conversations_get |
conversationId (required) |
One run, including milestones |
POST /api/v2/inbox_threads_archive |
threadId |
Archives a thread |
POST /api/v2/inbox_threads_unread |
threadId |
Marks a thread unread |
POST /api/v2/inbox_threads_mark_handled |
threadId |
Marks unanswered handled |
POST /api/v2/inbox_threads_send |
threadId, body, idempotencyKey |
Sends a text-only reply |
curl -s -X POST https://v2.api.smoc.ai/api/v2/inbox_threads_list \
-H "Authorization: Bearer YOUR_SMOC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"unansweredOnly":true,"limit":25}'
Outreach
| Call | Permission | Body | Returns |
|---|---|---|---|
POST /api/v2/outreach_accounts_list |
inbox:read |
{} |
LinkedIn / outreach account status |
POST /api/v2/outreach_contacts_import_get |
contacts:read |
importJobId (required) |
Contact import / enrichment job status |
Flowcharts and Studio
Permission: flowcharts:read. Use uniqueFlowchartId from flowcharts_list as flowchartId when a catalog numeric id is missing.
| Call | Body | Returns |
|---|---|---|
POST /api/v2/flowcharts_list |
name?, operatorKey?, conversationTemplateKey?, status? (draft | published), page?, limit? (1–100) |
Flowchart summaries |
POST /api/v2/flowcharts_get |
flowchartId (required), detail? (summary | full) |
One flowchart (full includes the graph) |
POST /api/v2/flowchart_recommendations_list |
flowchartId (required) |
Recommendation documents |
POST /api/v2/flowcharts_versions_list |
flowchartId (required) |
Version ids, dates, status |
POST /api/v2/themes_get |
operatorKey? |
Theme for the company (or operator key) |
POST /api/v2/message_flow_settings_get |
flowchartId (required) |
Message-flow / conversation-template settings |
POST /api/v2/message_flow_settings_summary |
flowchartId (required) |
Channel id, locale, active flag |
POST /api/v2/message_flow_contacts_list |
flowchartId (required) |
Recent conversation / contact rows |
POST /api/v2/message_flow_kpis_get |
flowchartId (required) |
Conversation totals |
POST /api/v2/targeting_portfolios_list |
flowchartId (required) |
Targeting portfolios |
POST /api/v2/targeting_portfolios_get |
portfolioId (required) |
One portfolio |
POST /api/v2/studio_generations_get |
jobId (required; generationId also accepted) |
Generation job |
POST /api/v2/studio_translations_get |
jobId (required; translationId also accepted) |
Translation job |
curl -s -X POST https://v2.api.smoc.ai/api/v2/flowchart_recommendations_list \
-H "Authorization: Bearer YOUR_SMOC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"flowchartId":"YOUR_UNIQUE_FLOWCHART_ID"}'
Analytics
Permission: analytics:read. Dates are YYYY-MM-DD. Shared optional filters: startDate, endDate, flowId, flowVersionId, deviceType, os, country, languageCode, utmSource, utmMedium, utmCampaign.
| Call | Extra body | Returns |
|---|---|---|
POST /api/v2/analytics_flow_list_flows |
Shared filters | Flows ranked by traffic |
POST /api/v2/analytics_flow_kpis |
Shared filters | Totals and previous-period deltas |
POST /api/v2/analytics_flow_timeseries |
Shared filters, granularity? (day | month) |
Daily or monthly series |
POST /api/v2/analytics_flow_dimension_metrics |
Shared filters, dimension (required), limit? (1–200) |
Breakdown |
POST /api/v2/analytics_flow_filter_values |
Shared filters | Valid filter values |
POST /api/v2/edge_visit_counts_get |
conversationTemplateId (required), startDate?, endDate? |
Edge-visit counts |
dimension must be one of: deviceType, os, country, languageCode, utmSource, utmMedium, utmCampaign, dayOfWeek.
curl -s -X POST https://v2.api.smoc.ai/api/v2/analytics_flow_kpis \
-H "Authorization: Bearer YOUR_SMOC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"startDate":"2026-08-01","endDate":"2026-08-31"}'
Website scan (CPCS)
Permission: cpcs:read.
| Call | Body | Returns |
|---|---|---|
POST /api/v2/cpcs_overview |
{} |
Project, crawl, extraction, and schedule overview |
POST /api/v2/cpcs_urls_list |
{} |
Webpage / link URLs used for crawls |
POST /api/v2/cpcs_crawls_get |
crawlId (required), projectId? |
One crawl job |
POST /api/v2/cpcs_extractions_get |
extractionId (required), projectId? |
One extraction job |
POST /api/v2/cpcs_list_templates |
{} |
Extraction templates |
POST /api/v2/cpcs_schedule_get |
{} |
Crawl schedule |
Writes (opt-in)
Default keys stay read-only. When you check Allow limited writes in Console, the key can call contacts/tags/lists create-update, company profile / assets basics, cpcs_urls_add, flowchart rename / recommendation status, inbox triage, and inbox_threads_send.
What customer keys cannot do
Write-enabled customer keys still cannot delete data, publish flows, toggle live, change targeting, start credit-burning jobs, or send LinkedIn outreach campaigns. GET /api/company/mongocontact stays the Zapier/compat contacts contract.
MCP
The same tools are available to Claude, Cursor, and VS Code at https://v2.api.smoc.ai/mcp. Setup: MCP eGuide. Connection walkthrough: REST connection guide.
See also
Stay close to the shift in AI sales
Get product updates and perspective on proactive AI agents, multichannel orchestration, and conversion—without the noise.


