SendPulse v2

Provides integration with SendPulse Bulk Email, the SendPulse email marketing service where you keep subscribers in mailing lists, store extra contact details in list variables and send email campaigns to those lists.

Use the Node to list, create, rename, and delete mailing lists, look up and search contacts, add contacts with or without list variables, update contact variables and phone numbers, and remove or unsubscribe contacts, for example to keep SendPulse mailing lists in step with a CRM or to load sign-ups collected in another system.

Revision History

0.0.0.2 - Initial release.
0.0.0.3 - Added mailing-list templates that prefill the list ID and load that list's variable fields.
0.0.0.5 - Each Create, Update, Delete and Unsubscribe item can now name the mailing list it targets, so one step can write to many lists without a For Each.

Connection

This Connection stores the credentials used by every SendPulse method. Choose an AuthenticationType; only the properties for the selected type are shown.

Property Type Description
AuthenticationType Enum ClientCredentials to authenticate with a SendPulse API client ID and secret, or ApiKey to use a permanent SendPulse API key. Defaults to ClientCredentials.
ClientId String ClientCredentials only. The client ID from your SendPulse API settings.
ClientSecret Masked ClientCredentials only. The client secret from your SendPulse API settings.
ApiKey Masked ApiKey only. A permanent SendPulse API key, sent as a Bearer token. Replace it if it is revoked.
TimeoutSeconds Integer Timeout for each request, in seconds. Defaults to 30 and must be greater than zero.

Setup Notes

  • The SendPulse Node is available on Cloud Runtime clusters.
  • In SendPulse, open your account's API settings and copy the API client ID and secret, or generate a permanent API key.
  • With ClientCredentials, the Node obtains short-lived access tokens and renews them automatically. Tokens are saved with the Connection so later runs can reuse an unexpired token.
  • With ApiKey, the key cannot be renewed automatically. If SendPulse rejects the key, replace it in the Connection.
  • Click Acquire Metadata on the Connection before loading template details or running the Node. This downloads SendPulse's public Bulk Email API description and saves it with the Connection. Run Acquire Metadata again to refresh it. If a refresh fails, the previously saved metadata is kept.
  • Test Connection obtains a fresh access token, when ClientCredentials is selected, and performs a read-only request for one mailing list. It does not require Acquire Metadata and does not change the saved Connection.
  • An HTTP 403 response usually means your SendPulse account or tariff plan does not allow the requested operation.

Methods

Each method exposes templates for a fixed set of SendPulse mailing-list and contact operations. Select a template to populate the stable Operation value and the operation-specific Options and Items fields. Template names come from the SendPulse API, and each template description shows its HTTP method and path.

getEmailsFromMailingList and Add contacts with variables are also listed once for each mailing list in your account. These templates are named after the operation, the mailing list name, and its ID, prefill Options.id with that list's ID, and load the list's variable fields. Use the (Custom mailing list) version of these templates when you supply the mailing-list id yourself, for example from an earlier step in the Workflow.

Read operations use Options only. Write operations use Items for the request body, with one SendPulse request per row. Each row can name its own mailing list in id; rows that do not use the mailing list in Options.id. See Mailing Lists on Items.

Query

Retrieves mailing lists, list variables, and contacts. The Node pages through mailing-list and contact listings automatically and emits one row for each record.

Available templates:

  • getMailingLists (GET /addressbooks) - Lists the mailing lists in your account.
  • getMailingListById (GET /addressbooks/{id}) - Gets one mailing list.
  • getMailingListVariables (GET /addressbooks/{id}/variables) - Lists the variables defined for a mailing list.
  • getEmailsFromMailingList (Custom mailing list) (GET /addressbooks/{id}/emails) - Lists the contacts in a mailing list, including their variable values. A template for each mailing list in your account is also available.
  • getEmailsTotalCount (GET /addressbooks/{id}/emails/total) - Gets the number of contacts in a mailing list.
  • getContactsByVariable (GET /addressbooks/{id}/variables/{variableName}/{searchValue}) - Finds contacts in a mailing list whose variable exactly matches a value.
  • getEmailFromList (GET /addressbooks/{id}/emails/{email}) - Gets one contact from a mailing list by email address.
