SendCanyon
Integrations

Integrations

Zapier

Start Zaps from replies, sends, opens, clicks, bounces, unsubscribes, completed campaigns and new contacts, and create contacts, tag them, add them to lists and campaigns from any app.

5 min read

The SendCanyon Zapier app connects with a SendCanyon API key. Triggers are instant: when you turn a Zap on, Zapier subscribes a webhook, and SendCanyon posts each event to it as it happens. When you turn the Zap off, Zapier removes the webhook.

Connecting

  1. In SendCanyon, open Settings → API keys and create a key (for example "Zapier"). Copy it when it is shown, because it is shown once. It starts with sc_.

  2. In Zapier, create a Zap and choose SendCanyon as the trigger or action app.

  3. When Zapier asks you to sign in, paste the key into API key. The connection is named after your SendCanyon workspace.

  4. Turn the Zap on. It appears under Settings → Integrations → Zapier → Active hooks.

A Zap only receives events from the workspace its key belongs to. Revoking the key under Settings → API keys stops every Zap subscribed with it straight away.

Triggers

TriggerFires when
New ReplyA contact replies to a campaign email and SendCanyon matches the reply
Email SentA campaign email is sent
Email OpenedA contact opens a campaign email (tracking must be on)
Link ClickedA contact clicks a tracked link
Email BouncedA campaign email bounces
Contact UnsubscribedA contact unsubscribes
Campaign CompletedEvery message in a campaign has been sent, failed or canceled
New ContactA contact is created: added by hand, through the API or Zapier, or by a CSV import

Every trigger except New Contact has an optional Campaign field that limits it to one campaign. When you test a trigger in Zapier, SendCanyon returns your most recent real event of that kind. If you have none yet, it returns a sample with the same fields.

Fields every trigger sends

New Reply
{
  "id": "5f0c1d2e-…",
  "event": "email.replied",
  "occurred_at": "2026-09-28T10:00:00.000Z",
  "workspace_id": "…",
  "contact_id": "…",
  "email": "[email protected]",
  "first_name": "Dana",
  "last_name": "Lee",
  "company": "Example Co",
  "campaign_id": "…",
  "campaign_name": "Q4 outbound",
  "campaign_status": "active",
  "message_id": "…",
  "step_number": 1,
  "variant_name": "A",
  "subject": "Re: Quick question",
  "reply_snippet": "Thanks for reaching out — can we talk Thursday?",
  "link_url": null,
  "bounce_type": null,
  "conversation_url": "https://app.sendcanyon.com/dashboard/inbox?conversation=…",
  "campaign_url": "https://app.sendcanyon.com/dashboard/campaigns/…?tab=stats"
}
  • id identifies the event and stays the same if a delivery is retried. It is also sent as the x-sendcanyon-delivery header, and the event name as x-sendcanyon-event.
  • reply_snippet is filled for replies, link_url for clicks, and bounce_type for bounces. Otherwise they are null.
  • Campaign triggers carry the campaign fields, and their contact fields are null. New Contact carries the contact fields, and its campaign fields are null.

Actions

ActionFieldsWhat it does
Create or Update ContactEmail (required), First name, Last name, Company, Job title, Time zone, Custom fieldsCreates the contact, or updates the one with that email. Only the fields you map are changed, and custom fields are merged, so any you leave out are kept. It never changes whether a contact can be emailed
Add Contact to ListList, Email, First name, Last nameCreates the contact if needed and adds it to the list
Add Tag to ContactTag, EmailCreates the contact if needed and tags it
Remove Tag from ContactTag, EmailRemoves the tag. Fails if there is no contact with that email
Add Contact to CampaignCampaign, Email, First name, Last name, CompanyCreates the contact if needed and adds it to the campaign's audience. A running campaign schedules the contact within a few minutes; a draft or paused campaign sends when it is launched or resumed. Refused if the contact is on the suppression list, has bounced, unsubscribed or replied, or is excluded by the campaign's audience rules
Pause CampaignCampaignPauses a running campaign
Resume CampaignCampaignResumes a paused or completed campaign with its saved audience, as the Resume button in the app does
Unsubscribe ContactEmail, ReasonAdds the email to the suppression list, so nothing more is sent to it

Searches

  • Find Contact: by exact email address, ignoring case.
  • Find Campaign: by name. An exact name match is returned first.

Testing

In SendCanyon, Settings → Integrations → Zapier → Send sample to all hooks posts a sample event to every active hook and shows which ones failed. Each hook also shows its last delivery result, e.g. Delivered 200 or Failed 500.

Delivery and retries

  • Events are delivered from a background queue, so a slow Zap never delays sending.
  • A failed delivery (5xx, 408, 429 or no answer) is retried up to 8 times with increasing delays. A 429 waits for the Retry-After time. Other 4xx answers are not retried.
  • If Zapier answers 410 Gone (the Zap was deleted), SendCanyon removes the hook at once.

Troubleshooting

What you seeWhat it meansWhat to do
Zapier says the API key is invalid or revokedThe key was revoked, expired or mistypedCreate a new key and reconnect the account in Zapier
plan_feature_unavailableThe workspace's plan does not include integrationsUpgrade to Pro
contact_not_eligible on Add Contact to CampaignThe contact is suppressed, bounced, unsubscribed, replied, or excluded by the campaignThe error names the reason. Nothing is added
invalid_status on Pause or ResumeOnly a running campaign can be paused, and only a paused or completed one resumedCheck the campaign's status
A hook shows Failed or UnreachableZapier did not accept the last deliveryCheck the Zap's history in Zapier. The next event retries
A Zap no longer firesThe Zap was turned off, deleted, or its API key revokedTurn the Zap on again, or reconnect with a live key

Disconnecting

Turning a Zap off unsubscribes its hook. To stop one hook from SendCanyon, delete it under Active hooks; its Zap then receives nothing more. Revoking the API key stops every Zap connected with it.

Was this page helpful?

Related articles