Lead API
Send leads to FirstFiveMin from any app. Post a lead with your channel token and it gets the same five-minute response. Leads you send must include the person's consent to be contacted if you want us to call them.
POST /api/speed-to-lead/channel-inbound.php
Authentication
Send your channel token in the Authorization header, or in X-STL-Channel-Token if your tool cannot set Authorization. Make the token on your account's Integrations page.
Authorization: Bearer YOUR_CHANNEL_TOKEN
Fields
| Field | Type | What it is |
|---|---|---|
phone | string | The person's phone number. US numbers only. |
email | string | The person's email address. A lead needs a phone or an email. |
first_name | string | The person's first name. |
last_name | string | The person's last name. |
source | string | Where the lead came from. A value not in this list is stored as "form". form, chatbot, api, hosted_page, sms_inbound, voice_inbound, partner, zapier, import, email, meta_lead_ad, ai_shopper, fb_messenger, ig_dm, whatsapp |
source_campaign | string | A short campaign tag: letters, numbers, dots, dashes and underscores, up to 64 characters. |
property_ref | string | What the person asked about: an address, a service or a listing. |
price | integer | A price the person mentioned, in whole dollars. |
language | string | The language to answer the person in. en, es |
timezone | string | The person's time zone, as an IANA name. |
context | object | Extra details stored with the lead, as key-value pairs. |
source_event_at | string | When the person reached out on your side, in ISO 8601 with a time zone. |
idempotency_key | string | Send the same key when you retry, and the lead is not created twice. |
external_lead_id | string | Your system's own id for this lead. With platform, one lead per id. |
platform | string | The name of the sending system, used with external_lead_id. |
test | boolean | true sends a test lead: you can see it arrive, and it is never called. |
consent | object | Who collected the person's consent to be called, and when. Send all three fields or none: a partial block is refused. Without it the lead is stored and is never called by the assistant. |
consent.source | string | The form or system that collected the consent. |
consent.reference | string | Your record of it: a submission id, a URL or a transcript id. |
consent.captured_at | string | When consent was given, in ISO 8601 with a time zone. Not in the future. |
Example
curl -X POST 'https://firstfivemin.com/api/speed-to-lead/channel-inbound.php' \
-H 'Authorization: Bearer YOUR_CHANNEL_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"first_name": "Pat",
"last_name": "Rivera",
"phone": "+14155550123",
"source": "api",
"property_ref": "123 Main St",
"language": "en",
"idempotency_key": "zap-run-8812",
"consent": {
"source": "website-form",
"reference": "form-submission-99812",
"captured_at": "2026-10-04T15:03:00Z"
}
}'
The machine-readable description (OpenAPI 3.1) is at /api/openapi.json