AccountConnectRequest
Properties
object- email | linkedin | twitter
channelrequired - string
providere.g. google, microsoft, x (channel-dependent)
Getting started
Workspace-scoped REST for people, companies, sequences, conversations, runs, content, and webhooks. Generated from the live OpenAPI spec — every route below matches production.
Send your workspace API key on every request. Mint a key in Settings → Developers (any plan with API access, including Free).
Authorization: Bearer arm_…
All paths below are relative to the product app host. Paths include the /api/v1 prefix.
https://app.goarmada.co/api/v1
Mint keys with the scopes you need. Each endpoint lists its tag-level scope below.
Mutating POST, PUT, PATCH, and DELETE accept an optional Idempotency-Key header (1–256 chars). Successful responses are cached 24h per key; replays return the same body with idempotency-replayed: true.
Every error returns a stable JSON envelope. x-request-id is echoed on all responses.
{
"error": {
"code": "unauthorized",
"message": "Missing or invalid API key",
"request_id": "req_…"
}
}| Bucket | Per key | Per workspace |
|---|---|---|
| Light reads / list writes | 120/min | 600/min |
| Heavy (data:run, enroll, message write, content write, agent:run) | 30/min | 120/min |
429 responses include Retry-After and error.code = rate_limited.
Create an account, open Settings → Developers, mint a workspace key, and call /api/v1. Usage bills the same as the product UI — no separate API approval step.
Models
Shared object types referenced across endpoints. Field tables below match the OpenAPI components section.
Properties
objectchannelrequiredprovidere.g. google, microsoft, x (channel-dependent)
Properties
objectdomainCompany domain (optional when path id is set)
Search and upsert companies. Pass structured filters and/or a free-text query. provider defaults to auto (Armada waterfall). Always pass limit (omitted defaults to 25, max 100). Optional list_id writes matching companies as Audiences rows. For more than about 25 results, start a Find run instead of this sync search.
Properties
objectqueryNatural-language company search (Exa-primary when auto)
industriesFirmographic industries / verticals
locationsCompany or market locations
hq_locationsHQ locations (when distinct from market)
employee_rangesHeadcount bands, e.g. "51-200", "201-500"
funding_stageslookalike_domainsSeed domains for lookalike company search
limitlist_idExisting company list. Matching results are written as Audiences rows (spreadsheet cells), not only graph membership.
Properties
objectkindrequiredquantityrequiredtermregionaccount_typebrandingagreements_acceptedrequiredagreement_idsagreement_versionsProperties
objectnamerequiredchannelsgraph_snapshotstepsedgesProperties
objecturlrequiredeventsEvent names to subscribe to (defaults to the live webhook enum)
descriptionProperties
objecterrorrequiredcoderequiredmessagerequiredrequest_idrequireddetailsProperties
objectperson_idlinkedin_urlfull_namefirst_namelast_namecompany_domainProperties
objectperson_idlinkedin_urlemailProperties
objectworkspace_idrequiredorganization_idrequiredkeyrequiredidrequirednamerequiredscopesrequiredentitlementsrequiredapi_accessrequiredcsv_exportplan_idcredits_balanceProperties
objectlinkedin_urlfull_namecompany_domainSearch and upsert people. Prefer structured filters (titles, sizes, locations) for agent discovery; query is optional NL. Always pass limit (omitted defaults to 25, max 100). Optional list_id writes matching people as Audiences rows. For more than about 25 results, start a Find run instead of this sync search.
Properties
objectqueryNatural-language people search
titlessenioritieslocationsPerson locations
company_domainscompany_sizesCompany headcount bands, e.g. "51-200", "201-500"
industriesfunding_stageslookalike_domainsPeople at companies similar to these domains
lookalike_linkedin_urlsSeed LinkedIn profile URLs for similar-people search
limitlist_idExisting people list. Matching results are written as Audiences rows (spreadsheet cells), not only graph membership.
auto | platform slug | byok:slug
Properties
stringstring
Properties
objectgraph_snapshotstepsedgesKey identity, entitlements, credits, and on-demand status.
Scopes: Any valid key
/api/v1/meResponses
Response body
Meobjectworkspace_idrequiredorganization_idrequiredkeyrequiredidrequirednamerequiredscopesrequiredentitlementsrequiredapi_accessrequiredcsv_exportplan_idcredits_balanceResponse body
Errorobjecterrorrequiredcoderequiredmessagerequiredrequest_idrequireddetailsMachine-readable Capability Registry (stable IDs for REST/MCP/skills).
Scopes: Any valid key
/api/v1/capabilitiesParameters
Responses
Companies, people, emails, phones, signals — provider: auto | slug | byok:slug.
Scopes: data:run
/api/v1/companies/{id}/enrichParameters
Request body
application/json
CompanyEnrichRequestobjectdomainCompany domain (optional when path id is set)
Responses
/api/v1/companies/searchParameters
Request body
application/json
CompanySearchRequestobjectCapability data.company.search. Pass limit. Optional list_id writes Audiences rows. For more than ~25 results, start a Find run.
queryNatural-language company search (Exa-primary when auto)
industriesFirmographic industries / verticals
locationsCompany or market locations
hq_locationsHQ locations (when distinct from market)
employee_rangesHeadcount bands, e.g. "51-200", "201-500"
funding_stageslookalike_domainsSeed domains for lookalike company search
limitlist_idExisting company list. Matching results are written as Audiences rows (spreadsheet cells), not only graph membership.
Example
{
"industries": ["Software"],
"employee_ranges": ["51-200"],
"locations": ["United States"],
"limit": 25,
"provider": "auto"
}Responses
/api/v1/emails/findParameters
Request body
application/json
FindEmailRequestobjectperson_idlinkedin_urlfull_namefirst_namelast_namecompany_domainExample
{
"full_name": "Alex Rivera",
"company_domain": "acme.co",
"provider": "auto"
}Responses
/api/v1/emails/verifyParameters
Request body · required
application/json
objectemailrequiredResponses
/api/v1/people/{id}/enrichParameters
Request body
application/json
PersonEnrichRequestobjectlinkedin_urlfull_namecompany_domainResponses
/api/v1/people/searchParameters
Request body
application/json
PersonSearchRequestobjectPreferred agent discovery path (capability data.person.search). Pass limit. Optional list_id writes Audiences rows. For more than ~25 results, start a Find run.
queryNatural-language people search
titlessenioritieslocationsPerson locations
company_domainscompany_sizesCompany headcount bands, e.g. "51-200", "201-500"
industriesfunding_stageslookalike_domainsPeople at companies similar to these domains
lookalike_linkedin_urlsSeed LinkedIn profile URLs for similar-people search
limitlist_idExisting people list. Matching results are written as Audiences rows (spreadsheet cells), not only graph membership.
Example
{
"titles": ["VP Sales"],
"company_sizes": ["51-200", "201-500"],
"locations": ["United States"],
"limit": 25,
"provider": "auto"
}Responses
/api/v1/phones/findParameters
Request body
application/json
FindPhoneRequestobjectperson_idlinkedin_urlemailExample
{
"person_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
"provider": "auto"
}Responses
/api/v1/signal-monitorsParameters
Request body
application/json
objectquerysignal_typeResponses
/api/v1/signals/searchParameters
Request body
application/json
objectqueryNatural-language or keyword signal query
limitResponses
Create sequences and enroll by person_ids.
Scopes: sequence:read · sequence:write · campaigns:enroll
/api/v1/sequencesResponses
/api/v1/sequencesParameters
Request body · required
application/json
CreateSequenceRequestobjectnamerequiredchannelsgraph_snapshotstepsedgesExample
{
"name": "Outbound — VP Sales",
"channels": ["email", "linkedin"]
}Responses
/api/v1/sequences/{id}Parameters
Responses
/api/v1/sequences/{id}Parameters
Request body
application/json
UpdateSequenceRequestobjectgraph_snapshotstepsedgesResponses
/api/v1/sequences/{id}/enrollmentsParameters
Request body
application/json
objectPrefer person_ids. list_row_ids is optional for list-build UIs.
person_idslist_row_idsOptional legacy projection ids
list_idExample
{
"person_ids": [
"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
]
}Responses
Unified multi-channel threads and replies.
Scopes: message:read · message:write
/api/v1/conversationsParameters
Responses
/api/v1/conversations/{id}Parameters
Responses
/api/v1/conversations/{id}Parameters
Request body
application/json
objectstatussnoozed_untilResponses
/api/v1/conversations/{id}/draftsParameters
Request body
application/json
objectbodyrequiredsubjectResponses
/api/v1/conversations/{id}/messagesParameters
Request body
application/json
objectbodyrequiredsubjectrequire_approvalExample
{
"body": "Thanks for the reply — happy to share a 15-min overview next week."
}Responses
Skill runs, approvals, and skill catalog.
Scopes: agent:run
/api/v1/approvalsParameters
Responses
/api/v1/approvalsRequest body
application/json
objectobject
Responses
/api/v1/approvals/{id}/decideParameters
Request body
application/json
objectdecisionrequiredExample
{
"decision": "approve"
}Responses
/api/v1/runsParameters
Request body
application/json
objectskillrequirede.g. outbound, outbound/targeting, content, signals
goalinputsrequire_approvalExample
{
"skill": "outbound",
"goal": "Find and enroll VP Sales at Series B SaaS",
"inputs": {}
}Responses
/api/v1/runs/{id}Parameters
Responses
/api/v1/runs/{id}/cancelParameters
Request body
application/json
objectobject
Responses
/api/v1/runs/{id}/eventsParameters
Responses
/api/v1/skillsResponses
List, publish, pause, and run catalog + canvas agents.
Scopes: agent:run
/api/v1/agentsResponses
Response body
Errorobjecterrorrequiredcoderequiredmessagerequiredrequest_idrequireddetails/api/v1/agentsParameters
Request body
application/json
objectidfrom_catalog_idnamerequiredsummarytriggercronFive-field cron when trigger=schedule
timezoneIANA tz for schedule (default America/New_York)
crm_eventcampaign_idstepspublishDefault true — turns the agent on
Responses
/api/v1/agents/{id}Parameters
Responses
/api/v1/agents/{id}Parameters
Request body · required
application/json
objectstatusrequiredoff pauses triggers; does not cancel an in-flight run
Responses
/api/v1/agents/{id}/runsParameters
Request body
application/json
objectdry_runSkip enroll/HTTP/CRM/alerts
trigger_payloadJSON object merged into step variables (max ~32KB)
Responses
/api/v1/agents/{id}/triggerRequires `agent:run`. When the agent has a webhook secret, send `X-Armada-Signature: sha256=<hex>` (HMAC-SHA256 of the raw body) or `t=<unix>,v1=<hex>` (HMAC of `{t}.{body}`, ±5 min). Public HMAC-only URL is `POST /api/hooks/agents/{workspaceId}/{agentId}`. Prefer `POST /agents/{id}/runs` to start without HMAC.
Parameters
Request body
application/json
objectobject
Responses
Credits, on-demand limits, and Stripe checkout links.
Scopes: billing:read · billing:write
/api/v1/billingResponses
/api/v1/billing/checkout-linkRequest body
application/json
objectintent: activate_plan | enable_on_demand | upgrade | change_plan | portal
intentrequiredExample
{
"intent": "activate_plan"
}Responses
/api/v1/billing/on-demandRequest body
application/json
objectenabledrequiredlimit_centsrequiredExample
{
"enabled": true,
"limit_cents": 40000
}Responses
Named collections (views) over Person/Company + spreadsheet projection.
Scopes: lists:read · lists:write
/api/v1/listsResponses
/api/v1/listsParameters
Request body · required
application/json
objectnamerequiredentitydescriptionResponses
/api/v1/lists/{listId}Parameters
Responses
/api/v1/lists/{listId}/exportParameters
Responses
/api/v1/lists/{listId}/membersParameters
Request body
application/json
objectperson_idscompany_idsExample
{
"person_ids": [
"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
]
}Responses
/api/v1/lists/{listId}/rowsParameters
Responses
/api/v1/lists/{listId}/rowsParameters
Request body · required
application/json
objectrowsrequiredExample
{
"rows": [
{
"data": {
"email": "alex@acme.co",
"first_name": "Alex",
"company_name": "Acme"
}
}
]
}Responses
Heavy list-build Find jobs — prefer /people/search for agents.
Scopes: find:run · lists:read
/api/v1/find-runsParameters
Request body
application/json
objectList-build helper — prefer searchPeople for agent discovery.
playbook_idrequiredlist_namerequiredslotsrequiredindustryrequiredExample
{
"playbook_id": "recent-funding",
"list_name": "Funded SaaS — March",
"slots": {
"industry": "B2B SaaS"
}
}Responses
/api/v1/find-runs/{runId}Parameters
Responses
/api/v1/lists/{listId}/enrichParameters
Request body
application/json
objectList-build enrich — prefer find_email / enrich_person for agents.
fieldsrequiredlimitrequiredskip_filledrequiredExample
{
"fields": ["email", "owner"],
"limit": 200,
"skip_filled": true
}Responses
/api/v1/lists/{listId}/find-runsParameters
Request body
application/json
objectList-build job (prefer /people/search for agents). Exactly one of plan, playbook_id, or playbook_ids.
playbook_idrequiredslotsrequiredtitlerequiredhqLocationsrequiredExample
{
"playbook_id": "hiring-vp-sales",
"slots": {
"title": "VP Sales",
"hqLocations": ["United States"]
}
}Responses
Launch, pause, and sequence graphs for outbound campaigns.
Scopes: campaigns:read · campaigns:write
/api/v1/campaignsResponses
/api/v1/campaignsParameters
Request body · required
application/json
objectnamerequiredchannelsExample
{
"name": "Outbound — VP Sales",
"channels": ["email", "linkedin"]
}Responses
/api/v1/campaigns/{campaignId}Parameters
Responses
/api/v1/campaigns/{campaignId}Parameters
Request body
application/json
objectnameaccount_scopeaccount_idsExample
{
"name": "Outbound — VP Sales (v2)",
"account_scope": "selected",
"account_ids": ["11111111-1111-1111-1111-111111111111"]
}Responses
/api/v1/campaigns/{campaignId}/launchParameters
Request body
application/json
objectEmpty body is valid. Send Idempotency-Key on mutating calls.
object
Example
{}Responses
/api/v1/campaigns/{campaignId}/pauseParameters
Request body
application/json
objectobject
Example
{}Responses
/api/v1/campaigns/{campaignId}/sequenceParameters
Responses
/api/v1/campaigns/{campaignId}/sequenceParameters
Request body
application/json
objectProvide dsl, graph, or typed *_graph. dsl is compiled server-side.
typerequireddslrequiredstepsrequiredExample
{
"type": "multi",
"dsl": {
"steps": [
{ "kind": "email", "subject": "Quick question", "body": "Hi {{first_name}}…" },
{ "kind": "delay", "days": 3 },
{ "kind": "linkedin_connect", "note": "Saw your post on {{company_name}}…" }
]
}
}Responses
/api/v1/outbound/copy/generateGenerates icebreaker / opener / PS for up to 50 list rows. Batches over 20 rows enqueue asynchronously (status processing) onto agent:runs. HITL queues items on Home; autonomous writes list cells immediately.
Parameters
Request body · required
application/json
objectlist_idrequiredlist_row_idsfieldsrequiredcampaign_idrequire_approvalResponses
Pause, resume, or cancel enrollments (prefer person_ids on create).
Scopes: campaigns:enroll · campaigns:read
/api/v1/campaigns/{campaignId}/enrollmentsParameters
Responses
/api/v1/campaigns/{campaignId}/enrollmentsParameters
Request body
application/json
objectPrefer person_ids; list_row_ids optional.
person_idslist_row_idsOptional legacy projection ids
list_idExample
{
"person_ids": [
"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
]
}Responses
/api/v1/enrollments/{enrollmentId}Parameters
Responses
/api/v1/enrollments/{enrollmentId}/cancelParameters
Request body
application/json
objectobject
Example
{}Responses
/api/v1/enrollments/{enrollmentId}/pauseParameters
Request body
application/json
objectobject
Example
{}Responses
/api/v1/enrollments/{enrollmentId}/resumeParameters
Request body
application/json
objectobject
Example
{}Responses
/api/v1/sequences/{id}/enrollmentsParameters
Request body
application/json
objectPrefer person_ids. list_row_ids is optional for list-build UIs.
person_idslist_row_idsOptional legacy projection ids
list_idExample
{
"person_ids": [
"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
]
}Responses
Draft, schedule, and publish LinkedIn/X posts.
Scopes: content:read · content:write
/api/v1/content/draftsParameters
Request body
application/json
objectaccount_idrequiredchannelrequiredbodyrequiredcampaign_idExample
{
"account_id": "44444444-4444-4444-4444-444444444444",
"channel": "linkedin",
"body": "Three things we learned shipping outbound at scale…"
}Responses
/api/v1/content/generateRequest body
application/json
objectobject
Responses
/api/v1/content/ideasResponses
/api/v1/content/ideasRequest body
application/json
objectobject
Responses
/api/v1/content/ideas/{ideaId}/feedbackParameters
Request body
application/json
objectobject
Responses
/api/v1/content/memoriesResponses
/api/v1/content/memoriesRequest body
application/json
objectobject
Responses
/api/v1/content/postsResponses
/api/v1/content/postsParameters
Request body
application/json
objectAlias of scheduleContent — same body.
account_idrequiredchannelrequiredbodyrequiredscheduled_atrequiredcampaign_idExample
{
"account_id": "44444444-4444-4444-4444-444444444444",
"channel": "linkedin",
"body": "Three things we learned shipping outbound at scale…",
"scheduled_at": "2026-08-27T14:00:00-07:00"
}Responses
/api/v1/content/posts/{postId}Parameters
Responses
/api/v1/content/posts/{postId}/cancelParameters
Request body
application/json
objectobject
Example
{}Responses
/api/v1/content/posts/{postId}/publishParameters
Request body
application/json
objectobject
Responses
/api/v1/content/posts/{postId}/scheduleParameters
Request body
application/json
objectSchedules an existing draft — does not create a new post.
scheduled_atrequiredExample
{
"scheduled_at": "2026-08-27T14:00:00-07:00"
}Responses
/api/v1/content/scheduleParameters
Request body
application/json
objectPreferred schedule path (capability content.schedule).
account_idrequiredchannelrequiredbodyrequiredscheduled_atrequiredcampaign_idthread_segmentsmedia_urlsExample
{
"account_id": "44444444-4444-4444-4444-444444444444",
"channel": "linkedin",
"body": "Three things we learned shipping outbound at scale…",
"scheduled_at": "2026-08-27T14:00:00-07:00"
}Responses
/api/v1/content/watchResponses
/api/v1/content/watchResponses
/api/v1/content/watchRequest body
application/json
objectobject
Responses
/api/v1/content/watch/ingestRequest body
application/json
objectobject
Responses
Connected senders (no secrets).
Scopes: accounts:read · accounts:write
/api/v1/identitiesResponses
/api/v1/identities/connectParameters
Request body · required
application/json
AccountConnectRequestobjectchannelrequiredprovidere.g. google, microsoft, x (channel-dependent)
Example
{
"channel": "email",
"provider": "google"
}Responses
Connect email, LinkedIn, and X via Armada-branded browser hop.
Scopes: accounts:read · accounts:write
/api/v1/accountsResponses
/api/v1/accounts/connectParameters
Request body · required
application/json
AccountConnectRequestobjectchannelrequiredprovidere.g. google, microsoft, x (channel-dependent)
Example
{
"channel": "email",
"provider": "google"
}Responses
/api/v1/accounts/connect/{connectId}Parameters
Responses
Advanced per-provider escape hatch (prefer resource capabilities).
Scopes: data:read · data:run
/api/v1/providersResponses
/api/v1/providers/{provider}Parameters
Responses
/api/v1/providers/{provider}/{path}Parameters
Endpoint path segments joined by /
Responses
/api/v1/providers/{provider}/{path}Parameters
Request body
application/json
objectobject
Responses
Workspace event log for agents and webhooks.
Scopes: agent:run · webhooks:manage
/api/v1/eventsParameters
Responses
/api/v1/runs/{id}/eventsParameters
Responses
Browse catalog and purchase LinkedIn seats or email infra.
Scopes: inventory:read · inventory:write
/api/v1/inventory/catalogResponses
/api/v1/inventory/ordersResponses
/api/v1/inventory/ordersParameters
Request body · required
application/json
CreateInventoryOrderRequestobjectkindrequiredquantityrequiredtermregionaccount_typebrandingagreements_acceptedrequiredagreement_idsagreement_versionsExample
{
"kind": "linkedin",
"quantity": 2,
"term": "quarterly",
"region": "western",
"account_type": "standard",
"branding": "armada_sdr",
"agreements_accepted": true,
"agreement_ids": ["linkedin-rental"],
"agreement_versions": ["2026-01"]
}Responses
/api/v1/inventory/orders/{orderId}Parameters
Responses
Subscribe to workspace events (HMAC-signed).
Scopes: webhooks:manage
/api/v1/webhooksResponses
/api/v1/webhooksParameters
Request body · required
application/json
CreateWebhookRequestobjecturlrequiredeventsEvent names to subscribe to (defaults to the live webhook enum)
descriptionExample
{
"url": "https://your-app.com/webhooks/armada",
"events": ["enrollment.replied", "find_run.completed"],
"description": "Prod CRM sync"
}Responses
/api/v1/webhooks/{webhookId}Parameters
Responses
/api/v1/analytics/campaigns/{id}Parameters
Responses
/api/v1/analytics/outboundResponses
/api/v1/calendar/eventsParameters
Responses
/api/v1/calendar/eventsParameters
Request body · required
application/json
objecttitlerequiredstartrequiredendrequiredtimezonedescriptionattendeesprovidersend_updatesadd_meet_linkResponses
/api/v1/calendar/events/{id}Parameters
Responses
/api/v1/calendar/events/{id}Parameters
Request body
application/json
objecttitlestartendtimezonedescriptionattendeessend_updatesResponses
/api/v1/calendar/freebusyRequest body · required
application/json
objectfromrequiredtorequiredtimezoneproviderResponses
/api/v1/calendar/propose-slotsRequest body
application/json
objectfromtotimezonemaxduration_minutesproviderResponses
/api/v1/callsParameters
Responses
/api/v1/callsParameters
Request body · required
application/json
objecttoE164requiredE.164 destination
fromNumberIdlistRowIdResponses
/api/v1/calls/{sessionId}Parameters
Responses
/api/v1/calls/{sessionId}/dispositionParameters
Request body · required
application/json
objectdispositionrequirednotesResponses
/api/v1/calls/{sessionId}/recordingParameters
Responses
/api/v1/phone-numbersResponses
/api/v1/smsParameters
Request body · required
application/json
objecttoE164requiredbodyrequiredfromNumberIdlistRowIdResponses
/api/v1/crm/activityParameters
Request body · required
application/json
objectconnection_idrequiredlist_row_idcall_session_idnotesdispositionResponses
/api/v1/crm/connectionsResponses
/api/v1/crm/dealsParameters
Request body · required
application/json
objectconnection_idrequiredlist_row_idrequirednameamountResponses
/api/v1/crm/syncParameters
Request body · required
application/json
objectconnection_idrequiredlist_idrequiredkindobjectResponses
/api/v1/gtm/inboxRequest body
application/json
objectlimitunread_onlychannelqResponses
/api/v1/gtm/outboundParameters
Request body · required
application/json
objecticprequiredplaybook_idcampaign_idlist_namelimitentityrequire_approvalResponses
/api/v1/gtm/researchParameters
Request body · required
application/json
objectqueryrequireddomaintitleslimitfind_emailResponses
/api/v1/gtm/standupParameters
Responses
/api/v1/mcpRequest body
application/json
objectobject
Responses