Parameter Type Description
Connection Connection SendPulse Connection details.
Operation String Stable operation identifier populated by the selected template.
Options Object Path and filter values for the selected operation. Every template except getMailingLists requires the mailing-list id. getContactsByVariable also requires variableName and searchValue, and getEmailFromList requires email. Contact listings can accept optional filters such as order (asc or desc), active, and not_active, as shown by the template.
Return Type Description
Response Array One row per mailing list, variable, or contact returned by SendPulse, or a single row for a count or single-record lookup.

Create

Creates mailing lists or adds contacts to a mailing list, one request for each row in Items.

Available templates:

  • createMailingList (POST /addressbooks) - Creates a mailing list.
  • addEmailsToMailingList (POST /addressbooks/{id}/emails) - Adds email addresses to a mailing list.
  • Add contacts with variables (Custom mailing list) (POST /addressbooks/{id}/emails) - Adds contacts to a mailing list together with values for the list's variables. A template for each mailing list in your account is also available.
Parameter Type Description
Connection Connection SendPulse Connection details.
Operation String Stable operation identifier populated by the selected template.
Options Object For the contact templates, the mailing-list id used for rows that do not name their own list. Not used by createMailingList.
Items Array One request per row. createMailingList rows contain bookName. addEmailsToMailingList rows contain emails as a comma-separated list of up to 100 addresses. Add contacts with variables rows contain an emails array, where each entry has an email and a variables object holding the mailing list's variable fields. Contact template rows can also contain the target mailing-list id.
Return Type Description
Response Array One row per input item, containing the SendPulse response and Flowgear result metadata. createMailingList returns the new mailing list's id.

Update

Renames a mailing list or updates contact details in a mailing list, using each row in Items as one request.

Available templates:

  • updateMailingList (PUT /addressbooks/{id}) - Renames a mailing list.
  • updateContactVariables (POST /addressbooks/{id}/emails/variable) - Updates variable values for a contact.
  • updateContactPhone (PUT /addressbooks/{id}/phone) - Updates the phone number for a contact.
Parameter Type Description
Connection Connection SendPulse Connection details.
Operation String Stable operation identifier populated by the selected template.
Options Object The mailing-list id used for rows that do not name their own list.
Items Array One update request per row. updateMailingList rows contain the new name. updateContactVariables rows contain the contact's email and a variables array of name and value pairs. updateContactPhone rows contain the contact's email and the new phone. Each row can also contain the target mailing-list id.
Return Type Description
Response Array One row per input item, containing the SendPulse response and Flowgear result metadata.

Delete

Deletes a mailing list or removes contacts from a mailing list.

Available templates:

  • deleteMailingList (DELETE /addressbooks/{id}) - Deletes a mailing list.
  • deleteEmailsFromMailingList (DELETE /addressbooks/{id}/emails) - Removes email addresses from a mailing list.
Parameter Type Description
Connection Connection SendPulse Connection details.
Operation String Stable operation identifier populated by the selected template.
Options Object The mailing-list id used for rows that do not name their own list. Required for deleteMailingList when Items is not connected.
Items Array For deleteEmailsFromMailingList, one request per row, each containing emails as a comma-separated list of up to 100 addresses and optionally the target mailing-list id. For deleteMailingList, optional rows that each name the mailing list to delete in id; a row without id deletes the list in Options.id.
Return Type Description
Response Array One row per request, containing the SendPulse response and Flowgear result metadata.

Unsubscribe

Unsubscribes contacts from a mailing list without removing them. Select the unsubscribeEmailsFromMailingList template (POST /addressbooks/{id}/emails/unsubscribe).

Parameter Type Description
Connection Connection SendPulse Connection details.
Operation String Stable operation identifier populated by the selected template.
Options Object The mailing-list id used for rows that do not name their own list.
Items Array One request per row, each containing emails as a comma-separated list of up to 100 addresses and optionally the target mailing-list id.
Return Type Description
Response Array One row per input item, containing the SendPulse response and Flowgear result metadata.

Mailing Lists on Items

