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.

Product of the Year Weekly signal on proactive AI sales
Join the newsletter