SDR Prospects
Outbound SDR prospects
The people your outbound SDR will dial. Create individually, batch via Lists, or bulk-load via CSV — these endpoints round out the SDR onboarding surface so n8n / Zapier / your CRM can manage prospects directly.
Org-scoped only
The
prospects table has no client_id column — campaigns are agency-self only as of 2026-04-30. Per-client API keys (cl_live_…) get a 403 here. Use an agency key (gc_live_…).List prospects#
List
GET
/v1/sdr/prospectsPaginated list. Filter by
campaign_id, status, or a search query q against name + phone + company.Query parameters
campaign_iduuidFilter to one campaign.
statusstringe.g.
pending, queued, called, booked, do_not_call.qstringFree-text search — matches name, phone, company.
limitintegerMax 100 per page (default 25).
page_tokenstringCursor from previous response.
Request
curl "https://agency.gary.club/api/public/v1/sdr/prospects?campaign_id=cmp_EXAMPLE_aaaa&status=pending&limit=50" \
-H "Authorization: Bearer gc_live_EXAMPLE_AbCdEfGhIj0123456789"Create prospect#
Create
POST
/v1/sdr/prospectsAdds a prospect to a campaign. Pass
dedup: true to skip the insert if a prospect with the same phone already exists in the same campaign — useful when chaining a CRM webhook into n8n.Body parameters
campaign_iduuidrequiredTarget SDR campaign.
phonestringrequiredE.164 (+15551234567). Normalized server-side.
first_namestringlast_namestringemailstringcompanystringtitlestringnotesstringFree-form notes for the agent (becomes part of the call brief).
dedupbooleanIf
true and a prospect with this phone already exists in the campaign, returns the existing row with created: false instead of erroring.Request
curl -X POST https://agency.gary.club/api/public/v1/sdr/prospects \
-H "Authorization: Bearer gc_live_EXAMPLE_AbCdEfGhIj0123456789" \
-H "Content-Type: application/json" \
-d '{
"campaign_id": "cmp_EXAMPLE_aaaa",
"phone": "+15551234567",
"first_name": "Jane",
"last_name": "Doe",
"company": "Acme Co",
"title": "Head of Ops",
"email": "jane@example.com",
"dedup": true
}'Read single#
Read
GET
/v1/sdr/prospects/{id}Returns the prospect with all fields plus campaign + last-call refs.
Path parameters
iduuidrequiredProspect id.
Update#
Update
PATCH
/v1/sdr/prospects/{id}Patch any subset. Setting
status: 'do_not_call' removes the prospect from any future dial queue. Pair with dnc_scope + dnc_source to honor the request consistently.Path parameters
iduuidrequiredBody parameters
first_namestring | nulllast_namestring | nullemailstring | nullcompanystring | nulltitlestring | nullnotesstring | nullstatusstringpending | queued | called | booked | do_not_call | exhausted
dnc_scopestringindividual | company | global
dnc_sourcestringconsumer_request | regulator | internal
Request
curl -X PATCH \
https://agency.gary.club/api/public/v1/sdr/prospects/pro_EXAMPLE_aaaa \
-H "Authorization: Bearer gc_live_EXAMPLE_AbCdEfGhIj0123456789" \
-H "Content-Type: application/json" \
-d '{
"status": "do_not_call",
"dnc_scope": "company",
"dnc_source": "consumer_request"
}'Delete#
Delete
DELETE
/v1/sdr/prospects/{id}Hard-delete the prospect row. Returns 204 on success. Use sparingly — prefer status='do_not_call' to preserve audit history.
Path parameters
iduuidrequiredRelated endpoints#
- SDR Campaigns — create + manage the campaigns prospects belong to.
- Contacts — once a prospect is converted, the conversation lands in the CRM contact timeline.
- Webhooks — subscribe to
sdr.campaign.completedandcall.completedfor prospect outcomes.

