zuopsAPI
    REST API · MCP serverv2.10.1

    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"
    200OKResponse
    {
    "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

    Quickstart

    Your first call in three steps

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

      Terminal
      export ZUOPS_API_KEY="zu-..."
    2. 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. 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

    Read these before you ship