Skip to content

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
Add a lead
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.

MethodPathWhat it doesKey needs
GET/v1/meThe workspace and keyThe workspace this key belongs to, its time zone, and the key's name and permissions.Read
GET/v1/stagesPipeline stagesThe workspace's stages, in order. Use a stage's key to filter or move leads.Read
GET/v1/leadsList leadsNewest first. Filter by email, stage, a search word or a time; page with cursor.Read
POST/v1/leadsAdd 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-outOpt 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}/messagesA lead's conversationMessages sent and received on every channel, oldest first (up to 200).Read
GET/v1/campaignsList 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}/leadsAdd 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/draftsDrafts 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 added
  • lead.stage_changedA lead changes stage
  • lead.opted_outA lead opts out
  • message.receivedA reply arrives
  • message.sentA message is sent
  • draft.createdA draft waits for approval
  • meeting.bookedA meeting is booked
  • meeting.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_infoReads

    The ZOROSDR workspace this key belongs to: name, time zone and what the key may do.

  • list_stagesReads

    The pipeline stages, in order, with their keys.

  • search_leadsReads

    Find leads by a word (name, company, email), an exact email or a stage key. Newest first; pass the returned cursor for more.

  • get_leadReads

    One lead with stage, tags, custom fields, Hot score and sequences.

  • get_conversationReads

    A lead's messages on every channel, oldest first.

  • create_leadChanges

    Add 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_leadChanges

    Change a lead's fields, tags or stage. A stage like MEETING or LOST stops their sequences, as in the app.

  • opt_out_leadChanges

    Record that a lead asked not to be contacted: every sequence stops for them. Only a person can undo it.

  • list_campaignsReads

    Every sequence with its type and status.

  • get_campaignReads

    A sequence's steps and how many leads are in it by status.

  • add_leads_to_campaignChanges

    Put 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_draftsReads

    Drafts 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.