SiftDocs
Deployment

API Access

Integrate Sift programmatically using the REST API (Growth and Scale plans)

API Access

API access requires a Growth or Scale plan.

The Sift REST API lets you pull lead data, conversation history, and update lead statuses programmatically — for CRM sync, custom dashboards, or automation workflows.

API Keys

API keys are self-serve — no need to contact support.

Generate an API Key

Click Settings in the sidebar, then select the API Keys tab.

Enter a name for the key (e.g. "CRM integration") and click Create.

The key is shown once — copy it now and store it securely. You cannot retrieve it again.

Revoking an API Key

Go to Settings → API Keys, find the key you want to revoke, and click Delete. The key is revoked immediately.

If you delete your account, all API keys are revoked automatically.

Authentication

All API v1 requests must include your API key in the Authorization header:

Authorization: Bearer sk_live_xxxxxxxxxxxxxxxx

The organization_id query parameter is not required for v1 endpoints — your API key already scopes all requests to your organisation.

Base URL

https://api.sift.software

Endpoints

Leads

MethodEndpointDescription
GET/api/v1/leadsList leads (paginated, newest first)
GET/api/v1/leads/{id}Get a single lead by ID
PATCH/api/v1/leads/{id}/statusUpdate a lead's status

List leads

GET /api/v1/leads?limit=50&offset=0

Query parameters:

  • limit — 1–500 (default 50)
  • offset — pagination offset (default 0)
  • since — ISO 8601 timestamp; return only leads created at or after this time. Use this to poll for new leads incrementally (e.g. since=2026-06-01T00:00:00Z).
  • status — filter by status. Accepts new, hot, warm, cold, qualified, converted, lost, contacted, rejected, archived.

Tip

For a CRM sync, poll GET /api/v1/leads?status=qualified&since=<last-seen-timestamp> on a schedule and advance your stored timestamp to the newest created_at you've processed.

Response (additional fields such as budget_max, bedrooms_max, buyer_scheme, stamp_duty_position, financing_status, and updated_at are also returned):

{
  "leads": [
    {
      "id": "uuid",
      "full_name": "Sarah Thompson",
      "email": "sarah@example.com",
      "phone": "+44 7700 900000",
      "score": 82,
      "status": "new",
      "chain_status": "chain_free",
      "mortgage_status": "dip_held",
      "budget_min": 350000,
      "budget_max": 450000,
      "timeline": "within_month",
      "purpose": "buy",
      "preferred_areas": ["Clifton", "Redland"],
      "bedrooms_min": 3,
      "created_at": "2026-05-01T10:23:00Z"
    }
  ],
  "limit": 50,
  "offset": 0,
  "count": 50
}

Update lead status

PATCH /api/v1/leads/{id}/status
Content-Type: application/json

{ "status": "contacted" }

Allowed status values: new, contacted, qualified, rejected, archived.

Conversations

MethodEndpointDescription
GET/api/v1/conversationsList conversations (paginated, newest first)
GET/api/v1/conversations/{id}/messagesGet messages for a conversation

List conversations

GET /api/v1/conversations?limit=50&offset=0

Response includes id, lead_id, channel (website, sms, or email), status, languages_used, created_at, and updated_at.

Get messages

GET /api/v1/conversations/{id}/messages?limit=100

Returns a chronological list of messages with role (user or assistant), content, and created_at.

Rate Limits

API requests are rate-limited per organisation. If you hit the limit, the API returns HTTP 429. Wait before retrying.

Common Error Responses

StatusMeaning
401Missing or invalid API key
403Feature not available on your plan
404Resource not found or belongs to another org
422Invalid request body (e.g. unsupported status value)
429Rate limit exceeded

Next Steps

On this page