Skip to main content
POST
CRM
Three read-only tools use a connection to Salesforce or HubSpot:
  • POST /v1/tools/crm/accounts (crm_accounts)
  • POST /v1/tools/crm/contacts (crm_contacts)
  • POST /v1/tools/crm/opportunities (crm_opportunities)
Select connection_id from GET /v1/connections, by system and account_label. Reads use connected_systems grants and payment headers. Nothing fetched is stored or logged; receipts contain identifiers and record counts only.

Input

Output

Each record carries source: { system, id }. No next_cursor means finished.
Missing fields are null. Owner/stage are system identifiers. Status follows closed/won flags. HubSpot accounts/opportunities are companies/deals. Associated company: requested, otherwise primary, otherwise lexically lowest id. HubSpot filters each page by name. Empty pages can have next_cursor; continue. Beyond 10,000 records, narrow updated_since or account_id.

Errors

Refusals precede payment: another agent’s connection returns 404 connection_not_found; wrong system, 400 connection_wrong_system; inactive connections, 409; unavailable systems, 503 not_configured. Cursor/limit refusals: 400 unsupported_for_system or not_supported. Busy/failed reads: 503 rate_limited or system_unavailable; expired sign-in: 409 connection_expired. Failed paid reads return account credit.

Write a note

POST /v1/tools/crm/notes (crm_notes_create) needs approval unless an enabled agent policy allows it. Send payment headers and Idempotency-Key. After approval, retry unchanged with X-Approval-Id. Same-key retries return the original note without writing again. body is plain text, 1 to 5,000 characters. connection_scope_missing means use console Reconnect to grant writing permission. write_outcome_unknown means inspect the CRM before using another key. created_at is the UTC dispatch time. Only the approval record retains the note body. See Pricing.
record.type: account, contact or opportunity.