Q2 Push Promo: $39/mo $85 with code Q2PUSH · See pricing →
Salesmotion/API Reference

API Reference

Account intelligence over REST. Resolve a company, pull signals, return a full account insight in a single call — built so AI agents and revenue tools can ship in an afternoon.

Base URLhttps://api.salesmotion.io

Introduction

The Salesmotion API exposes the same account intelligence that powers our app: tracked accounts and contacts, signals (relevant news, hiring, M&A, funding, earnings calls), and a public company graph with news, jobs, filings, and earnings-call transcripts. Every endpoint is REST, returns JSON, and is versioned under /v1.

For LLM agents that need the full picture in one call, see GET /v1/account-insights — it resolves a company by name, domain, or ID and returns profile, summary, research, SWOT, and value all in one response.

Authentication

Every request is authenticated with a bearer token. Issue and rotate keys from your Salesmotion API dashboard. Keys are scoped to one organization; we recommend a separate key per integration so you can rotate without downtime.

bash
curl https://api.salesmotion.io/v1/accounts \
  -H "Authorization: Bearer $SALESMOTION_API_KEY"

Access tiers

Two tiers gate the endpoints below. Your org is on one or both depending on plan.

Public API

Public company graph

Resolve a company, pull its public profile, news, job openings, earnings calls, and SEC filings. Available to all organizations including public-API-only plans.

Full Access

Workspace reads

Your tracked accounts, contacts, and signals — the same data that powers the Salesmotion app. Public-API-only orgs get empty lists or 404 on these routes.

Quickstart

Get a full account insight for a company in one call — perfect for agents that need to read the room before generating outreach or research notes.

resolve and read in one call
curl "https://api.salesmotion.io/v1/account-insights?domain=acme.com&sections=profile,summary,research" \
  -H "Authorization: Bearer $SALESMOTION_API_KEY"

Already know the account is in your workspace? Skip resolution and read it directly:

bash
curl "https://api.salesmotion.io/v1/accounts/12345?include=company,owner&signalsLimit=10" \
  -H "Authorization: Bearer $SALESMOTION_API_KEY"

Errors & status codes

Standard HTTP semantics. 2xx means success, 4xx means a client problem (auth, parameters, not found), 5xx means we're investigating. Every response carries a meta.requestId — include it when reporting issues.

200OK — request succeeded. For account-insights, check the `status` field for `found` / `multiple_matches` / `not_found`.
400Bad request — missing or invalid parameters.
401Unauthorized — missing or invalid bearer token.
403Forbidden — your plan doesn't include this endpoint.
404Not found — public-API-only orgs receive 404 on Full Access routes.
429Rate limited — back off and retry. See `usage.resetsAt`.
500Server error — include `meta.requestId` if reporting.

Field catalog

Most endpoints accept onlyWithFields to keep payloads small. The full list of fields per resource is below — heavy generated fields like transcripts, filing bodies, and AI insights are opt-in.

Account fields
id, organizationId, companyId, ownerId, createdAt, updatedAt, name, domain, logoUrl, featuredImageUrl, description, industry, headquartersLocation, numberOfEmployees, type, priority, mainScore, mainScoreComponents, summary, insights, swotAnalysis, threeWhys, valuePyramid, valueProposition, valueHypothesis (internal: highLevelMatch), pointOfView, linkedInUrl, crunchbaseUrl, zoomInfoUrl, salesforceUrl, salesNavigatorUrl, addedOn, lastRefreshAt, countryCode
Contact fields
id, organizationId, accountId, firstName, lastName, currentTitle, currentCompanyName, changeType, inCurrentRoleSince, lastChangeDetectedOn, mainScore, linkedInUrl, email, emailStatus, phone, location, previousTitle, previousCompanyName, profilePictureUrl, type, contactRole, personInsights, talkingPoints, positionWhenFormerUser, introPaths, matchingTargetKeywords, matchingTargetJobTitles, matchingTargetLocations, matchingTargetTechnologies
Signal fields
id, organizationId, accountId, type, subtype, headline, description, date, sources, matchingKeywords, relevance, fullContent, smartSummary, playUrls, slidesUrls, documentsUrls, clinicalTrialPrimaryCompletionDate, clinicalTrialStudyCompletionDate, clinicalTrialLastKnownStatus, clinicalTrialCollaborators, createdAt, updatedAt
Company fields
id, name, domain, websiteUrl, description, industry, headquartersLocation, numberOfEmployees, mainStockSymbol, crunchbaseUrl, linkedInUrl, fiscalYearInfo, insights (opt-in)
News article fields
id, companyId, headline, url, datePublished, description, excerpt, publisher, publisherUrl, featuredImageUrl, articleBody (opt-in)
Job opening fields
id, companyId, status, url, title, companyName, location, postedOn, applicants, seniorityLevel, employmentType, jobFunction, industries, jobDescription (opt-in)
Earnings call fields
id, companyId, stockSymbol, year, quarter, happenedAt, audioUrl, reportUrl, presentationUrl, fullTranscript (opt-in), generatedAnalysis (opt-in)
Filing fields
id, companyId, type, accessionNumber, url, filingDate, reportDate, fiscalYear, quarter, fullContent (opt-in)

