Endpoints
All endpoints require a valid API key unless otherwise noted. See Authentication for details on creating and using API keys.
Health check
Verify your API key is valid and inspect its scopes. Requires any valid API key.
Response:
{
"status": "ok",
"org_id": "550e8400-e29b-41d4-a716-446655440000",
"scopes": ["read", "ask_sybill"]
}
Conversations
Returns a paginated list of conversations in your organization. Requires the read scope.
Query parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | integer | 20 | Number of results per page (1–50) |
startedAfter | string (ISO 8601) | — | Filter: only conversations starting after this timestamp |
startedBefore | string (ISO 8601) | — | Filter: only conversations starting before this timestamp |
type | string | — | Filter by meeting type: INTERNAL or EXTERNAL |
title | string | — | Search by conversation title |
attendees | string | — | Search by attendee name or email |
crmName | string | — | Search by CRM opportunity or account name |
cursor | string | — | Pagination cursor from a previous response |
Response:
{
"conversations": [
{
"conversationId": "550e8400-e29b-41d4-a716-446655440000",
"title": "Q4 Pipeline Review",
"startTime": "2023-11-14T22:13:20Z",
"endTime": "2023-11-15T00:13:20Z",
"type": "EXTERNAL",
"participants": [
{
"name": "Jane Smith",
"email": "jane@example.com",
"attended": true
}
],
"crm": {
"id": "006...",
"name": "Acme Deal",
"type": "opportunity"
}
}
],
"pagination": {
"nextCursor": "eyJzZWFyY2hBZnRlciI6...",
"hasMore": true
}
}
See Pagination for details on iterating through results.
Returns the full detail for a single conversation, including transcript, recording, and insights. Requires the read scope.
Path parameters:
| Parameter | Type | Description |
|---|---|---|
conversationId | UUID | The conversation identifier |
Response:
{
"conversationId": "550e8400-e29b-41d4-a716-446655440000",
"title": "Q4 Pipeline Review",
"startTime": "2023-11-14T22:13:20Z",
"endTime": "2023-11-15T00:13:20Z",
"type": "EXTERNAL",
"category": "prospect_negotiation",
"participants": [
{
"name": "Jane Smith",
"email": "jane@example.com",
"attended": true
}
],
"crm": {
"id": "006...",
"name": "Acme Deal",
"type": "opportunity"
},
"recordings": {
"videoUrl": "https://recordings.example.com/meeting.mp4?...",
"audioUrl": "https://recordings.example.com/meeting.mp3?..."
},
"transcript": [
{
"speaker": "Jane Smith",
"text": "Let's review the pipeline numbers.",
"startTime": 0.0,
"endTime": 4.5
}
],
"summary": {
"Outcome": "Deal moved to negotiation stage.",
"Key Takeaways": [
{"topic": "Pricing", "key_takeaway": "Customer requested a 15% volume discount."}
],
"Pain Points": ["Integration complexity", "Timeline concerns"],
"FAQ": [
{"question": "What's the pricing?", "answer": "Starting at $10k/year"}
],
"MEDDIC Score": 85
}
}
Errors:
| Status | Meaning |
|---|---|
404 Not Found | Conversation does not exist or is not accessible to your organization |
Deals
Returns a paginated list of CRM deals in your organization. Requires the read scope. Returns core deal fields only; use the detail endpoint for full information including summary and contacts.
Query parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | integer | 20 | Number of results per page (1–50) |
name | string | — | Filter: search by deal name (case-insensitive) |
stage | string | — | Filter: exact match on deal stage |
closed | boolean | — | Filter: closed status (true or false) |
owner | string | — | Filter: search by owner name or email (case-insensitive) |
closeDateAfter | string (ISO 8601) | — | Filter: deals with close date on or after this timestamp |
closeDateBefore | string (ISO 8601) | — | Filter: deals with close date before this timestamp |
amountMin | number | — | Filter: minimum deal amount |
amountMax | number | — | Filter: maximum deal amount |
lastActivityAfter | string (ISO 8601) | — | Filter: deals with last activity on or after this timestamp |
lastActivityBefore | string (ISO 8601) | — | Filter: deals with last activity before this timestamp |
cursor | string | — | Pagination cursor from a previous response |
Response:
{
"deals": [
{
"dealId": "006ABC000000123456",
"name": "Acme Enterprise Deal",
"accountName": "Acme Corp",
"stage": "Negotiation",
"pipeline": "Sales Pipeline",
"amount": 50000.0,
"closeDate": "2024-03-15T00:00:00Z",
"closed": false,
"createdDate": "2023-09-01T10:30:00Z",
"lastActivityDate": "2024-01-10T15:30:00Z",
"owner": {
"name": "Jane Doe",
"email": "jane@example.com"
}
}
],
"pagination": {
"nextCursor": "eyJ0cyI6MTcwMDAwMDAwMDAwMCwiaWQi...",
"hasMore": true
}
}
See Pagination for details on iterating through results.
Returns the full detail for a single deal, including AI-generated summary and contacts. Requires the read scope.
Path parameters:
| Parameter | Type | Description |
|---|---|---|
dealId | string | The CRM remote identifier of the deal |
Response:
{
"dealId": "006ABC000000123456",
"name": "Acme Enterprise Deal",
"accountName": "Acme Corp",
"stage": "Negotiation",
"pipeline": "Sales Pipeline",
"amount": 50000.0,
"closeDate": "2024-03-15T00:00:00Z",
"closed": false,
"createdDate": "2023-09-01T10:30:00Z",
"lastActivityDate": "2024-01-10T15:30:00Z",
"owner": {
"name": "Jane Doe",
"email": "jane@example.com"
},
"summary": {
"Current Status": "Deal is progressing well through negotiation.",
"Pain Points": ["Budget constraints", "Timeline pressure"],
"Value Proposition": "Cost savings and efficiency gains"
},
"crmAutofill": {
"Next Steps": "Schedule follow-up call with legal team",
"Close Date": "2024-03-15"
},
"contacts": [
{
"name": "John Smith",
"email": "john@acme.com",
"title": "VP Sales",
"phone": "+1234567890"
}
]
}
Errors:
| Status | Meaning |
|---|---|
404 Not Found | Deal does not exist or is not accessible to your organization |
Accounts
Returns a paginated list of CRM accounts in your organization. Requires the read scope. Returns core account fields only; use the detail endpoint for full information including contacts and synced CRM fields.
Query parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | integer | 20 | Number of results per page (1–50) |
name | string | — | Filter: search by account name (case-insensitive) |
website | string | — | Filter: search by website URL (case-insensitive) |
owner | string | — | Filter: search by owner name or email (case-insensitive) |
createdAfter | string (ISO 8601) | — | Filter: accounts created on or after this timestamp |
createdBefore | string (ISO 8601) | — | Filter: accounts created before this timestamp |
lastActivityAfter | string (ISO 8601) | — | Filter: accounts with last activity on or after this timestamp |
lastActivityBefore | string (ISO 8601) | — | Filter: accounts with last activity before this timestamp |
cursor | string | — | Pagination cursor from a previous response |
Response:
{
"accounts": [
{
"accountId": "001ABC000000123456",
"name": "Acme Corp",
"website": "https://acme.com",
"owner": {
"name": "Jane Doe",
"email": "jane@example.com"
},
"createdDate": "2023-09-01T10:30:00Z",
"lastActivityDate": "2024-01-10T15:30:00Z",
"latestDeal": {
"dealId": "006ABC000000789012",
"name": "Acme Enterprise Deal",
"stage": "Negotiation",
"amount": 50000.0,
"closeDate": "2024-03-15T00:00:00Z"
}
}
],
"pagination": {
"nextCursor": "eyJ0cyI6MTcwMDAwMDAwMDAwMCwiaWQi...",
"hasMore": true
}
}
See Pagination for details on iterating through results.
Returns the full detail for a single account, including contacts and synced CRM fields. Requires the read scope.
Path parameters:
| Parameter | Type | Description |
|---|---|---|
accountId | string | The CRM remote identifier of the account |
Response:
{
"accountId": "001ABC000000123456",
"name": "Acme Corp",
"website": "https://acme.com",
"owner": {
"name": "Jane Doe",
"email": "jane@example.com"
},
"createdDate": "2023-09-01T10:30:00Z",
"lastActivityDate": "2024-01-10T15:30:00Z",
"latestDeal": {
"dealId": "006ABC000000789012",
"name": "Acme Enterprise Deal",
"stage": "Negotiation",
"amount": 50000.0,
"closeDate": "2024-03-15T00:00:00Z"
},
"contacts": [
{
"name": "John Smith",
"email": "john@acme.com",
"title": "VP Sales",
"phone": "+1234567890"
}
],
"syncedCrmFields": {
"Industry": "Technology",
"Phone": "+1-555-0100",
"Annual Revenue": "$10M",
"Number of Employees": "500"
}
}
Errors:
| Status | Meaning |
|---|---|
404 Not Found | Account does not exist or is not accessible to your organization |
Common error responses
All endpoints may return these errors:
| Status | Meaning |
|---|---|
401 Unauthorized | Missing, invalid, or revoked API key |
403 Forbidden | API key lacks the required scope |
429 Too Many Requests | Rate limit exceeded (see Rate Limiting) |
500 Internal Server Error | Unexpected server error |