Create, Update, Delete and Unsubscribe templates that act on an existing mailing list let each item name its list in id. This lets one step write to many mailing lists without a For Each. createMailingList has no existing list, so it does not use id.

  • An item's id applies to that item's request only. Items that leave it out, or set it to null, use Options.id, so you can leave Options.id empty when every item has its own.
  • id selects the mailing list only and is not sent in the body to SendPulse. Flowgear.Request shows the whole item with id set to the list actually used, so an item that used Options.id reports that list.
  • An item id must be a positive whole number, given as a number or as digit-only text such as "12". An object, a list, true/false, zero, a negative or decimal number, or any other text fails that item and does not fall back to Options.id, so a mapping mistake never writes to the Options list.
  • If an item has no list in either place, or its id is invalid, that item returns Flowgear.IsSuccess set to false and a Flowgear.Message naming id. SendPulse is not called for that item, and the remaining items still run. This applies to the first item too.
  • Add contacts with variables reads the variable fields of each item's own list, so items can mix lists with different variables. A variable that does not belong to the item's list fails that item.
  • Templates list id under Items with a sample but no value. Refresh the template in existing write steps to see it.
  • If the items in an existing write step already contain id, that value now selects the mailing list. Before this change, an id field on a body operation was rejected as an unsupported field. A missing list on the first item now returns a failed row instead of failing the Node.

Warning: For deleteMailingList, an item that is empty or has id set to null now deletes the mailing list in Options.id. Before this change, such an item failed. If an existing Workflow sets Options.id and its mapping can leave id empty, clear Options.id or map id on every item before you update the Node.

Usage Notes

  • The Node supports SendPulse mailing lists and contacts only. Campaigns, SMTP, SMS, chatbots, double opt-in, tags, the blacklist, account balance, and webhooks are not available.
  • Options accepts only the path and filter values shown by the selected template. Unknown fields are rejected. Paging is managed by the Node, so limit and offset are not available.
  • Query uses the mailing list in Options.id for the whole invocation. To read several mailing lists, run the Node once per list, for example inside a For Each. Write rows can name their own mailing list, as described in Mailing Lists on Items.
  • getContactsByVariable matches searchValue literally. It is not a filter expression. Template samples are not applied unless you enter a value.
  • getEmailsFromMailingList and Add contacts with variables use the variables defined on the selected mailing list. Select the template for a specific mailing list to see that list's typed variable fields. With a (Custom mailing list) template, supply Options.id when loading template details to see the same fields. Without it, the template shows an empty variables object as a placeholder. You do not need to fill it in.
  • The per-mailing-list templates are listed only after Acquire Metadata has been run on the Connection. Before that, only the (Custom mailing list) templates are available. Existing Workflows continue to work unchanged.
  • Mailing-list variables of type string, number, and date are supported. Any other variable type, or a list with duplicate or unnamed variables, causes an error.
  • Enter emails in addEmailsToMailingList, deleteEmailsFromMailingList, and unsubscribeEmailsFromMailingList as a comma-separated list of no more than 100 addresses per row. Quote values that contain commas, quotes, or line breaks, and double any embedded quotes. Spaces are preserved, and an empty value produces an empty list. Split larger lists across several rows.
  • Contact additions require plain email addresses, for example contact@example.com. Addresses that include a display name or surrounding spaces are rejected before the request is sent.
  • A successful contact addition means SendPulse accepted the request. It does not confirm that every address was added, because SendPulse can process contacts asynchronously or filter them. The Flowgear.Message for these rows is SendPulse accepted the request; contact insertion is not confirmed. Use a Query template to confirm the result when required.
  • deleteMailingList runs once using Options.id when Items is not connected. When Items is connected, each row deletes the list it names in id, or the list in Options.id when it has none. A row may contain only id; fields set to null are ignored, and any other field fails that row without a request. An empty Items input deletes nothing.
  • Create, Update, Delete, and Unsubscribe responses include Flowgear.IsSuccess, Flowgear.Message, and Flowgear.Request. Failed rows also include SendPulse's message and error_code when SendPulse returns them.
  • When SendPulse rejects an individual item, for example because of a validation error, the Node returns a failed row and continues with later items. Authentication, permission, connection, and other request-wide failures stop the operation.
  • Query rows return records as SendPulse provides them, without Flowgear metadata. An empty result returns no rows. Numeric contact phone values are returned as strings. getEmailFromList returns contact variables as an array of name, type, and value objects.
  • If SendPulse briefly limits the request rate, the Node waits and retries a limited number of times. If the account quota is exhausted, the operation fails until the quota resets.
  • Writes that time out or return an unexpected response are not retried automatically. Check the mailing list in SendPulse before running the write again.
  • SendPulse stores phone numbers without a leading +, so +27115550100 reads back as 27115550100. An unsubscribed contact reads back with status_explain set to In blacklist. A mailing list that does not exist returns HTTP 404 with error_code 213, which becomes a failed row for that item.

Known Issues

  • getContactsByVariable returns the results from a single SendPulse response. SendPulse does not document paging for this search, so very large result sets may not be returned in full.

See also