Wire a lead event,
Talkif dials it.
POST /v1/leads → outbound call within seconds.
Send a lead event over webhook or API; Talkif picks the right voice flow, dials within seconds, qualifies intent, posts a structured outcome and fires an outbound webhook back to your stack.
From webhook to dialed lead in three steps.
Drop one POST in the form-submit handler you already have. Receive a typed webhook back when the call completes. Test keys are free.
Get an API key
Create a project at talkif.ai/docs. Keys scope to a single workspace + a single phone number on the free tier.
POST your first lead
Send the lead event when the form is submitted. Talkif dials within seconds and runs the flow.
Handle the outcome webhook
Subscribe to outcome.*; receive a typed payload (booked / no_answer / disqualified) with transcript + recording URLs.
curl -X POST https://api.talkif.ai/v1/leads \
-H "Authorization: Bearer $TALKIF_KEY" \
-H "Content-Type: application/json" \
-d '{
"source": "web_form",
"phone": "+90••••4218",
"intent": "pricing",
"consent": true,
"flow_id": "flow_pricing_v3"
}'The voice loop, budgeted.
Every stage is observable, retriable, and has a hard latency budget. Sub-second turn-taking is a system property, not a benchmark slide.
Eight endpoints. Eight events.
The full surface is small on purpose — everything is a lead, a call, a flow, or an outcome. Webhooks are typed, signed, and at-least-once.
/v1/leadsCreate a lead event; queue an outbound call./v1/calls/{id}Fetch a call with outcome, transcript URL, audio URL./v1/flowsCreate or update a flow configuration./v1/flows/{id}Fetch a flow with its versions./v1/listsBulk-enqueue leads against a recovery flow./v1/numbersList provisioned outbound numbers./v1/handoffsConfigure live human warm-transfer queues./v1/leads/{id}Cancel a queued lead before first dial.{
"event": "outcome.booked",
"call_id": "call_8f2ab1c0",
"lead_id": "lead_91dde222",
"flow_id": "flow_pricing_v3",
"outcome": "booked",
"booking": {
"slot": "2026-05-26T15:30:00Z",
"owner": "mehmet@helena.example",
"notes": "Fall intake, data track, budget 12k."
},
"metrics": {
"first_dial_ms": 12100,
"answered_at_ms": 22300,
"outcome_at_ms": 91450
},
"artifacts": {
"transcript_url": "https://artifacts.talkif.ai/t/...",
"recording_url": "https://artifacts.talkif.ai/r/..."
}
}Flows are declarative config, not callback spaghetti.
Describe a flow as YAML, version it in git, deploy with the CLI. Branching, retries, and outcome mapping are first-class fields — no nested state machine to reason about.
Every call is a trace. Every span is searchable.
Stream call logs, replay transcripts side-by-side with audio, and diff prompt versions. Export OTLP spans straight into your existing observability stack.
Permission-based by design, not by policy doc.
Consent, retry caps, quiet hours, residency, and opt-out aren't features — they're invariants the platform refuses to violate.
Machine-readable, so LLMs and crawlers classify Talkif correctly.
Every public surface ships a structured entrypoint. Your agent can discover capabilities, schemas, and limits without scraping marketing copy.
create_lead, fetch_call, cancel_lead.outcome.* + call.* + lead.* event. Validate before you ship.Wire it up. Watch it dial.
Read the API docs, copy the POST for your stack, and watch Talkif call the number you provide. From key to first call in under five minutes.