Endpoints

All endpoints require a valid API key unless otherwise noted. See Authentication for details on creating and using API keys.


Health check

GET/v1/health

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

GET/v1/conversations

Returns a paginated list of conversations in your organization. Requires the read scope.

Query parameters:

ParameterTypeDefaultDescription
limitinteger20Number of results per page (1–50)
startedAfterstring (ISO 8601)Filter: only conversations starting after this timestamp
startedBeforestring (ISO 8601)Filter: only conversations starting before this timestamp
typestringFilter by meeting type: INTERNAL or EXTERNAL
titlestringSearch by conversation title
attendeesstringSearch by attendee name or email
crmNamestringSearch by CRM opportunity or account name
cursorstringPagination 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.


GET/v1/conversations/{conversationId}

Returns the full detail for a single conversation, including transcript, recording, and insights. Requires the read scope.

Path parameters:

ParameterTypeDescription
conversationIdUUIDThe 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:

StatusMeaning
404 Not FoundConversation does not exist or is not accessible to your organization

Deals

GET/v1/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:

ParameterTypeDefaultDescription
limitinteger20Number of results per page (1–50)
namestringFilter: search by deal name (case-insensitive)
stagestringFilter: exact match on deal stage
closedbooleanFilter: closed status (true or false)
ownerstringFilter: search by owner name or email (case-insensitive)
closeDateAfterstring (ISO 8601)Filter: deals with close date on or after this timestamp
closeDateBeforestring (ISO 8601)Filter: deals with close date before this timestamp
amountMinnumberFilter: minimum deal amount
amountMaxnumberFilter: maximum deal amount
lastActivityAfterstring (ISO 8601)Filter: deals with last activity on or after this timestamp
lastActivityBeforestring (ISO 8601)Filter: deals with last activity before this timestamp
cursorstringPagination 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.


GET/v1/deals/{dealId}

Returns the full detail for a single deal, including AI-generated summary and contacts. Requires the read scope.

Path parameters:

ParameterTypeDescription
dealIdstringThe 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:

StatusMeaning
404 Not FoundDeal does not exist or is not accessible to your organization

Accounts

GET/v1/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:

ParameterTypeDefaultDescription
limitinteger20Number of results per page (1–50)
namestringFilter: search by account name (case-insensitive)
websitestringFilter: search by website URL (case-insensitive)
ownerstringFilter: search by owner name or email (case-insensitive)
createdAfterstring (ISO 8601)Filter: accounts created on or after this timestamp
createdBeforestring (ISO 8601)Filter: accounts created before this timestamp
lastActivityAfterstring (ISO 8601)Filter: accounts with last activity on or after this timestamp
lastActivityBeforestring (ISO 8601)Filter: accounts with last activity before this timestamp
cursorstringPagination 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.


GET/v1/accounts/{accountId}

Returns the full detail for a single account, including contacts and synced CRM fields. Requires the read scope.

Path parameters:

ParameterTypeDescription
accountIdstringThe 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:

StatusMeaning
404 Not FoundAccount does not exist or is not accessible to your organization

Common error responses

All endpoints may return these errors:

StatusMeaning
401 UnauthorizedMissing, invalid, or revoked API key
403 ForbiddenAPI key lacks the required scope
429 Too Many RequestsRate limit exceeded (see Rate Limiting)
500 Internal Server ErrorUnexpected server error