Entity reference
The headline entities exposed by /api/v1. The full machine-readable shape — including every additional canonical model reachable via the dynamic /{entity} route — lives at /openapi.json. Hit GET /v1/schema at runtime for the live registry that your workspace has access to.
WorkRecord
/v1/work-recordsA unit of work your business performs — job, appointment, case, matter, delivery, ticket. Polymorphic via the canonical kind enum; the per-org WorkTypeDefinition controls which kinds you can write.
| Field | Type | Description |
|---|---|---|
| id | uuid | Stable identifier. |
| organizationId | uuid | Owning org. |
| canonicalKind | enum | `job` | `work_order` | `matter` | `case` | `appointment_encounter` | `permit_record` | `repair_order` | `move` | `claim` | `engagement` | `arrangement` | `ticket_generic` | `service_request` |
| title | string | Human-readable title. |
| description | string? | Free-form details. |
| recordState | enum | `draft` | `active` | `blocked` | `completed` | `canceled` |
| status | string | Workflow status (free-text, per org). |
| stage | string | Stage in the work lifecycle (free-text, per org). |
| priority | enum | `low` | `normal` | `high` | `urgent` |
| source | enum | `call` | `sms` | `voicemail` | `manual` | `api` | `import` |
| customerId | uuid | Linked customer. |
| primaryPersonId | uuid? | Primary contact. |
| primaryLocationId | uuid? | Service location. |
| sourceCallSessionId | uuid? | Call that produced this record, if any. |
| structuredFieldsJson | object | Org-configured fields for this kind. |
| scheduledStart | datetime? | |
| scheduledEnd | datetime? | |
| completedAt | datetime? | |
| createdAt | datetime | |
| updatedAt | datetime |
Example response
{
"id": "5d8f8e92-3c41-4d2f-9c1f-1c4ab9b5f0a1",
"organizationId": "0c4ab9b5-…",
"canonicalKind": "job",
"title": "AC unit not cooling",
"recordState": "active",
"status": "scheduled",
"stage": "dispatch",
"priority": "high",
"source": "call",
"customerId": "6f3c…",
"primaryPersonId": "8a91…",
"structuredFieldsJson": { "equipment": "Carrier 24ACC6", "issue_type": "not_cooling" },
"scheduledStart": "2026-05-22T14:00:00Z",
"scheduledEnd": "2026-05-22T16:00:00Z",
"completedAt": null,
"createdAt": "2026-05-21T10:30:00Z",
"updatedAt": "2026-05-21T10:35:00Z"
}Person
/v1/people/by-phone, /v1/people/upsertA person directory record. The upsert endpoint deduplicates on phone or email — re-call with the same `primaryPhone` to update rather than create a duplicate.
| Field | Type | Description |
|---|---|---|
| id | uuid | |
| organizationId | uuid | |
| displayName | string | What you'd show in UI. |
| legalName | string? | Full legal name when known. |
| primaryEmail | string? | |
| primaryPhone | string? | E.164 (`+15551234567`). |
| createdAt | datetime | |
| updatedAt | datetime |
Example response
{
"id": "8a91…",
"organizationId": "0c4ab9b5-…",
"displayName": "Jane Smith",
"legalName": "Jane M. Smith",
"primaryEmail": "jane@example.com",
"primaryPhone": "+15125551234",
"createdAt": "2026-04-01T09:00:00Z",
"updatedAt": "2026-05-15T12:30:00Z"
}Sms
/v1/smsInbound and outbound text messages. GET lists with cursor pagination; POST sends new outbound. Used by the Zapier `sms_received` / `sms_sent` / `send_sms` triggers + action.
| Field | Type | Description |
|---|---|---|
| id | uuid | |
| organizationId | uuid | |
| direction | enum | `inbound` | `outbound` |
| from | string | E.164. |
| to | string | E.164. |
| body | string | |
| threadId | uuid? | Conversation thread, if any. |
| sentAt | datetime | |
| deliveredAt | datetime? | Carrier delivery receipt. |
Example response
{
"id": "3a4f…",
"organizationId": "0c4ab9b5-…",
"direction": "inbound",
"from": "+15125551234",
"to": "+15125550100",
"body": "Sounds good, see you at 2pm",
"threadId": "c01f…",
"sentAt": "2026-05-21T15:45:00Z",
"deliveredAt": "2026-05-21T15:45:01Z"
}Voicemail
/v1/voicemailsCaller voicemails with transcripts. Polled by the Zapier `voicemail_received` trigger; also fires the `voicemail.received` webhook event.
| Field | Type | Description |
|---|---|---|
| id | uuid | |
| organizationId | uuid | |
| callSessionId | uuid? | Originating call, if any. |
| callerNumber | string | E.164. |
| transcript | string? | Best-effort transcription. |
| recordingUrl | string? | Signed URL (TTL ~5min). |
| createdAt | datetime |
Example response
{
"id": "vm_2c4e…",
"organizationId": "0c4ab9b5-…",
"callSessionId": "cs_99fa…",
"callerNumber": "+15125559876",
"transcript": "Hi this is Bob, please call me back about the quote.",
"recordingUrl": "https://media.adaptlive.app/…?sig=…",
"createdAt": "2026-05-21T11:20:00Z"
}Draft
/v1/draftsPost-call draft of a WorkRecord pending human approval. Filter `?status=approved` for the Zapier `draft_approved` polling trigger.
| Field | Type | Description |
|---|---|---|
| id | uuid | |
| organizationId | uuid | |
| callSessionId | uuid | Call that produced this draft. |
| status | enum | `draft` | `pending_review` | `approved` | `rejected` | `synced` |
| workRecordId | uuid? | Created on approval. |
| payload | object | Proposed WorkRecord fields. |
| approvedBy | uuid? | User who approved. |
| approvedAt | datetime? | |
| createdAt | datetime | |
| updatedAt | datetime |
Example response
{
"id": "dft_8e2a…",
"organizationId": "0c4ab9b5-…",
"callSessionId": "cs_99fa…",
"status": "approved",
"workRecordId": "5d8f8e92-…",
"payload": { "title": "AC repair", "canonicalKind": "job", "priority": "high" },
"approvedBy": "usr_4b8c…",
"approvedAt": "2026-05-21T10:45:00Z",
"createdAt": "2026-05-21T10:30:00Z",
"updatedAt": "2026-05-21T10:45:00Z"
}Fact
/v1/facts/{id}/confirm, /promote, /rejectA conversational fact captured during a call, attached to a Person, Company, Customer, or WorkRecord. Lifecycle: `proposed` → `confirmed` → (optionally) `promoted` to a broader subject. Definitions live at `/v1/fact-definitions`.
| Field | Type | Description |
|---|---|---|
| id | uuid | |
| organizationId | uuid | |
| subjectType | enum | `person` | `company` | `customer` | `work_record` |
| subjectId | uuid | |
| key | string | Fact definition key, e.g. `gate_code`, `preferred_language`. |
| value | any | Type per the FactDefinition. |
| status | enum | `proposed` | `confirmed` | `rejected` | `promoted` | `superseded` |
| confidence | number? | 0–1, when AI-extracted. |
| sourceCallSessionId | uuid? | |
| createdAt | datetime |
Example response
{
"id": "f_a13c…",
"organizationId": "0c4ab9b5-…",
"subjectType": "person",
"subjectId": "8a91…",
"key": "gate_code",
"value": "#4421",
"status": "confirmed",
"confidence": 0.92,
"sourceCallSessionId": "cs_99fa…",
"createdAt": "2026-05-21T10:32:00Z"
}More entities
Additional canonical models — phone numbers, signals, webhook subscriptions, fact definitions, integration connections, external refs, field-history-entries — are reachable via the dynamic /v1/{entity} route. Slugs come from GET /v1/schema; the response envelope is the same as for the headline entities above.
