For developers and AI assistants
A REST API, signed webhooks and an MCP server.
Add leads from your forms and product, put them in sequences, read conversations, and get told the moment someone replies or books. Approving and sending stay with a person in the app.
- Keys per workspace, read-only or read-and-change, shown once
- 120 requests a minute per key
- An OpenAPI file for every endpoint and field
curl -X POST https://auth.zorosdr.com/functions/v1/api/v1/leads \
-H "Authorization: Bearer zk_live_…" \
-H "content-type: application/json" \
-d '{"email": "sara@pearldental.ae",
"first_name": "Sara",
"company": "Pearl Dental"}'REST API
Every endpoint.
Base address https://auth.zorosdr.com/functions/v1/api/v1. Send your key as a Bearer token. Sequences are called campaigns in the API.
| Method | Path | What it does | Key needs |
|---|---|---|---|
| GET | /v1/me | The workspace and keyThe workspace this key belongs to, its time zone, and the key's name and permissions. | Read |
| GET | /v1/stages | Pipeline stagesThe workspace's stages, in order. Use a stage's key to filter or move leads. | Read |
| GET | /v1/leads | List leadsNewest first. Filter by email, stage, a search word or a time; page with cursor. | Read |
| POST | /v1/leads | Add a leadNeeds an email, a phone number or a LinkedIn URL. A person already in the workspace (same email or LinkedIn) isn't added twice: their lead comes back with created: false. People who asked to be erased can't be added. Optionally adds the lead to a campaign. | Read and change |
| GET | /v1/leads/{id} | Get a leadOne lead with its stage, tags, custom fields and campaigns. | Read |
| PATCH | /v1/leads/{id} | Update a leadChange fields, tags (add_tags, remove_tags), custom fields or the stage. Moving to a stage that ends a sequence (Meeting, Customer, Lost…) stops it, as in the app. | Read and change |
| POST | /v1/leads/{id}/opt-out | Opt a lead outThe lead asked not to be contacted: every campaign stops for them and nothing more is sent. Only a person can undo it, in the app. | Read and change |
| GET | /v1/leads/{id}/messages | A lead's conversationMessages sent and received on every channel, oldest first (up to 200). | Read |
| GET | /v1/campaigns | List campaignsEvery campaign with its type and status. | Read |
| GET | /v1/campaigns/{id} | Get a campaignA campaign with its steps and how many leads are in it by status. | Read |
| POST | /v1/campaigns/{id}/leads | Add leads to a campaignUp to 500 lead ids. Leads already in it and people who opted out are skipped. The first touches are spread over an hour, and every message still waits for approval in the app unless the campaign sends automatically. | Read and change |
| GET | /v1/drafts | Drafts waiting for approvalMessages the AI drafted that wait for a person. Read-only: approve or skip them in the app. | Read |
The full specification is at openapi.json.
Webhooks
Know the moment something happens.
Add an https address in Settings, Developers, pick the events, and copy the signing secret. Every event is signed and retried if your system is down.
- Signed with the Zoro-Signature header: t=<unix seconds>,v1=<HMAC-SHA256 of "<t>.<raw body>">
- Retried after 1, 5 and 30 minutes, then 2, 6 and 24 hours
- An address that fails 25 times in a row is paused and owners are told
- "Send a test" posts a ping straight away
lead.createdA lead is addedlead.stage_changedA lead changes stagelead.opted_outA lead opts outmessage.receivedA reply arrivesmessage.sentA message is sentdraft.createdA draft waits for approvalmeeting.bookedA meeting is bookedmeeting.cancelledA meeting is cancelled
MCP server
Let your AI assistant work with your leads.
Claude, Cursor and other assistants that speak MCP can search, add and update leads and put them in sequences with your key. They can read drafts, but never approve or send them.
Claude Code
claude mcp add --transport http zorosdr https://auth.zorosdr.com/functions/v1/mcp \ --header "Authorization: Bearer YOUR_KEY"
Cursor and other clients
{
"mcpServers": {
"zorosdr": {
"url": "https://auth.zorosdr.com/functions/v1/mcp",
"headers": {
"Authorization": "Bearer YOUR_KEY"
}
}
}
}workspace_infoReadsThe ZOROSDR workspace this key belongs to: name, time zone and what the key may do.
list_stagesReadsThe pipeline stages, in order, with their keys.
search_leadsReadsFind leads by a word (name, company, email), an exact email or a stage key. Newest first; pass the returned cursor for more.
get_leadReadsOne lead with stage, tags, custom fields, Hot score and sequences.
get_conversationReadsA lead's messages on every channel, oldest first.
create_leadChangesAdd a lead (needs an email, phone or LinkedIn link). Someone already in the workspace isn't added twice. Optionally adds them to a sequence; messages still wait for approval in the app.
update_leadChangesChange a lead's fields, tags or stage. A stage like MEETING or LOST stops their sequences, as in the app.
opt_out_leadChangesRecord that a lead asked not to be contacted: every sequence stops for them. Only a person can undo it.
list_campaignsReadsEvery sequence with its type and status.
get_campaignReadsA sequence's steps and how many leads are in it by status.
add_leads_to_campaignChangesPut leads in a sequence (up to 500). Opted-out leads and ones already in it are skipped. Every message still waits for approval in the app unless the sequence sends automatically.
list_draftsReadsDrafts waiting for a person's approval. Read-only: they're approved or skipped in the app.
Build on ZOROSDR.
Create a key in Settings, Developers on any plan. Start free for 14 days.
No card needed for the trial.