Run your CRM, AI texting and ad studio from code.
One API for the whole business: capture and work leads, let the AI text and book them, set up sub-accounts, and generate ads, images and video. 220 endpoints, and every one of them is also an MCP tool, so Claude, ChatGPT or Cursor can do it for you.
curl "https://api.zuops.com/functions/v1/api-gateway/v1/leads" \-H "Authorization: Bearer $ZUOPS_API_KEY"
{"success": true,"data": {"leads": [{"id": "lead-uuid","workspace_id": "ws-uuid","full_name": "Jane Doe","email": "jane@example.com","phone": "+14155550123","source": "api","status": "contacted","stage_key": "quote_sent","score": null,"assigned_to": null,"ad_name": null,"campaign_name": null,"deal_value_cents": null,"deal_currency": "USD","created_at": "2026-09-23T15:00:00Z","updated_at": "2026-09-23T15:05:00Z","last_activity_at": "2026-09-23T15:05:00Z","stage": "quote_sent","inquiry": "Roof replacement quote","address": "12 Main St","city": "Pittsburgh","state": "PA","zip": "15213","custom_fields": {"roof_type": "Metal","roof_age_years": 18},"tags": ["Spring promo","VIP"]}],"has_more": false,"next_offset": null},"error": null}
What you can build
Everything in Zuops, programmable
Leads & CRM
Create, update, tag and search leads, move them through the pipeline and read everything that happened.
24 endpoints
Texting & email
Send SMS and email from a sub-account's own number, read threads, and get replies pushed to you.
12 endpoints
Bookings
Find open slots, then book, move and cancel appointments on any calendar.
25 endpoints
AI agent & setup
Set up offers, hours, the FAQ the AI answers from and the AI receptionist. Start with the setup checklist.
40 endpoints
Ads & creative
Copy, remix, generate and score ads, and make images and video with the latest models.
49 endpoints
Webhooks & MCP
Get lead, message and job events pushed to your server, or hand the whole API to an AI assistant.
3 endpoints
Quickstart
Your first call in three steps
- 1
Create an API key
In Zuops, open Settings → API → New API key. Pick what it may do (Read and write fits most integrations) and, for one client's integration, lock it to their sub-account. Copy it: it is shown once.
Keep it on your server, never in a web page or app. How keys and access levels work
Terminalexport ZUOPS_API_KEY="zu-..." - 2
Check the key
GET /v1/keys/self returns what the key may do: its access level, the sub-account it is locked to, its rate limit, credit budget and 30-day usage.
curl "https://api.zuops.com/functions/v1/api-gateway/v1/keys/self" \-H "Authorization: Bearer $ZUOPS_API_KEY" - 3
Do something real
Add a lead to a sub-account. Tags, custom fields and the inquiry go in the same call, and automations that listen for new leads fire as usual.
Then text it with Send an SMS or email, book it with Book an appointment, or get told about replies with webhooks.
curl -X POST "https://api.zuops.com/functions/v1/api-gateway/v1/leads" \-H "Authorization: Bearer $ZUOPS_API_KEY" \-H "Content-Type: application/json" \-H "Idempotency-Key: $(uuidgen)" \-d '{"workspace_id": "uuid","full_name": "Jane Doe","phone": "+14155550123","email": "jane@example.com","inquiry": "Roof replacement quote","address": "12 Main St","city": "Pittsburgh","state": "PA","zip": "15213","custom_fields": {"roof_type": "Metal","roof_age_years": 18},"tags": ["Spring promo","VIP"],"run_intake": true}'
The basics
Base URL, auth and responses
Base URL
https://api.zuops.com/functions/v1/api-gateway
Every path in these docs goes after it, e.g. /v1/leads.
Authentication
Authorization: Bearer zu-...
Every request. Keys are made in Settings → API.
Responses
{ success, data, error }
JSON, with a matching HTTP status.
Guides