Zapier
The Jelliu app for Zapier turns events in your workspace into Zap triggers: a call ends, a contact converts, a campaign finishes. Zapier subscribes to the event, and Jelliu POSTs each occurrence to Zapier as it happens.
The app works in one direction only: Jelliu tells Zapier what happened. It has triggers and no actions. If you want your agents to act inside the apps you have connected to Zapier (create a CRM deal, add a spreadsheet row) during a conversation, connect Zapier MCP to your agents instead. See Hosted automation providers.
How it works
The Zapier API key
Zapier authenticates with its own credential, separate from workspace API keys:
A zk_ key reads call and contact data out of your workspace and streams it to any URL it subscribes. Treat it like an admin credential: store it only in Zapier, and revoke it when you stop using the integration.
Generate a key
In the dashboard, open Integrations → Zapier → Generate API Key. The key is shown once. Jelliu stores only a keyed hash of it, so a lost key cannot be recovered; generate a new one.
Generating and revoking Zapier keys is restricted to the workspace owner, in a signed-in dashboard session. The underlying endpoints (POST /api/zapier/api-key and DELETE /api/zapier/api-key/{id}) refuse workspace API keys, even full ones, with 403 FORBIDDEN:
This action requires a signed-in admin session — API keys cannot perform credential-management operations.
That way a leaked jl_ key cannot mint a long-lived zk_ credential that would survive revoking it.
Revoke a key
Revoke the key in the same dashboard screen. From then on, requests carrying it receive 401.
Revoking a key does not delete the subscriptions it created. Active Zaps keep receiving events, but Zapier can no longer authenticate to unsubscribe them. Turn off your Zaps first, then revoke the key.
Connect Jelliu in Zapier
Pick a trigger
In the Zap editor, search for Jelliu and choose one of the triggers, for example Call Completed.
Connect your account
Paste the zk_ key. Zapier checks it with GET /zapier/triggers/contact.created?limit=1, which returns 200 for a valid key and 401 otherwise.
Load sample data
Zapier calls GET /zapier/triggers/{event}?limit=3 to show recent records from your workspace while you map fields. See Sample data for why these records look different from live events.
Triggers
duration is in seconds. outcome is a string such as sale_closed, callback_scheduled, no_answer or voicemail, and can be null when there is no analysis. Treat every field as optional.
Zapier payloads are leaner than outbound webhooks: call.completed here does not include dataCollection or kpiData. If you need the extracted data, subscribe a webhook to call.completed instead, or use both.
Delivery
For every active subscription whose event matches, Jelliu sends:
The Jelliu Zapier app adds an id to each record (the callId, contactId or campaignId from data).
A deactivated subscription stops receiving events silently: Zapier is not told. If a Zap stops firing, check is_active and last_error with GET /api/zapier, then turn the Zap off and on again in Zapier, which creates a fresh subscription.
contact.dnc can be sent more than once for the same contact, because every path that hears an opt-out records it. Make the Zap’s downstream step idempotent on contactId.
Endpoints
The Zapier app calls these for you. You can also call them directly, for example to feed the same REST Hooks into your own automation tool.
All /zapier/* endpoints authenticate with x-zapier-api-key.
Subscribe
POST /zapier/subscribe
One of call.completed, call.failed, call.voicemail, call.escalated, campaign.completed, contact.created, contact.converted, contact.dnc.
Where events are delivered. A valid URL of up to 2000 characters that resolves to a public address: private, internal and loopback targets are rejected.
Response 201:
Keep data.id: it is what you pass to unsubscribe.
Unsubscribe
DELETE /zapier/subscribe/{id}
Response 200:
An unknown or already removed id returns 404 with code SUBSCRIPTION_NOT_FOUND and the message Zapier subscription not found.
Sample data
GET /zapier/triggers/{event}?limit=10
Returns the newest records for the event as a flat JSON array, without a data wrapper, which is the shape Zapier expects. limit accepts 1 to 100 and defaults to 10. A page parameter is accepted and ignored.
Sample records are database rows, not event payloads. Call triggers return id, status, outcome, duration_seconds, call_direction, created_at and campaign_id; campaign and contact triggers return the campaign or contact row. Live events arrive as { event, timestamp, data } with the camelCase fields listed in Triggers. Map your Zap’s fields from a live event, not from the sample.
How samples are selected:
List subscriptions
GET /api/zapier lists the workspace’s Zapier rows. Unlike the endpoints above, it is part of the REST API: authenticate with a workspace API key (read is enough).
Rows whose event is __api_key__ represent generated Zapier API keys, not subscriptions; their id is what the dashboard revokes. The key itself is never returned.
Errors
Limits
- 50 per workspace, keys and subscriptions combined. Every active Zapier API key and every active subscription counts toward the same ceiling of 50. Remove Zaps you no longer use.
- Rate limit.
/zapier/*accepts 200 requests per minute per client IP. - No plan gate. The Zapier triggers are available on every plan.