Account Insights

Single-call account intelligence for AI agents — resolves a company by name, domain, or ID and returns the full insight in a compact structure.

GET/v1/account-insightsFull Access

Get account insight

Resolve and return a full account insight in a single call. Built for AI agents that need the complete picture (profile, research, SWOT, value) in one request.

Resolution order: accountId (direct lookup) → domain (exact match) → query (domain check, then text search). All resolution outcomes return HTTP 200; only `400` is returned for missing query parameters. Public API-only organizations always receive `status=not_found` on this route. At least one of query, domain, or accountId is required.

Parameters

accountId
number
Direct account ID lookup. Takes priority over domain and query.
domain
string
Exact domain match. Normalized: leading www/subdomains stripped, lowercased. Prefer this when you have a domain.
query
string
Free-text company name search. Case-insensitive. Values that look like a domain are tried as exact domain first.
sections
string
Comma-separated sections to include: profile, summary, research, swotAnalysis, value. Profile is always included.
include
string
Comma-separated opt-in for related resources: contacts, signals.
signalsLimit
number
Max signals when included (default 20, max 100).
contactsLimit
number
Max contacts when included (default 10, max 100).

Responses

200Check the `status` field: `found` (data present), `multiple_matches` (candidates present), or `not_found`.
400No query parameters provided — at least one of query, domain, or accountId is required.

Example request

curl
curl -X GET "https://api.salesmotion.io/v1/account-insights?accountId=12345&domain=acme.com" \
  -H "Authorization: Bearer $SALESMOTION_API_KEY"

Response — 200

ts
{
  status: string
  message?: string
  data?: {
    profile: { accountId, name?, domain?, logoUrl?, description?, headquartersLocation?, industry?, numberOfEmployees?, score?, type?, priority?, countryCode?, addedOn?, lastRefreshAt?, owner?, links? }
    summary?: { keyInsights?, opportunities?, challenges?, peopleUpdates?, topNews?, talkingPoints?, executivePerspective? }
    research?: { companyOverview?, keyPeopleChanges?, keyProjects?, aspirations?, businessGoals?, opportunities?, macroeconomicPerspective?, recentPressAnnouncements?, businessModel?, strategicInitiatives?, financials? }
    swotAnalysis?: { strengths?, weaknesses?, opportunities?, threats? }
    value?: { threeWhys?, valuePyramid?, valuePropositionIdeas?, valueHypothesis?, pointOfView? }
  }
  candidates?: [{ accountId: number, name?: string, domain?: string }]
  bestMatch?: { accountId: number, name?: string, domain?: string }
  included?: object
  meta: {
    requestId: string
    apiVersion: string
    timestamp: string
  }
  usage: {
    limit: number
    used: number
    remaining: number
    resetsAt: string
  }
}

Accounts

Tracked Salesmotion accounts for the current organization.

GET/v1/accountsFull Access

List accounts

Return tracked Salesmotion accounts for the current organization. Public API-only orgs always receive an empty list.

Supports filtering by owner, type, priority, signal activity, and free-text search. Use `include=company,owner` to embed related resources.

Parameters

view
default, export
perPage
number
page
number
sortOrder
asc, desc
Sort direction (default: desc).
sortBy
string
Account field to sort by (default: mainScore).
onlyWithFields
string
Comma-separated account fields to select (e.g. id,name,domain).
include
string
Supported: company, owner.
hasSignalsOfType
string
Combined with hasSignalsAfterDate — only count signals of this type (comma-separated).
hasSignalsAfterDate
string
ISO date — only accounts with at least one signal after this date.
priority
number
Filter by priority (1=high, 2=medium, 3=low).
type
string
Filter by account type (prospect, customer, partner, churned, open-opportunity, competitor, other).
ownerId
string
Filter by account owner user ID.
companyId
string
Filter by linked company ID.
domain
string
Exact domain match (e.g. acme.com).
textQuery
string
Search accounts by name or domain.
ids
string
Comma-separated account IDs.

