Get a lead
const url = 'https://app.whatsetter.com/api/v1/leads/example';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://app.whatsetter.com/api/v1/leads/example \ --header 'Authorization: Bearer <token>'Requires scope leads:read.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Responses
Section titled “Responses”The lead
object
object
Digits with country code, no +
Where the lead came from. A platform value means the prospect reached WhatsApp through one of your tracked links (Dashboard → Liens) and the platform was read on the click (direct = through a link, no platform signature); list = campaign sender, api = POST /campaigns/{id}/leads, webhook = form or integration push, inbound = wrote first without a matching click, instagram with channel: instagram = Instagram automation. null on leads created before origins were recorded — derive from list_id, external_reference and channel for those.
How the origin was established: certain (a dedicated number, a Meta ad signal, or the click’s fingerprint in the first message), probable (the most recent click on this number’s links within 45 minutes), null when no click was involved.
Id of the tracked WhatsApp link that brought this lead, when one did.
The id you sent on POST /campaigns/{id}/leads. null for leads created from the dashboard (lists, CSV import, sales-page forms).
Where this conversation happens. Always set — leads that predate the channel column are reported as whatsapp.
Instagram handle, without the @. null on WhatsApp, where phone carries the identity. On Instagram phone is meaningless: id_lead holds an IGSID, not a number.
Id of the team member who owns the lead (GET /team/members); null = nobody, the AI handles it.
Where the person is commercially, derived exactly like the dashboard: booked when a meeting is on the calendar, else from the status (qualified, not_interested, stopped, cold, waiting), else conversation if they replied, else contacted.
The outcome, set by people (PATCH /leads/{id}); null when never set.
Example
{ "data": { "status": "qualified", "source": "instagram", "source_confidence": "certain", "channel": "whatsapp", "stage": "contacted", "deal_status": "open", "lost_reason": "price", "last_message_direction": "inbound" }}Missing, unknown or revoked API key
object
object
Examplegenerated
{ "error": { "code": "example", "message": "example" }}Resource not found in this workspace
object
object
Examplegenerated
{ "error": { "code": "example", "message": "example" }}
