curl --request POST \
--url https://app.famulor.io/api/v1/campaigns/{id}/leads \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"phone": "+4915123456789",
"email": "jane.doe@example.com",
"name": "Jane Doe",
"custom_fields": {
"company": "Acme Corp"
}
}
'{
"data": {
"id": "le1b2c3d-0000-4000-8000-000000000040",
"campaign_id": "ca1b2c3d-0000-4000-8000-000000000030",
"phone": "+4915123456789",
"email": "jane.doe@example.com",
"name": "Jane Doe",
"custom_fields": {
"company": "Acme Corp"
},
"status": "pending",
"attempts": 0,
"next_attempt_at": null,
"last_amd_result": null,
"last_call_id": null,
"created_at": "2026-07-01T08:05:00Z",
"updated_at": "2026-07-01T08:05:00Z"
}
}Add leads
Adds one lead (body = a single lead object; data in the response is the created lead) or many (body = an array of lead objects, max 1000; data is the array of created leads and meta reports created, dnc_flagged and invalid rows). Phone numbers are normalized to E.164. Optional email addresses are validated and normalized; an existing contact with the same phone or email causes a conflict instead of being silently merged. Numbers on your Do-Not-Call list are created with status do_not_call — the dialer never calls them. Required scope: leads:write (keys without scope restrictions have full access).
curl --request POST \
--url https://app.famulor.io/api/v1/campaigns/{id}/leads \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"phone": "+4915123456789",
"email": "jane.doe@example.com",
"name": "Jane Doe",
"custom_fields": {
"company": "Acme Corp"
}
}
'{
"data": {
"id": "le1b2c3d-0000-4000-8000-000000000040",
"campaign_id": "ca1b2c3d-0000-4000-8000-000000000030",
"phone": "+4915123456789",
"email": "jane.doe@example.com",
"name": "Jane Doe",
"custom_fields": {
"company": "Acme Corp"
},
"status": "pending",
"attempts": 0,
"next_attempt_at": null,
"last_amd_result": null,
"last_call_id": null,
"created_at": "2026-07-01T08:05:00Z",
"updated_at": "2026-07-01T08:05:00Z"
}
}Authorizations
API key (fam_..., created under Settings → API Keys) or an OAuth 2.0 access token (fam_at_...). REST operations also require API Access for the credential's workspace. Keys can be restricted to scopes such as assistants:read, calls:write, campaigns:write, automations:read, dashboards:read, dashboards:write, leads:write, segments:write, loop:read, loop:write, phone_numbers:write, sip_trunks:write, knowledge:write, voices:read, billing:read, billing:write, settings:write, platform:read, platform:write; a *:write scope implies the matching *:read. Automation and dashboard endpoints also accept the legacy calls:* scope. Keys without scope restrictions have full access within the workspace's available capabilities.
Path Parameters
Campaign ID.
Body
- object
- object[]
Phone number; normalized to E.164 (e.g. +4915123456789).
Optional contact email. It is validated and normalized before storage; an existing identity is rejected instead of merged.
Arbitrary key/value data available to the assistant during the call.
Response
Created lead(s). Single body → data is the lead object; array body → data is an array plus meta.created / meta.dnc_flagged / meta.invalid.
- Option 1
- Option 2
A lead inside one campaign. Contact-wide fields such as sources and Call QA metrics are on GET /leads.
Show child attributes
Show child attributes