Responses

200Account list payload.

Example request

curl
curl -X GET "https://api.salesmotion.io/v1/accounts?perPage=20&page=1" \
  -H "Authorization: Bearer $SALESMOTION_API_KEY"

Response — 200

ts
{
  data: [{
  id: number
  organizationId: string
  companyId?: string
  ownerId?: string
  createdAt: string
  updatedAt: string
  name?: string
  domain?: string
  logoUrl?: string
  featuredImageUrl?: string
  description?: string
  industry?: string
  headquartersLocation?: string
  numberOfEmployees?: number
  type: string
  priority?: number
  mainScore?: number
  mainScoreComponents?: object
  summary?: object
  insights?: object
  swotAnalysis?: object
  threeWhys?: object
  valuePyramid?: object
  valueProposition?: object
  valueHypothesis?: object
  pointOfView?: object
  linkedInUrl?: string
  crunchbaseUrl?: string
  zoomInfoUrl?: string
  salesforceUrl?: string
  salesNavigatorUrl?: string
  addedOn?: string
  lastRefreshAt?: string
  countryCode?: string
}]
  included?: object
  meta: {
    requestId: string
    apiVersion: string
    timestamp: string
    page: number
    perPage: number
    totalCount: number
    totalPages: number
  }
  usage: {
    limit: number
    used: number
    remaining: number
    resetsAt: string
  }
}
GET/v1/accounts/{accountId}Full Access

Get account

Return one tracked Salesmotion account. Public API-only orgs always receive 404.

Use `include` and `signalsLimit`/`contactsLimit` to embed related resources without a second round-trip.

Parameters

accountIdrequired
number
view
default, export
onlyWithFields
string
Comma-separated account fields to select.
signalsLimit
number
contactsLimit
number
include
string

Responses

200Account payload with optional included resources.
404Account not found. Public API-only organizations always receive 404.

Example request

curl
curl -X GET "https://api.salesmotion.io/v1/accounts/12345?onlyWithFields=id%2Cname%2Cdomain&signalsLimit=value" \
  -H "Authorization: Bearer $SALESMOTION_API_KEY"

Response — 200

ts
{
  data: {
  id: number
  organizationId: string
  companyId?: string
  ownerId?: string
  createdAt: string
  updatedAt: string
  name?: string
  domain?: string
  logoUrl?: string
  featuredImageUrl?: string
  description?: string
  industry?: string
  headquartersLocation?: string
  numberOfEmployees?: number
  type: string
  priority?: number
  mainScore?: number
  mainScoreComponents?: object
  summary?: object
  insights?: object
  swotAnalysis?: object
  threeWhys?: object
  valuePyramid?: object
  valueProposition?: object
  valueHypothesis?: object
  pointOfView?: object
  linkedInUrl?: string
  crunchbaseUrl?: string
  zoomInfoUrl?: string
  salesforceUrl?: string
  salesNavigatorUrl?: string
  addedOn?: string
  lastRefreshAt?: string
  countryCode?: string
}
  included?: object
  meta: {
    requestId: string
    apiVersion: string
    timestamp: string
  }
  usage: {
    limit: number
    used: number
    remaining: number
    resetsAt: string
  }
}

Contacts

Contacts linked to tracked accounts in the current organization.

GET/v1/contactsFull Access

List contacts

Return contacts linked to tracked accounts. Public API-only orgs always receive an empty list.

Filter by change type, role recency, account, or full-text search. Use `include=account` to embed the parent account.

Parameters

perPage
number
page
number
sortOrder
asc, desc
Sort direction (default: desc).
sortBy
string
Contact field to sort by (default: inCurrentRoleSince).
onlyWithFields
string
Comma-separated contact fields to select.
include
string
Supported: account.
isInCurrentRoleBeforeDate
string
ISO date — contacts in current role before this date.
isInCurrentRoleAfterDate
string
ISO date — contacts in current role after this date.
lastChangeDetectedBefore
string
ISO date — only contacts with changes before this date.
lastChangeDetectedAfter
string
ISO date — only contacts with changes after this date.
currentTitleTextQuery
string
Title-specific search.
textQuery
string
Full-text search on name, title, company, location.
type
string
Filter by contact type (prospect, champion, contact).
changeType
string
Filter by change type (promotion, newJoiner, departure, internalChange, newInRole).
accountId
string
Filter by account ID (comma-separated for multiple).

