Gary Club
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/prospects
Paginated list. Filter by campaign_id, status, or a search query q against name + phone + company.

Query parameters

campaign_iduuid
Filter to one campaign.
statusstring
e.g. pending, queued, called, booked, do_not_call.
qstring
Free-text search — matches name, phone, company.
limitinteger
Max 100 per page (default 25).
page_tokenstring
Cursor 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/prospects
Adds 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_iduuidrequired
Target SDR campaign.
phonestringrequired
E.164 (+15551234567). Normalized server-side.
first_namestring
last_namestring
emailstring
companystring
titlestring
notesstring
Free-form notes for the agent (becomes part of the call brief).
dedupboolean
If 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

iduuidrequired
Prospect 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

iduuidrequired

Body parameters

first_namestring | null
last_namestring | null
emailstring | null
companystring | null
titlestring | null
notesstring | null
statusstring
pending | queued | called | booked | do_not_call | exhausted
dnc_scopestring
individual | company | global
dnc_sourcestring
consumer_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

iduuidrequired
  • 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.completed and call.completed for prospect outcomes.