Integrations

Zapier

REST Hooks, Catch Hooks, and Zapier actions for contacts and events.

Zapier is a first-class automation integration, the same way Stripe is a billing integration. The Mailchimp-shaped model is a Zapier app (triggers + actions), not a journey node as the default path.

In the product: Data → Integrations → Zapier.

NeedUse
“When Audryo sends / opens / a journey starts, do X in another tool”Zapier trigger (REST Hook or Catch Hook)
“When something happens in another tool, upsert a contact or track an event”Zapier action → contact / event ingestion API
“At this exact journey step, fire one Zap”Optional journey webhook step

Generic outbound webhooks stay available for your own HTTPS endpoints. Zapier hooks do not consume the five custom outbound slots.

Triggers (Audryo → Zapier)

Audryo POSTs the same signed lifecycle envelope used by outbound webhooks:

  • contact.updated
  • email.sent / delivered / opened / clicked
  • email.bounced / complained / unsubscribed
  • journey.entered / journey.exited
  • observation.ready

Two ways to subscribe:

  1. Catch Hook — paste https://hooks.zapier.com/hooks/catch/… in the

Zapier panel. Fastest path, no published Zapier app required.

  1. REST Hook — the official app POSTs targetUrl (or hookUrl) to

POST /v1/projects/{projectId}/zapier/hooks when a Zap turns on, and DELETEs that hook when the Zap turns off. A later HTTP 410 Gone from Zapier also removes the hook.

Empty events means the full catalog. A failing Zap never blocks sending.

Reference: getZapierConnector, subscribeZapierHook, unsubscribeZapierHook, listZapierSampleEvents

Subscribe a Catch Hook

curl -X POST "$AUDRYO_API_BASE/projects/$PROJECT_ID/zapier/hooks" \
  -H "Authorization: Bearer $AUDRYO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://hooks.zapier.com/hooks/catch/123/abcdef",
    "events": ["email.sent", "journey.entered"]
  }'

Zapier REST Hook subscribe also accepts targetUrl / hookUrl and a single event string. Re-subscribing the same URL updates the event list.

Each POST is signed with X-Audryo-Signature: t=<unix>,v1=<hmac> of {timestamp}.{rawBody}, plus X-Audryo-Event and X-Audryo-Delivery-Id. Catch Hooks ignore the signature; your own Zapier code steps can verify it.

Actions (Zapier → Audryo)

Do not post Zapier actions to the inbound webhook. That endpoint is HMAC only. Actions use a workspace API token (sf_live_…) with the write scope:

ActionEndpoint
Upsert contactPOST /v1/projects/{projectId}/contact_ingestion
Track eventPOST /v1/projects/{projectId}/event_ingestion

See Contacts & events. Matching journeys enroll from ingestion the same way they do from inbound webhooks.

Journey webhook step

Journeys already emit journey.entered and journey.exited to every subscribed Zap. Add a webhook node only when this exact step should POST the current contact.

In the inspector, pick Zapier and a saved Catch Hook, an outbound webhook, or a custom HTTPS URL. The payload is a journey.webhook envelope: identity fields always, contact properties and tags unless you turn them off. Saved hooks are signed with that destination’s secret. Custom URLs are unsigned (Catch Hooks ignore HMAC). There is no extra header or JSON template on the step — map fields in Zapier.

The walker continues immediately. The POST is retried in the background and never blocks the path. Private, localhost, and credentialed URLs are rejected at save time.

A published Zapier Platform app lives in integrations/zapier/ for later directory listing.