Responses

200Contact list payload.

Example request

curl
curl -X GET "https://api.salesmotion.io/v1/contacts?perPage=20&page=1" \
  -H "Authorization: Bearer $SALESMOTION_API_KEY"

Response — 200

ts
{
  data: [{
  id: string
  organizationId: string
  accountId?: number
  firstName?: string
  lastName?: string
  currentTitle?: string
  currentCompanyName?: string
  changeType?: string
  inCurrentRoleSince?: string
  lastChangeDetectedOn?: string
  mainScore?: number
  linkedInUrl?: string
  email?: string
  emailStatus?: string
  phone?: string
  location?: string
  previousTitle?: string
  previousCompanyName?: string
  profilePictureUrl?: string
  type?: string
  contactRole?: string
  personInsights?: object
  talkingPoints?: object
  positionWhenFormerUser?: object
  introPaths?: string[]
  matchingTargetKeywords?: string[]
  matchingTargetJobTitles?: string[]
  matchingTargetLocations?: string[]
  matchingTargetTechnologies?: string[]
}]
  meta: {
    requestId: string
    apiVersion: string
    timestamp: string
    page: number
    perPage: number
    totalCount: number
    totalPages: number
  }
}
GET/v1/contacts/{contactId}Full Access

Get contact

Return one tracked contact. Public API-only orgs always receive 404.

Parameters

contactIdrequired
string
onlyWithFields
string
Comma-separated contact fields to select.
include
string
Supported: account.

Responses

200Contact payload.
404Contact not found. Public API-only organizations always receive 404.

Example request

curl
curl -X GET "https://api.salesmotion.io/v1/contacts/ct_01H8...?onlyWithFields=id%2Cname%2Cdomain&include=contacts%2Csignals" \
  -H "Authorization: Bearer $SALESMOTION_API_KEY"

Response — 200

ts
{
  data: {
  id: string
  organizationId: string
  accountId?: number
  firstName?: string
  lastName?: string
  currentTitle?: string
  currentCompanyName?: string
  changeType?: string
  inCurrentRoleSince?: string
  lastChangeDetectedOn?: string
  mainScore?: number
  linkedInUrl?: string
  email?: string
  emailStatus?: string
  phone?: string
  location?: string
  previousTitle?: string
  previousCompanyName?: string
  profilePictureUrl?: string
  type?: string
  contactRole?: string
  personInsights?: object
  talkingPoints?: object
  positionWhenFormerUser?: object
  introPaths?: string[]
  matchingTargetKeywords?: string[]
  matchingTargetJobTitles?: string[]
  matchingTargetLocations?: string[]
  matchingTargetTechnologies?: string[]
}
  meta: {
    requestId: string
    apiVersion: string
    timestamp: string
  }
  usage: {
    limit: number
    used: number
    remaining: number
    resetsAt: string
  }
}

Signals

Signals (relevant news, hiring, M&A, funding, earnings calls, and more) linked to tracked accounts.

GET/v1/signalsFull Access

List signals

Return signals linked to tracked accounts. Public API-only orgs always receive an empty list.

Filter by type, account, or date window. Use `textQuery` for full-text search across signal content.

Parameters

perPage
number
page
number
sortOrder
asc, desc
Sort direction (default: desc).
sortBy
string
Signal field to sort by (default: date).
onlyWithFields
string
Comma-separated signal fields to select.
textQuery
string
Full-text search on signal content.
beforeDate
string
ISO date — only signals before this date.
afterDate
string
ISO date — only signals after this date.
type
string
Filter by signal type (comma-separated, e.g. relevant-news,hiring-alert,press-release,m-and-a-alert,funding-alert,earnings-call).
accountId
string
Filter by account ID (comma-separated for multiple).

Responses

200Signal list payload.

Example request

curl
curl -X GET "https://api.salesmotion.io/v1/signals?perPage=20&page=1" \
  -H "Authorization: Bearer $SALESMOTION_API_KEY"

Response — 200

