Loops é uma plataforma de e-mail feita para empresas SaaS modernas, oferecendo e-mails transacionais, campanhas de marketing e automações orientadas a eventos por meio de uma API limpa. Esta integração conecta o Loops diretamente aos fluxos de trabalho do Zoen.
Com o Loops no Zoen, você pode:
- Gerenciar contatos: Criar, atualizar, encontrar e excluir contatos na sua audiência do Loops
- Enviar e-mails transacionais: Disparar e-mails transacionais com template e variáveis de dados dinâmicas
- Disparar eventos: Enviar eventos ao Loops para iniciar sequências de e-mail automatizadas e fluxos de trabalho
- Gerenciar assinaturas: Controlar assinaturas de mailing lists e propriedades de contato de forma programática
- Enriquecer dados de contato: Anexar propriedades personalizadas, grupos de usuários e memberships de mailing lists aos contatos
No Zoen, a integração Loops permite que seus agentes gerenciem operações de e-mail como parte dos seus fluxos de trabalho. As operações suportadas incluem:
- Create Contact: Adicionar um novo contato à sua audiência do Loops com e-mail, nome e propriedades personalizadas.
- Update Contact: Atualizar um contato existente ou criar um se não houver correspondência (comportamento de upsert).
- Find Contact: Buscar um contato por endereço de e-mail ou userId.
- Delete Contact: Remover um contato da sua audiência.
- Send Transactional Email: Enviar um e-mail transacional com template a um destinatário com variáveis de dados dinâmicas.
- Send Event: Disparar um evento do Loops para iniciar sequências de e-mail automatizadas para um contato.
Configure o bloco Loops com sua API key do dashboard do Loops (Settings > API), selecione uma operação e forneça os parâmetros necessários. Seus agentes poderão então gerenciar contatos e enviar e-mails como parte de qualquer fluxo de trabalho.
Integrate Loops into the workflow. Create and manage contacts, send transactional emails, and trigger event-based automations.
Create a new contact in your Loops audience with an email address and optional properties like name, user group, and mailing list subscriptions.
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Loops API key for authentication |
email | string | Yes | The email address for the new contact |
firstName | string | No | The contact first name |
lastName | string | No | The contact last name |
source | string | No | Custom source value replacing the default "API" |
subscribed | boolean | No | Whether the contact receives campaign emails (defaults to true) |
userGroup | string | No | Group to segment the contact into (one group per contact) |
userId | string | No | Unique user identifier from your application |
mailingLists | json | No | Mailing list IDs mapped to boolean values (true to subscribe, false to unsubscribe) |
customProperties | json | No | Custom contact properties as key-value pairs (string, number, boolean, or date values) |
| Parameter | Type | Description |
|---|
success | boolean | Whether the contact was created successfully |
id | string | The Loops-assigned ID of the created contact |
Update an existing contact in Loops by email or userId. Creates a new contact if no match is found (upsert). Can update name, subscription status, user group, mailing lists, and custom properties.
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Loops API key for authentication |
email | string | No | The contact email address (at least one of email or userId is required) |
userId | string | No | The contact userId (at least one of email or userId is required) |
firstName | string | No | The contact first name |
lastName | string | No | The contact last name |
source | string | No | Custom source value replacing the default "API" |
subscribed | boolean | No | Whether the contact receives campaign emails (sending true re-subscribes unsubscribed contacts) |
userGroup | string | No | Group to segment the contact into (one group per contact) |
mailingLists | json | No | Mailing list IDs mapped to boolean values (true to subscribe, false to unsubscribe) |
customProperties | json | No | Custom contact properties as key-value pairs (send null to reset a property) |
| Parameter | Type | Description |
|---|
success | boolean | Whether the contact was updated successfully |
id | string | The Loops-assigned ID of the updated or created contact |
Find a contact in Loops by email address or userId. Returns an array of matching contacts with all their properties including name, subscription status, user group, and mailing lists.
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Loops API key for authentication |
email | string | No | The contact email address to search for (at least one of email or userId is required) |
userId | string | No | The contact userId to search for (at least one of email or userId is required) |
| Parameter | Type | Description |
|---|
contacts | array | Array of matching contact objects (empty array if no match found) |
↳ id | string | Loops-assigned contact ID |
↳ email | string | Contact email address |
↳ firstName | string | Contact first name |
↳ lastName | string | Contact last name |
↳ source | string | Source the contact was created from |
↳ subscribed | boolean | Whether the contact receives campaign emails |
↳ userGroup | string | Contact user group |
↳ userId | string | External user identifier |
↳ mailingLists | object | Mailing list IDs mapped to subscription status |
↳ optInStatus | string | Double opt-in status: pending, accepted, rejected, or null |
Delete a contact from Loops by email address or userId. At least one identifier must be provided.
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Loops API key for authentication |
email | string | No | The email address of the contact to delete (at least one of email or userId is required) |
userId | string | No | The userId of the contact to delete (at least one of email or userId is required) |
| Parameter | Type | Description |
|---|
success | boolean | Whether the contact was deleted successfully |
message | string | Status message from the API |
Send a transactional email to a recipient using a Loops template. Supports dynamic data variables for personalization and optionally adds the recipient to your audience.
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Loops API key for authentication |
email | string | Yes | The email address of the recipient |
transactionalId | string | Yes | The ID of the transactional email template to send |
dataVariables | json | No | Template data variables as key-value pairs (string or number values) |
addToAudience | boolean | No | Whether to create the recipient as a contact if they do not already exist (default: false) |
attachments | json | No | Array of file attachments. Each object must have filename (string), contentType (MIME type string), and data (base64-encoded string). |
| Parameter | Type | Description |
|---|
success | boolean | Whether the transactional email was sent successfully |
Send an event to Loops to trigger automated email sequences for a contact. Identify the contact by email or userId and include optional event properties and mailing list changes.
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Loops API key for authentication |
email | string | No | The email address of the contact (at least one of email or userId is required) |
userId | string | No | The userId of the contact (at least one of email or userId is required) |
eventName | string | Yes | The name of the event to trigger |
eventProperties | json | No | Event data as key-value pairs (string, number, boolean, or date values) |
mailingLists | json | No | Mailing list IDs mapped to boolean values (true to subscribe, false to unsubscribe) |
| Parameter | Type | Description |
|---|
success | boolean | Whether the event was sent successfully |
Retrieve all mailing lists from your Loops account. Returns each list with its ID, name, description, and public/private status.
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Loops API key for authentication |
| Parameter | Type | Description |
|---|
mailingLists | array | Array of mailing list objects |
↳ id | string | The mailing list ID |
↳ name | string | The mailing list name |
↳ description | string | The mailing list description (null if not set) |
↳ isPublic | boolean | Whether the list is public or private |
Retrieve a list of published transactional email templates from your Loops account. Returns each template with its ID, name, created/updated timestamps, and data variables.
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Loops API key for authentication |
perPage | string | No | Number of results per page (10-50, default: 20) |
cursor | string | No | Pagination cursor from a previous response to fetch the next page |
| Parameter | Type | Description |
|---|
transactionalEmails | array | Array of published transactional email templates |
↳ id | string | The transactional email template ID |
↳ name | string | The template name |
↳ createdAt | string | Creation timestamp (ISO 8601) |
↳ updatedAt | string | Last updated timestamp (ISO 8601) |
↳ lastUpdated | string | Deprecated alias of updatedAt, kept for backwards compatibility |
↳ dataVariables | array | Template data variable names |
pagination | object | Pagination information |
↳ totalResults | number | Total number of results |
↳ returnedResults | number | Number of results returned |
↳ perPage | number | Results per page |
↳ totalPages | number | Total number of pages |
↳ nextCursor | string | Cursor for next page (null if no more pages) |
↳ nextPage | string | URL for next page (null if no more pages) |
Create a new custom contact property in your Loops account. The property name must be in camelCase format.
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Loops API key for authentication |
name | string | Yes | The property name in camelCase format (e.g., "favoriteColor") |
type | string | Yes | The property data type (e.g., "string", "number", "boolean", "date") |
| Parameter | Type | Description |
|---|
success | boolean | Whether the contact property was created successfully |
Retrieve a list of contact properties from your Loops account. Returns each property with its key, label, and data type. Can filter to show all properties or only custom ones.
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Loops API key for authentication |
list | string | No | Filter type: "all" for all properties (default) or "custom" for custom properties only |
| Parameter | Type | Description |
|---|
properties | array | Array of contact property objects |
↳ key | string | The property key (camelCase identifier) |
↳ label | string | The property display label |
↳ type | string | The property data type (string, number, boolean, date) |
Check whether a Loops contact is on the suppression list (bounced, complained, or unsubscribed) by email address or userId.
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Loops API key for authentication |
email | string | No | The contact email address to check (at least one of email or userId is required) |
userId | string | No | The contact userId to check (at least one of email or userId is required) |
| Parameter | Type | Description |
|---|
contactId | string | The Loops-assigned contact ID |
email | string | The contact email address |
userId | string | The contact userId |
isSuppressed | boolean | Whether the contact is on the suppression list |
removalQuotaLimit | number | Total suppression-removal quota for the team |
removalQuotaRemaining | number | Remaining suppression-removal quota for the team |
Remove a Loops contact from the suppression list by email address or userId, allowing them to receive emails again. Subject to a team removal quota.
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Loops API key for authentication |
email | string | No | The contact email address to remove from suppression (at least one of email or userId is required) |
userId | string | No | The contact userId to remove from suppression (at least one of email or userId is required) |
| Parameter | Type | Description |
|---|
success | boolean | Whether the contact was removed from suppression successfully |
message | string | Status message from the API |
removalQuotaLimit | number | Total suppression-removal quota for the team |
removalQuotaRemaining | number | Remaining suppression-removal quota for the team |
Retrieve a single transactional email template from your Loops account by its ID, including its data variables and draft/published message IDs.
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Loops API key for authentication |
transactionalId | string | Yes | The ID of the transactional email template to retrieve |
| Parameter | Type | Description |
|---|
id | string | The transactional email template ID |
name | string | The template name |
draftEmailMessageId | string | ID of the draft email message, if any |
publishedEmailMessageId | string | ID of the published email message, if any |
transactionalGroupId | string | ID of the transactional group this template belongs to, if any |
createdAt | string | Creation timestamp (ISO 8601) |
updatedAt | string | Last updated timestamp (ISO 8601) |
dataVariables | array | Template data variable names |
A Trigger is a block that starts a workflow when an event happens in this service.
Trigger workflow when a Loops campaign email is sent
| Parameter | Type | Required | Description |
|---|
signingSecret | string | Yes | Required to verify the webhook signature from Loops. |
| Parameter | Type | Description |
|---|
eventName | string | Event type (e.g., campaign.email.sent, loop.email.sent, transactional.email.sent) |
eventTime | number | Unix timestamp (seconds) when the event occurred |
webhookSchemaVersion | string | Webhook schema version (e.g., "1.0.0") |
campaignId | string | Campaign ID, present on campaign.email.sent |
campaignName | string | Campaign name, present on campaign.email.sent |
loopId | string | Loop (workflow) ID, present on loop.email.sent |
loopName | string | Loop (workflow) name, present on loop.email.sent |
transactionalId | string | Transactional email ID, present on transactional.email.sent |
email | json | Email object from the payload (id, emailMessageId, subject) |
emailId | string | Unique email ID (payload email.id) |
emailMessageId | string | Sent email message ID (payload email.emailMessageId) |
subject | string | Email subject line (payload email.subject) |
contactIdentity | json | Contact identity object from the payload (id, email, userId) |
contactId | string | Contact ID (payload contactIdentity.id) |
contactEmail | string | Contact email address (payload contactIdentity.email) |
userId | string | Contact user ID, when set (payload contactIdentity.userId) |
mailingLists | json | Mailing lists the send targeted (id, name, description, isPublic); present on campaign and loop sends |
Trigger workflow when a link in a Loops email is clicked
| Parameter | Type | Required | Description |
|---|
signingSecret | string | Yes | Required to verify the webhook signature from Loops. |
| Parameter | Type | Description |
|---|
eventName | string | Event type (e.g., email.delivered, email.opened, email.clicked) |
eventTime | number | Unix timestamp (seconds) when the event occurred |
webhookSchemaVersion | string | Webhook schema version (e.g., "1.0.0") |
sourceType | string | Source of the email: "campaign", "loop", or "transactional" |
campaignId | string | Campaign ID, present when sourceType is "campaign" |
loopId | string | Loop (workflow) ID, present when sourceType is "loop" |
transactionalId | string | Transactional email ID, present when sourceType is "transactional" |
email | json | Email object from the payload (id, emailMessageId, subject) |
emailId | string | Unique email ID (payload email.id) |
emailMessageId | string | Sent email message ID (payload email.emailMessageId) |
subject | string | Email subject line (payload email.subject) |
contactIdentity | json | Contact identity object from the payload (id, email, userId) |
contactId | string | Contact ID (payload contactIdentity.id) |
contactEmail | string | Contact email address (payload contactIdentity.email) |
userId | string | Contact user ID, when set (payload contactIdentity.userId) |
Trigger workflow when a Loops email is delivered
| Parameter | Type | Required | Description |
|---|
signingSecret | string | Yes | Required to verify the webhook signature from Loops. |
| Parameter | Type | Description |
|---|
eventName | string | Event type (e.g., email.delivered, email.opened, email.clicked) |
eventTime | number | Unix timestamp (seconds) when the event occurred |
webhookSchemaVersion | string | Webhook schema version (e.g., "1.0.0") |
sourceType | string | Source of the email: "campaign", "loop", or "transactional" |
campaignId | string | Campaign ID, present when sourceType is "campaign" |
loopId | string | Loop (workflow) ID, present when sourceType is "loop" |
transactionalId | string | Transactional email ID, present when sourceType is "transactional" |
email | json | Email object from the payload (id, emailMessageId, subject) |
emailId | string | Unique email ID (payload email.id) |
emailMessageId | string | Sent email message ID (payload email.emailMessageId) |
subject | string | Email subject line (payload email.subject) |
contactIdentity | json | Contact identity object from the payload (id, email, userId) |
contactId | string | Contact ID (payload contactIdentity.id) |
contactEmail | string | Contact email address (payload contactIdentity.email) |
userId | string | Contact user ID, when set (payload contactIdentity.userId) |
Trigger workflow when a Loops email hard bounces
| Parameter | Type | Required | Description |
|---|
signingSecret | string | Yes | Required to verify the webhook signature from Loops. |
| Parameter | Type | Description |
|---|
eventName | string | Event type (e.g., email.delivered, email.opened, email.clicked) |
eventTime | number | Unix timestamp (seconds) when the event occurred |
webhookSchemaVersion | string | Webhook schema version (e.g., "1.0.0") |
sourceType | string | Source of the email: "campaign", "loop", or "transactional" |
campaignId | string | Campaign ID, present when sourceType is "campaign" |
loopId | string | Loop (workflow) ID, present when sourceType is "loop" |
transactionalId | string | Transactional email ID, present when sourceType is "transactional" |
email | json | Email object from the payload (id, emailMessageId, subject) |
emailId | string | Unique email ID (payload email.id) |
emailMessageId | string | Sent email message ID (payload email.emailMessageId) |
subject | string | Email subject line (payload email.subject) |
contactIdentity | json | Contact identity object from the payload (id, email, userId) |
contactId | string | Contact ID (payload contactIdentity.id) |
contactEmail | string | Contact email address (payload contactIdentity.email) |
userId | string | Contact user ID, when set (payload contactIdentity.userId) |
Trigger workflow when a Loops email is opened
| Parameter | Type | Required | Description |
|---|
signingSecret | string | Yes | Required to verify the webhook signature from Loops. |
| Parameter | Type | Description |
|---|
eventName | string | Event type (e.g., email.delivered, email.opened, email.clicked) |
eventTime | number | Unix timestamp (seconds) when the event occurred |
webhookSchemaVersion | string | Webhook schema version (e.g., "1.0.0") |
sourceType | string | Source of the email: "campaign", "loop", or "transactional" |
campaignId | string | Campaign ID, present when sourceType is "campaign" |
loopId | string | Loop (workflow) ID, present when sourceType is "loop" |
transactionalId | string | Transactional email ID, present when sourceType is "transactional" |
email | json | Email object from the payload (id, emailMessageId, subject) |
emailId | string | Unique email ID (payload email.id) |
emailMessageId | string | Sent email message ID (payload email.emailMessageId) |
subject | string | Email subject line (payload email.subject) |
contactIdentity | json | Contact identity object from the payload (id, email, userId) |
contactId | string | Contact ID (payload contactIdentity.id) |
contactEmail | string | Contact email address (payload contactIdentity.email) |
userId | string | Contact user ID, when set (payload contactIdentity.userId) |
Trigger workflow when a Loops email soft bounces
| Parameter | Type | Required | Description |
|---|
signingSecret | string | Yes | Required to verify the webhook signature from Loops. |
| Parameter | Type | Description |
|---|
eventName | string | Event type (e.g., email.delivered, email.opened, email.clicked) |
eventTime | number | Unix timestamp (seconds) when the event occurred |
webhookSchemaVersion | string | Webhook schema version (e.g., "1.0.0") |
sourceType | string | Source of the email: "campaign", "loop", or "transactional" |
campaignId | string | Campaign ID, present when sourceType is "campaign" |
loopId | string | Loop (workflow) ID, present when sourceType is "loop" |
transactionalId | string | Transactional email ID, present when sourceType is "transactional" |
email | json | Email object from the payload (id, emailMessageId, subject) |
emailId | string | Unique email ID (payload email.id) |
emailMessageId | string | Sent email message ID (payload email.emailMessageId) |
subject | string | Email subject line (payload email.subject) |
contactIdentity | json | Contact identity object from the payload (id, email, userId) |
contactId | string | Contact ID (payload contactIdentity.id) |
contactEmail | string | Contact email address (payload contactIdentity.email) |
userId | string | Contact user ID, when set (payload contactIdentity.userId) |
Trigger workflow when a Loops loop email is sent
| Parameter | Type | Required | Description |
|---|
signingSecret | string | Yes | Required to verify the webhook signature from Loops. |
| Parameter | Type | Description |
|---|
eventName | string | Event type (e.g., campaign.email.sent, loop.email.sent, transactional.email.sent) |
eventTime | number | Unix timestamp (seconds) when the event occurred |
webhookSchemaVersion | string | Webhook schema version (e.g., "1.0.0") |
campaignId | string | Campaign ID, present on campaign.email.sent |
campaignName | string | Campaign name, present on campaign.email.sent |
loopId | string | Loop (workflow) ID, present on loop.email.sent |
loopName | string | Loop (workflow) name, present on loop.email.sent |
transactionalId | string | Transactional email ID, present on transactional.email.sent |
email | json | Email object from the payload (id, emailMessageId, subject) |
emailId | string | Unique email ID (payload email.id) |
emailMessageId | string | Sent email message ID (payload email.emailMessageId) |
subject | string | Email subject line (payload email.subject) |
contactIdentity | json | Contact identity object from the payload (id, email, userId) |
contactId | string | Contact ID (payload contactIdentity.id) |
contactEmail | string | Contact email address (payload contactIdentity.email) |
userId | string | Contact user ID, when set (payload contactIdentity.userId) |
mailingLists | json | Mailing lists the send targeted (id, name, description, isPublic); present on campaign and loop sends |
Trigger workflow when a Loops transactional email is sent
| Parameter | Type | Required | Description |
|---|
signingSecret | string | Yes | Required to verify the webhook signature from Loops. |
| Parameter | Type | Description |
|---|
eventName | string | Event type (e.g., campaign.email.sent, loop.email.sent, transactional.email.sent) |
eventTime | number | Unix timestamp (seconds) when the event occurred |
webhookSchemaVersion | string | Webhook schema version (e.g., "1.0.0") |
campaignId | string | Campaign ID, present on campaign.email.sent |
campaignName | string | Campaign name, present on campaign.email.sent |
loopId | string | Loop (workflow) ID, present on loop.email.sent |
loopName | string | Loop (workflow) name, present on loop.email.sent |
transactionalId | string | Transactional email ID, present on transactional.email.sent |
email | json | Email object from the payload (id, emailMessageId, subject) |
emailId | string | Unique email ID (payload email.id) |
emailMessageId | string | Sent email message ID (payload email.emailMessageId) |
subject | string | Email subject line (payload email.subject) |
contactIdentity | json | Contact identity object from the payload (id, email, userId) |
contactId | string | Contact ID (payload contactIdentity.id) |
contactEmail | string | Contact email address (payload contactIdentity.email) |
userId | string | Contact user ID, when set (payload contactIdentity.userId) |
mailingLists | json | Mailing lists the send targeted (id, name, description, isPublic); present on campaign and loop sends |