Skip to main content

Loops integration

Sync contacts, trigger event-based emails, and send transactional messages on behalf of your clients' Loops accounts.

What it does

The Loops integration lets your agency drive a client's email program from inside a workflow. Connect a client's Loops API key once and your workflows can create, update, look up, and delete contacts in Loops, send events that fire Loops workflows ("loops"), dispatch transactional emails against published templates, and react in real time when Loops posts an outbound webhook (transactional delivery, opens, clicks, contact lifecycle).

Connect a Loops account

  1. Open your workspace in TaskJuice and navigate to Connections.
  2. Choose Loops and click Connect.
  3. In a new tab, open the Loops API settings page signed in as the client (or as your agency, if the client has delegated key creation to you).
  4. Click Generate Key, name it for the workspace, copy the value, and paste it into TaskJuice.
  5. Save the connection.

To rotate or revoke the key, return to the Loops API settings page, delete the entry, generate a new key, and update the TaskJuice connection.

Triggers

  • loops/email-event fires when Loops posts an outbound webhook for an email-lifecycle event (delivered, bounced, opened, clicked, unsubscribed) on a transactional send, campaign, or workflow message. One POST is one event.
  • loops/contact-event fires when Loops posts an outbound webhook for a contact-lifecycle event (created, unsubscribed, deleted, mailing-list subscription changed). One POST is one event.

Each trigger publishes an inbound URL. Paste it into Loops under Settings, Webhooks, subscribe the event types you care about, and set the inbound Authorization header to a shared secret you also paste into the TaskJuice trigger. Loops sends that exact header value on every POST and TaskJuice verifies it before activating the workflow.

Actions

  • loops/create-contact creates a new contact with an email and optional contact properties.
  • loops/update-contact updates an existing contact identified by email or userId, or creates one when no match is found.
  • loops/find-contact looks up a contact by email or userId. Returns an empty array when no contact matches.
  • loops/delete-contact permanently deletes a contact by email or userId.
  • loops/send-event sends an event with optional event and contact properties, triggering any matching workflows in Loops.
  • loops/send-transactional sends a transactional email through a published transactional template, with optional data variables, attachments, and an Idempotency-Key.

Known limitations

  • Loops enforces a global outbound webhook rate ceiling of 10 events per second. When traffic spikes above that ceiling, Loops queues events on its side and delivers them at the limit. The inbound activation cadence in TaskJuice mirrors that queue.
  • Transactional sends accept an optional Idempotency-Key header. Reusing the same key within 24 hours returns 409 Conflict, which the action surfaces as a non-retryable ALREADY_EXISTS error. Pick a stable key per send (e.g., the workflow run ID) when you want at-most-once delivery.
  • The contact creation endpoint returns 409 Conflict when a contact with the email already exists. Use Update Contact instead when you want upsert semantics.
  • The Find Contact action returns at most one matching contact and an empty array when none match. There is no list-all-contacts endpoint in the Loops API, so polling across the full audience is not supported.
  • Inbound webhook verification uses a shared Authorization header value (configured per trigger). Loops' native HMAC-SHA256 signing requires unwrapping a prefixed base64 secret and parsing multi-signature rotation headers, which sits outside the declarative integration envelope. Treat the shared header value as the secret and rotate it alongside the API key.
Was this helpful?
Loops integration | TaskJuice Docs