Warpflow
For Developers

API Reference

Complete endpoint reference for the Warpflow Signals REST API—webhooks, AI actions, email, conversations, config, and usage.

Base URL

https://api.warpflow.ai/api/v1

All endpoints are prefixed with /api/v1. Authentication is required on every request—see Authentication.

Interactive API docs

Explore and test every endpoint in the browser using the interactive API documentation:

Open Interactive API Docs →

The interactive docs (Swagger UI) let you authorize with your API key and make live requests against the API. Use them to explore request/response schemas, try out endpoints, and generate code snippets.

The OpenAPI spec is also available for importing into Postman, Insomnia, or code generators: Download OpenAPI spec

Endpoint groups

Webhooks—Inbound event ingestion

MethodPathDescription
POST/webhook/custom/{tenant_id}/{source_id}Custom webhook—any JSON payload. Add ?mode=sync for immediate response
POST/webhook/zapier/{tenant_id}Zapier pipeline—full classify → score → route → reply

Webhook endpoints for GHL, Telnyx, Twilio, and Nylas are configured automatically when you connect those integrations. They use provider-specific signature verification, not Bearer auth.

AI Actions—Classify, score, generate reply

MethodPathDescription
POST/actions/zapier/{tenant_id}/classify-conversationClassify intent, urgency, sentiment
POST/actions/zapier/{tenant_id}/score-contactScore a contact and return tier + buying signals
POST/actions/zapier/{tenant_id}/generate-replyGenerate a brand-voice reply with Signal Guard check

Email—Send, receive, manage

MethodPathDescription
POST/tenants/{tenant_id}/email/sendSend email via connected Nylas grant
GET/tenants/{tenant_id}/email/aliasesList aliases for the connected account
PATCH/tenants/{tenant_id}/email/aliasesUpdate aliases
PATCH/tenants/{tenant_id}/email/signatureUpdate signature
POST/tenants/{tenant_id}/email/connectConnect a Nylas grant
GET/tenants/{tenant_id}/email/grantsList connected email accounts
DELETE/tenants/{tenant_id}/email/grants/{grant_id}Disconnect an email account
GET/tenants/{tenant_id}/email/grants/{grant_id}Get grant status
GET/tenants/{tenant_id}/email/auth-urlGet OAuth URL for email connection
POST/tenants/{tenant_id}/email/callbackExchange OAuth code for grant

Conversations—Multi-channel history

MethodPathDescription
GET/tenants/{tenant_id}/conversationsList conversations grouped by contact. Filter with ?alias= for email
GET/tenants/{tenant_id}/conversations/{contact_id}Full conversation history (SMS, email, voice)
POST/tenants/{tenant_id}/conversations/{contact_id}/messagesSend a message (SMS or email)
POST/tenants/{tenant_id}/conversations/{contact_id}/readMark all messages for a contact as read
POST/tenants/{tenant_id}/conversations/{contact_id}/approve-draftApprove and send a pending AI draft
POST/tenants/{tenant_id}/conversations/{contact_id}/dismiss-draftDismiss a pending AI draft without sending

Contacts

MethodPathDescription
GET/tenants/{tenant_id}/contactsList contacts for a tenant
POST/tenants/{tenant_id}/contactsCreate a new contact
GET/tenants/{tenant_id}/contacts/{contact_id}Get contact details
PATCH/tenants/{tenant_id}/contacts/{contact_id}Update contact (name, email, phone, notes)
DELETE/tenants/{tenant_id}/contacts/{contact_id}Soft-delete a contact (moves to archived)
POST/tenants/{tenant_id}/contacts/resolveResolve a contact by phone/email
POST/tenants/{tenant_id}/contacts/mergeMerge duplicate contacts
GET/tenants/{tenant_id}/contacts/{contact_id}/detailFull contact detail with scoring, source channel, and history
GET/tenants/{tenant_id}/contacts/{contact_id}/timelineUnified conversation timeline
GET/tenants/{tenant_id}/contacts/enrichedList contacts enriched with lead score, tier, channel, and intent
MethodPathDescription
POST/tenants/{tenant_id}/searchSearch contacts and conversations. Warm search (6 months) by default; add deep: true for full scan