ts
{
  data: [{
  id: number
  organizationId: string
  accountId: number
  type: string
  subtype?: string
  headline: string
  description?: string
  date: string
  sources?: string[]
  matchingKeywords?: string[]
  relevance?: object
  fullContent?: string
  smartSummary?: object
  playUrls?: object
  slidesUrls?: string[]
  documentsUrls?: string[]
  clinicalTrialPrimaryCompletionDate?: string
  clinicalTrialStudyCompletionDate?: string
  clinicalTrialLastKnownStatus?: string
  clinicalTrialCollaborators?: string[]
  createdAt: string
  updatedAt: string
}]
  meta: {
    requestId: string
    apiVersion: string
    timestamp: string
    page: number
    perPage: number
    totalCount: number
    totalPages: number
  }
  usage: {
    limit: number
    used: number
    remaining: number
    resetsAt: string
  }
}
GET/v1/signals/countsFull Access

Get signal counts

Return signal aggregates for tracked accounts. Public API-only orgs always receive an empty object.

Useful for dashboard tiles and digest emails — get totals by type without paging through individual signals.

Parameters

textQuery
string
Full-text search filter.
beforeDate
string
ISO date — only count signals before this date.
afterDate
string
ISO date — only count signals after this date.
accountId
string
Filter by account ID (comma-separated).

Responses

200Signal counts by type.

Example request

curl
curl -X GET "https://api.salesmotion.io/v1/signals/counts?textQuery=acme&beforeDate=value" \
  -H "Authorization: Bearer $SALESMOTION_API_KEY"

Response — 200

ts
{
  data: object
  meta: {
    requestId: string
    apiVersion: string
    timestamp: string
  }
  usage: {
    limit: number
    used: number
    remaining: number
    resetsAt: string
  }
}
GET/v1/signals/{signalId}Full Access

Get signal

Return one tracked signal. Public API-only orgs always receive 404.

Parameters

signalIdrequired
number
onlyWithFields
string
Comma-separated signal fields to select.

Responses

200Signal payload.
404Signal not found. Public API-only organizations always receive 404.

Example request

curl
curl -X GET "https://api.salesmotion.io/v1/signals/98765?onlyWithFields=id%2Cname%2Cdomain" \
  -H "Authorization: Bearer $SALESMOTION_API_KEY"

Response — 200

ts
{
  data: {
  id: number
  organizationId: string
  accountId: number
  type: string
  subtype?: string
  headline: string
  description?: string
  date: string
  sources?: string[]
  matchingKeywords?: string[]
  relevance?: object
  fullContent?: string
  smartSummary?: object
  playUrls?: object
  slidesUrls?: string[]
  documentsUrls?: string[]
  clinicalTrialPrimaryCompletionDate?: string
  clinicalTrialStudyCompletionDate?: string
  clinicalTrialLastKnownStatus?: string
  clinicalTrialCollaborators?: string[]
  createdAt: string
  updatedAt: string
}
  meta: {
    requestId: string
    apiVersion: string
    timestamp: string
  }
  usage: {
    limit: number
    used: number
    remaining: number
    resetsAt: string
  }
}

Companies (Public)

Public company profile and sub-resources. Resolve a company first with `/v1/companies/by-input/{companyInputId}`, then use the returned `data.id` here.

GET/v1/companies/by-input/{companyInputId}Public API

Resolve company

Resolve a company by canonical ID, domain, website URL, stock symbol, LinkedIn URL, or Crunchbase URL.

This is the entry point for the public company API. The returned `data.id` is the canonical companyId used by every sub-resource endpoint.

Parameters

companyInputIdrequired
string
view
default, export
onlyWithFields
string
Comma-separated company fields to select. Generated fields remain opt-in.
include
string
Supported: latestEarningsCall, latestEarningsCallAnalysis.

Responses

200Resolved public company profile.
404Company not found for the provided input.

Example request

curl
curl -X GET "https://api.salesmotion.io/v1/companies/by-input/acme.com?onlyWithFields=id%2Cname%2Cdomain&include=contacts%2Csignals" \
  -H "Authorization: Bearer $SALESMOTION_API_KEY"

Response — 200

ts
{
  data: {
  id: string
  name?: string
  domain?: string
  websiteUrl?: string
  description?: string
  industry?: string
  headquartersLocation?: string
  numberOfEmployees?: number
  mainStockSymbol?: string
  crunchbaseUrl?: string
  linkedInUrl?: string
  fiscalYearInfo?: object
  insights?: object
}
  included?: object
  meta: {
    requestId: string
    apiVersion: string
    timestamp: string
  }
  usage: {
    limit: number
    used: number
    remaining: number
    resetsAt: string
  }
}
GET/v1/companies/{companyId}Public API

