# Build on Luca -- developer docs

A real REST API with OpenAPI docs, scoped API keys, an MCP server for agents, and signed webhooks.

## REST API

- [Interactive API reference](https://api.setluca.com/docs): the full surface, rendered from the live OpenAPI spec.
- [openapi.json](https://api.setluca.com/openapi.json): raw spec for codegen.

### Get an API key

1. Sign in and open **Settings -> Developer API keys**.
2. Create a key and pick its scopes. Keys are workspace-scoped and shown once.
3. Send it as `x-api-key` (or `authorization: Bearer`):

```
curl https://api.setluca.com/api/v1/leads \
  -H "x-api-key: luca_..."
```

## What the API can do

35 operations across these scopes, summarized from the live [capabilities endpoint](https://api.setluca.com/capabilities):

- `analytics:read`
- `bookings:write`
- `broadcasts:write`
- `campaigns:read`
- `campaigns:write`
- `conversations:read`
- `integrations:read`
- `integrations:write`
- `leads:read`
- `leads:write`
- `voice:read`
- `webhooks:read`
- `webhooks:write`

## MCP server (for AI agents)

Luca ships an official MCP server: `@setluca/mcp` on npm, hosted at `https://mcp.setluca.com/mcp`, listed in the [MCP registry](https://registry.modelcontextprotocol.io) as `io.github.leonardomso/luca-mcp`. The guided setup lives at [/connect](/connect).

## Webhooks

Subscribe to workspace events with signed deliveries, replays, and a signature-verification guide. See the [webhooks section of the API reference](https://api.setluca.com/docs).

## Zapier & Make

Full automation-platform apps built on the same public API and signed webhooks above. Both connect with a Luca API key from **Settings -> Developer API keys** -- the connection screen lists the exact scopes to grant.

### Zapier

- **Instant triggers for all 22 workspace events** -- REST hooks, not polling, so Zaps fire the moment a lead qualifies, a booking lands, or a broadcast finishes.
- **Actions across the whole surface** -- create and update leads, log lead notes, create bookings, enroll leads in campaigns, generate and simulate campaigns, run the full broadcast lifecycle (create -> preview -> approve -> launch, plus pause/retry/cancel), manage webhook subscriptions, and trigger CRM syncs.
- **Record pickers, not UUIDs** -- dropdowns for leads, campaigns, broadcasts, and bookings anywhere an ID is needed.
- **Find Lead + find-or-create** -- search by name, handle, or email and create the lead when nothing matches, for idempotent Zaps.
- **Safe retries** -- every action sends a deterministic idempotency key, so a flaky network never duplicates a lead or a broadcast launch.

### Make (formerly Integromat)

- **The same 22 events as instant triggers** -- dedicated webhooks registered automatically when a scenario activates, plus scheduled polling fallbacks for new leads and bookings.
- **Every action, fully typed** -- structured forms with date pickers and searchable dropdowns (leads, campaigns, broadcasts, bookings), organized into entity groups in the scenario editor.
- **Search modules** -- find leads and conversations with server-side search, limits, and pagination.
- **Make an API Call** -- the universal module reaches any endpoint the typed modules don't cover yet, using your connection.

One invariant on both platforms: no Zap or scenario can send a DM or skip the review queue -- every action maps onto the same policy-gated API routes documented above, and broadcast launches are rejected server-side unless the broadcast was approved first.

Both apps are finished and heading into platform review. Until the public listings land, the REST API and webhooks cover the same ground -- or email [hello@setluca.com](mailto:hello@setluca.com) for an early-access invite.

Questions? Email [hello@setluca.com](mailto:hello@setluca.com).