Leads

MethodPathDescription
GET/tenants/{tenant_id}/leadsList leads (filter by state, score tier, date range)
GET/leads/{lead_id}Get lead details with score and classification
GET/leads/{lead_id}/conversationFull conversation log for a lead
GET/leads/callbacksPending callbacks by status

API Keys

MethodPathDescription
GET/tenants/{tenant_id}/api-keysList API keys (prefix only, not full key)
POST/tenants/{tenant_id}/api-keysCreate a new API key (max 3 active)
DELETE/tenants/{tenant_id}/api-keys/{key_id}Revoke an API key
POST/tenants/{tenant_id}/api-keys/rotateRotate a key (72-hour grace period)

Config

MethodPathDescription
GET/config/{tenant_id}Get tenant configuration
PUT/config/{tenant_id}Replace tenant configuration
PATCH/config/{tenant_id}Partial update tenant configuration

Webhook Subscriptions—Outbound event delivery

MethodPathDescription
GET/tenants/{tenant_id}/webhooksList webhook subscriptions
POST/tenants/{tenant_id}/webhooksCreate a webhook subscription
DELETE/tenants/{tenant_id}/webhooks/{webhook_id}Delete a webhook subscription
POST/tenants/{tenant_id}/webhooks/{webhook_id}/testSend a test event to a webhook endpoint

Calls

MethodPathDescription
GET/tenants/{tenant_id}/callsList call history
POST/tenants/{tenant_id}/calls/outboundInitiate an outbound call
POST/tenants/{tenant_id}/calls/{call_session_id}/transferTransfer an active call
GET/tenants/{tenant_id}/calls/{contact_id}/recordingGet a call recording

Callbacks

MethodPathDescription
GET/tenants/{tenant_id}/callbacksList pending callbacks
PATCH/tenants/{tenant_id}/callbacks/{task_id}Update a callback task

Guardrails

MethodPathDescription
GET/guardrails/{tenant_id}/activeList active Signal Guard rules
GET/guardrails/{tenant_id}/auditGet Signal Guard audit log
GET/guardrails/{tenant_id}/statsGet Signal Guard statistics
PATCH/guardrails/{tenant_id}Update Signal Guard rules
GET/guardrails/{tenant_id}/exportExport guardrail data

Pipeline—Test & process

MethodPathDescription
POST/test/{tenant_id}Dry-run a message through the pipeline (classify, score, route, reply). Nothing is sent.

SMS Filters

MethodPathDescription
GET/tenants/{tenant_id}/sms-filters/blocklistList blocked phone numbers
POST/tenants/{tenant_id}/sms-filters/blocklistAdd a phone number to the blocklist
DELETE/tenants/{tenant_id}/sms-filters/blocklist/{phone}Remove a number from the blocklist

Billing

MethodPathDescription
GET/billing/statusGet billing status and current plan
POST/billing/activateActivate subscription (trial to paid)
POST/billing/checkoutCreate a checkout session for plan purchase
POST/billing/portalGet billing portal URL
GET/billing/credits/balanceGet credit balance
GET/billing/credits/transactionsGet credit transaction history

Usage

MethodPathDescription
GET/usage/{tenant_id}Signal counts and credit balance

Common response patterns

Success

{
  "success": true,
  "data": { ... }
}

Paginated list

{
  "items": [ ... ],
  "cursor": "next_page_token",
  "has_more": true
}

Use ?cursor=<value> to fetch the next page.

Error

{
  "error": "VALIDATION_ERROR",
  "message": "content.body is required",
  "status": 400
}

See Errors for the full error code reference.

Rate limits

Rate limits are applied per tenant. Most endpoints allow a generous number of requests per minute. The email send endpoint is limited to 50 per hour.

When rate limited, the response includes a Retry-After header indicating how long to wait (in seconds).

Pagination

List endpoints support cursor-based pagination:

  • ?cursor=<token>—start after this cursor
  • ?limit=<n>—number of items per page (default varies by endpoint)

The response includes cursor (for the next page) and has_more (boolean).

On this page

We use cookies to understand how you use our site and improve your experience. Privacy Policy