Get company

Read the public company profile by canonical ID.

Default responses return the public profile; generated fields like `insights` are opt-in via `onlyWithFields`.

Parameters

companyIdrequired
string
view
default, export
onlyWithFields
string
Comma-separated company fields to select (e.g. id,name,domain,insights).
include
string
Supported: latestEarningsCall, latestEarningsCallAnalysis.

Responses

200Public company profile payload.
404Company not found.

Example request

curl
curl -X GET "https://api.salesmotion.io/v1/companies/cmp_acme?onlyWithFields=id%2Cname%2Cdomain&include=contacts%2Csignals" \
  -H "Authorization: Bearer $SALESMOTION_API_KEY"

Response — 200

ts
{
  data: {
  id: string
  name?: string
  domain?: string
  websiteUrl?: string
  description?: string
  industry?: string
  headquartersLocation?: string
  numberOfEmployees?: number
  mainStockSymbol?: string
  crunchbaseUrl?: string
  linkedInUrl?: string
  fiscalYearInfo?: object
  insights?: object
}
  included?: object
  meta: {
    requestId: string
    apiVersion: string
    timestamp: string
  }
  usage: {
    limit: number
    used: number
    remaining: number
    resetsAt: string
  }
}
GET/v1/companies/{companyId}/news-articlesPublic API

List company news

Return news articles for a company. Heavy raw text is opt-in via `onlyWithFields=articleBody`.

Parameters

companyIdrequired
string
view
default, export
perPage
number
page
number
onlyWithFields
string
Comma-separated news article fields. Raw text is opt-in.

Responses

200News article list payload.
404Company not found.

Example request

curl
curl -X GET "https://api.salesmotion.io/v1/companies/cmp_acme/news-articles?perPage=20&page=1" \
  -H "Authorization: Bearer $SALESMOTION_API_KEY"

Response — 200

ts
{
  data: [{
    id: string
    companyId?: string
    headline?: string
    url: string
    datePublished: string
    description?: string
    excerpt?: string
    publisher?: string
    publisherUrl?: string
    featuredImageUrl?: string
    articleBody?: string
  }]
  meta: {
    requestId: string
    apiVersion: string
    timestamp: string
    page: number
    perPage: number
    totalCount: number
    totalPages: number
  }
  usage: {
    limit: number
    used: number
    remaining: number
    resetsAt: string
  }
}
GET/v1/companies/{companyId}/job-openingsPublic API

List company job openings

Return job openings for a company. Full descriptions are opt-in via `onlyWithFields=jobDescription`.

Parameters

companyIdrequired
string
view
default, export
perPage
number
page
number
onlyWithFields
string
Comma-separated job opening fields. Full description text is opt-in.

Responses

200Job opening list payload.
404Company not found.

Example request

curl
curl -X GET "https://api.salesmotion.io/v1/companies/cmp_acme/job-openings?perPage=20&page=1" \
  -H "Authorization: Bearer $SALESMOTION_API_KEY"

Response — 200

ts
{
  data: [{
    id: string
    companyId?: string
    status?: string
    url: string
    title?: string
    companyName?: string
    location?: string
    postedOn: string
    applicants?: string
    seniorityLevel?: string
    employmentType?: string
    jobFunction?: string
    industries?: string
    jobDescription?: string
  }]
  meta: {
    requestId: string
    apiVersion: string
    timestamp: string
    page: number
    perPage: number
    totalCount: number
    totalPages: number
  }
  usage: {
    limit: number
    used: number
    remaining: number
    resetsAt: string
  }
}
GET/v1/companies/{companyId}/earnings-callsPublic API

List earnings calls

Return earnings-call events for a company. Transcripts and AI analysis are opt-in.

Parameters

companyIdrequired
string
view
default, export
perPage
number
page
number
onlyWithFields
string
Raw transcript text and generated analysis are opt-in.

Responses

200Earnings call list payload.
404Company not found.

Example request

curl
curl -X GET "https://api.salesmotion.io/v1/companies/cmp_acme/earnings-calls?perPage=20&page=1" \
  -H "Authorization: Bearer $SALESMOTION_API_KEY"

Response — 200

