Skip to content
Open app

Authentication

Every request to the CRM Solid Public API must be authenticated with an API key sent as a bearer token. Each key is bound to a single workspace and carries a specific set of scopes that determine which operations it may perform. All responses are JSON.

A CRM Solid API key looks like this:

csk_<env>_<keyId><secret>

For example:

csk_live_a1b2c3d4e5f6abcdefghijklmnopqrstuvwxyz123456
  • csk_ is a fixed prefix identifying the key as a CRM Solid key.
  • <env> is the environment — live or test (see Environments).
  • <keyId> is the public, non-secret identifier shown in the dashboard.
  • <secret> is the secret portion, used to authenticate the request.

A key always maps to one workspace, and all actions performed with it are attributed to that workspace’s identity.

Pass your key in the Authorization header using the Bearer scheme:

Authorization: Bearer csk_live_…

The /v1/me endpoint returns the workspace identity associated with the key and requires no specific scope, so it makes a convenient connectivity smoke-test.

Terminal window
curl https://api.crmsolid.com/v1/me \
-H "Authorization: Bearer csk_live_…"

A successful response includes the workspace identity and the scopes attached to the calling key:

{
"id": 42,
"email": "[email protected]",
"name": "Acme Inc.",
"createdAt": "2024-01-15T09:00:00Z",
"apiKey": {
"keyId": "abc123def456",
"scopes": ["contacts:read", "telegram:send"]
}
}

Access is scope-based: each key is issued with a specific set of scopes such as contacts:read or telegram:send. An operation that requires a scope your key was not granted returns 403 Forbidden. Grant a key only the scopes it needs.

ScopePermission
telegram:sendQueue outbound Telegram messages
telegram:readRead message status / delivery info
twitter:sendSend Twitter (X) DMs through connected accounts
contacts:readRead contacts, conversation history, tags, lead score and activity timeline
contacts:writeUpdate contacts: notes, pipeline stage, tags, lead score, assignment
sequences:readList campaign sequences and inspect their progress
sequences:writePause / resume sequences
analytics:readRead dashboard KPIs and messaging stats
finance:readRead finance summary, transactions, invoices and revenue sources
deals:readList and read sales deals (pipeline)
deals:writeCreate deals and move pipeline stages (won is panel-only)
tasks:readList and read CRM tasks / reminders
tasks:writeCreate tasks and change their status
email:readRead email inbox threads and messages
email:writeSet email thread status and assignment
pipelines:readRead pipeline boards and stage columns
webhooks:readList webhook endpoints and their deliveries
webhooks:writeRegister, rotate, test and delete webhook endpoints
agents:readList and inspect AI agents
agents:runRun the AI agent test playground (generates a draft reply, never sends)
jobs:readRead the outbound message-job monitor
finance:write powerfulCreate transactions and mark invoices paid (off by default)
email:send powerfulSend an email reply inside an existing thread (off by default)
keys:manage powerfulMint, list and revoke API keys, attenuated to your own scopes (off by default)

Keys are environment-scoped via the <env> segment:

  • csk_live_* — production keys that act on real workspace data.
  • csk_test_* — keys for testing against the sandbox / test environment.

Use the environment that matches the data you intend to operate on.

StatusMeaning
401 UnauthorizedThe bearer token is missing or invalid.
403 ForbiddenThe token is valid but lacks the required scope, or the IP is not on the allowlist.

See Errors for the full list of status codes and the JSON error envelope.

  • Quickstart — make your first authenticated call.
  • API reference — browse every endpoint and its required scopes.
  • Errors — status codes, error slugs and the response envelope.