CRM Integration Reference
A secure, read-first CRM API for conversations, transcripts, customers, projects, and message/voice automations. This guide is everything your team needs to connect and start pulling data.
1 — Your portal
Sign in to generate and manage API keys:
Open the Key Portal
Live URL: /portal/
2 — Your access code
e3f2fdf6Enter this code on the portal login screen. Keep it confidential — anyone with it can create API keys for your account.
3 — Create a key & call the API
In the portal, click Generate API Key, copy the key (shown once), then use it as a Bearer token in the examples below.
Every API request must include an API key as a Bearer token in the Authorization header. Keys are created in the Key Portal and begin with obq_live_ (production) or obq_test_ (testing).
Authorization: Bearer obq_live_xxxxxxxxxxxxxxxxxxxxx
Requests with a missing, invalid, expired, or revoked key return 401 Unauthorized. Your key is automatically scoped to your account — you only ever see your own data.
| Item | Value |
|---|---|
| Base URL | https://your-domain |
| Health check | GET /health → { "status": "ok" } (no auth) |
| Format | JSON request & response bodies; Content-Type: application/json |
| Read API | /v1/* — strictly read-only (only GET/HEAD; other methods return 405) |
| Hub API | /hub/v1/* — read & write CRM operations and automations |
{
"error": "Not Found",
"message": "Conversation not found"
}
Common statuses: 400 bad request, 401 auth, 403 missing scope, 404 not found, 405 read-only violation, 502 provider/dispatch failure.
List endpoints accept limit (default 50, max 200) and offset (default 0).
{
"data": [ ... ],
"pagination": { "limit": 50, "offset": 0, "total": 128 }
}
Conversation and transcript data. Requires a valid key. Read-only — write attempts return 405.
/v1/conversationsList conversations. Filters: channel, status, start_date, end_date, plus limit/offset.
/v1/conversations/{conversationId}Fetch a single conversation.
/v1/conversations/{conversationId}/messagesList messages in a conversation (paginated).
/v1/conversations/{conversationId}/transcriptFull transcript. Add ?format=text for plain-text output (default is JSON).
curl -H "Authorization: Bearer obq_live_xxx" \
"https://your-domain/v1/conversations?limit=5"
/hub/v1/customers — list customers (paginated)/hub/v1/projects — list projects · filters: pipeline_stage, project_status/hub/v1/projects/{projectId} — single project/hub/v1/projects/{projectId}/events — project event history/hub/v1/communications — queued/sent messages · filter: status/hub/v1/templates — message templates/hub/v1/providers — supported providers (sendblue, vapi)/hub/v1/integrations — configured integrations (secrets masked)/hub/v1/customers — create/update a customer · requires id or external_id/hub/v1/projects — create/update a project · requires customer_id/hub/v1/projects/{projectId}/status — update status/stage; triggers matching automations/hub/v1/events — record an event · requires project_id, event_type/hub/v1/communications — queue a message · requires channel, content/hub/v1/communications/{id}/dispatch — send a queued message via provider (sms/imessage = Sendblue, call = Vapi)/hub/v1/communications/{id}/mark-sent — mark a message as sent/hub/v1/campaigns/adjust — adjust a campaign · requires campaign_id, action/hub/v1/integrations/{provider} — store provider config · requires config.api_keycurl -X PATCH \
-H "Authorization: Bearer obq_live_xxx" \
-H "Content-Type: application/json" \
-d '{ "project_status": "contract_signed" }' \
"https://your-domain/hub/v1/projects/PROJECT_ID/status"
Posting an event (or changing a project status) automatically queues the matching SMS/email messages from your template library. SMS & iMessage send through Sendblue; voice calls through Vapi. (Email templates are queued; an email provider is not currently connected.)
| Event type | Channels queued |
|---|---|
website_visited | SMS |
process_abandoned | SMS + a 14-day email drip |
contract_ready | SMS + email |
contract_generated | SMS reminders (1d / 7d / 23d) |
contract_signed | SMS + email |
build_day_confirmed | SMS + email |
material_order_placed | SMS + email |
day_before_build | SMS + email |
weather_warning / weather_delay | SMS + email |
install_complete_payment_pending | SMS + email (24h) |
paid_in_full | SMS + email |
Each API key carries one or more scopes. New keys default to all four.
| Scope | Grants |
|---|---|
read:conversations | Read conversations & messages |
read:transcripts | Read full transcripts |
read:hub | Read customers, projects, events, communications, templates |
write:hub | Create/update CRM records, trigger events & dispatch messages |