ts
{
  data: [{
    id: number
    companyId?: string
    stockSymbol?: string
    year?: number
    quarter?: number
    happenedAt?: string
    audioUrl?: string
    reportUrl?: string
    presentationUrl?: string
    fullTranscript?: string
    generatedAnalysis?: object
  }]
  meta: {
    requestId: string
    apiVersion: string
    timestamp: string
    page: number
    perPage: number
    totalCount: number
    totalPages: number
  }
  usage: {
    limit: number
    used: number
    remaining: number
    resetsAt: string
  }
}
GET/v1/companies/{companyId}/filingsPublic API

List filings

Return SEC filings for a company. Full filing text is opt-in via `onlyWithFields=fullContent`.

Parameters

companyIdrequired
string
view
default, export
perPage
number
page
number
onlyWithFields
string
Full filing text is opt-in.

Responses

200Filing list payload.
404Company not found.

Example request

curl
curl -X GET "https://api.salesmotion.io/v1/companies/cmp_acme/filings?perPage=20&page=1" \
  -H "Authorization: Bearer $SALESMOTION_API_KEY"

Response — 200

ts
{
  data: [{
    id: number
    companyId?: string
    type?: string
    accessionNumber?: string
    url?: string
    filingDate?: string
    reportDate?: string
    fiscalYear?: number
    quarter?: number
    fullContent?: string
  }]
  meta: {
    requestId: string
    apiVersion: string
    timestamp: string
    page: number
    perPage: number
    totalCount: number
    totalPages: number
  }
  usage: {
    limit: number
    used: number
    remaining: number
    resetsAt: string
  }
}

Usage & Quota

Inspect API usage, quota, and request history for the current organization.

GET/v1/usage

Get usage

Customer-facing API usage and quota for the current organization.

Parameters

window
daily, monthly, custom
organizationId
string
groupBy
endpoint, apiKey, day
from
string
to
string

Responses

200Usage totals and quota.

Example request

curl
curl -X GET "https://api.salesmotion.io/v1/usage?window=monthly&organizationId=org_abc" \
  -H "Authorization: Bearer $SALESMOTION_API_KEY"

Response — 200

ts
{
  data: {
    window: string
    from: string
    to: string
    quota: { limit, used, remaining, resetsAt }
    totals: object
    breakdown?: [{ key, requests, successful, failed }]
  }
  meta: {
    requestId: string
    apiVersion: string
    timestamp: string
  }
}
GET/v1/usage/requests

List request history

Paginated request history for the current organization.

Parameters

window
daily, monthly, custom
organizationId
string
perPage
number
page
number
from
string
to
string

Responses

200Paginated request history.

Example request

curl
curl -X GET "https://api.salesmotion.io/v1/usage/requests?window=monthly&organizationId=org_abc" \
  -H "Authorization: Bearer $SALESMOTION_API_KEY"

Response — 200

ts
{
  data: [{
    id: number
    occurredAt: string
    endpoint: string
    successful: boolean
    error?: string
    apiKeyId?: string
    input?: object
  }]
  meta: {
    requestId: string
    apiVersion: string
    timestamp: string
    page: number
    perPage: number
    totalCount: number
    totalPages: number
  }
}
GET/v1/usage/limits

Get usage limits

Contracted usage limits for the current organization.

Parameters

organizationId
string

Responses

200Contracted usage limits.

Example request

curl
curl -X GET "https://api.salesmotion.io/v1/usage/limits?organizationId=org_abc" \
  -H "Authorization: Bearer $SALESMOTION_API_KEY"

Response — 200

ts
{
  data: object
  meta: {
    requestId: string
    apiVersion: string
    timestamp: string
  }
}

Feedback

Submit feedback on API usage. Read by the team behind the API roadmap.

POST/v1/feedback

Submit feedback

Send a rating, category, and message back to the Salesmotion API team.

Responses

200Feedback received.

Example request

curl
curl -X POST "https://api.salesmotion.io/v1/feedback" \
  -H "Authorization: Bearer $SALESMOTION_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ rating?: number category?: string message: string context?: object }'

Request body

json
{
  rating?: number
  category?: string
  message: string
  context?: object
}

Response — 200

ts
{
  data: object
  meta: {
    requestId: string
    apiVersion: string
    timestamp: string
  }
}

Ready to build?

Start with 100 free API credits — no credit card. Or talk to us about Full Access and we'll get you set up the same day.