Skip to main content
Loops logo

Overview

Add Loops to any ModuleX agent or workflow. Manage contacts and send emails with Loops. Create and manage contacts, send transactional emails, and trigger event-based automations against the Loops REST API (app.loops.so/api/v1).
Categories: Marketing & Advertising · Email Marketing · Automation · Auth: API Key · Actions: 10

Authentication

API Key Authentication

Authenticate using your Loops API key
1

Step 1

Log in to your Loops account at https://app.loops.so
2

Step 2

Go to Settings > API
3

Step 3

Create a new API key or copy your existing one
4

Step 4

Paste the API key below

Required Credentials

FieldDescriptionRequiredFormat
Loops API KeyYour Loops API key from Settings > APIYes-

Available Actions

Parameters

email
string
required
The email address for the new contact
first_name
string
The contact first name
last_name
string
The contact last name
source
string
Custom source value replacing the default “API”
subscribed
boolean
Whether the contact receives campaign emails (defaults to true)
user_group
string
Group to segment the contact into (one group per contact)
user_id
string
Unique user identifier from your application
mailing_lists
object
Mailing list IDs mapped to boolean values (true to subscribe, false to unsubscribe)
custom_properties
object
Custom contact properties as key-value pairs (string, number, boolean, or date values)

Response

{
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    },
    "id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Id"
    }
  },
  "required": [
    "success"
  ],
  "title": "CreateContactOutput",
  "type": "object"
}

Parameters

email
string
The contact email address (at least one of email or user_id is required)
user_id
string
The contact userId (at least one of email or user_id is required)
first_name
string
The contact first name
last_name
string
The contact last name
source
string
Custom source value replacing the default “API”
subscribed
boolean
Whether the contact receives campaign emails (sending true re-subscribes unsubscribed contacts)
user_group
string
Group to segment the contact into (one group per contact)
mailing_lists
object
Mailing list IDs mapped to boolean values (true to subscribe, false to unsubscribe)
custom_properties
object
Custom contact properties as key-value pairs (send null to reset a property)

Response

{
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    },
    "id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Id"
    }
  },
  "required": [
    "success"
  ],
  "title": "UpdateContactOutput",
  "type": "object"
}

Parameters

email
string
The contact email address to search for (at least one of email or user_id is required)
user_id
string
The contact userId to search for (at least one of email or user_id is required)

Response

{
  "$defs": {
    "Contact": {
      "additionalProperties": false,
      "description": "A single contact row in ``find_contact``.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Id"
        },
        "email": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Email"
        },
        "first_name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "First Name"
        },
        "last_name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Last Name"
        },
        "source": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Source"
        },
        "subscribed": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Subscribed"
        },
        "user_group": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "User Group"
        },
        "user_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "User Id"
        },
        "mailing_lists": {
          "additionalProperties": true,
          "title": "Mailing Lists",
          "type": "object"
        },
        "opt_in_status": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Opt In Status"
        }
      },
      "title": "Contact",
      "type": "object"
    }
  },
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    },
    "contacts": {
      "items": {
        "$ref": "#/$defs/Contact"
      },
      "title": "Contacts",
      "type": "array"
    }
  },
  "required": [
    "success"
  ],
  "title": "FindContactOutput",
  "type": "object"
}

Parameters

email
string
The email address of the contact to delete (at least one of email or user_id is required)
user_id
string
The userId of the contact to delete (at least one of email or user_id is required)

Response

{
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    },
    "message": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Message"
    }
  },
  "required": [
    "success"
  ],
  "title": "DeleteContactOutput",
  "type": "object"
}

Parameters

email
string
required
The email address of the recipient
transactional_id
string
required
The ID of the transactional email template to send
data_variables
object
Template data variables as key-value pairs (string or number values)
add_to_audience
boolean
Whether to create the recipient as a contact if they do not already exist (default: false)
attachments
array
Array of file attachments. Each object must have filename (string), contentType (MIME type string), and data (base64-encoded string).

Response

{
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "required": [
    "success"
  ],
  "title": "SendTransactionalEmailOutput",
  "type": "object"
}

Parameters

event_name
string
required
The name of the event to trigger
email
string
The email address of the contact (at least one of email or user_id is required)
user_id
string
The userId of the contact (at least one of email or user_id is required)
event_properties
object
Event data as key-value pairs (string, number, boolean, or date values)
mailing_lists
object
Mailing list IDs mapped to boolean values (true to subscribe, false to unsubscribe)

Response

{
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "required": [
    "success"
  ],
  "title": "SendEventOutput",
  "type": "object"
}

Response

{
  "$defs": {
    "MailingList": {
      "additionalProperties": false,
      "description": "A single mailing list row in ``list_mailing_lists``.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Id"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Description"
        },
        "is_public": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Is Public"
        }
      },
      "title": "MailingList",
      "type": "object"
    }
  },
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    },
    "mailing_lists": {
      "items": {
        "$ref": "#/$defs/MailingList"
      },
      "title": "Mailing Lists",
      "type": "array"
    }
  },
  "required": [
    "success"
  ],
  "title": "ListMailingListsOutput",
  "type": "object"
}

Parameters

per_page
string
Number of results per page (10-50, default: 20)
cursor
string
Pagination cursor from a previous response to fetch the next page

Response

{
  "$defs": {
    "Pagination": {
      "additionalProperties": false,
      "description": "Pagination block returned by ``list_transactional_emails``.",
      "properties": {
        "total_results": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Total Results"
        },
        "returned_results": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Returned Results"
        },
        "per_page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Per Page"
        },
        "total_pages": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Total Pages"
        },
        "next_cursor": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Next Cursor"
        },
        "next_page": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Next Page"
        }
      },
      "title": "Pagination",
      "type": "object"
    },
    "TransactionalEmail": {
      "additionalProperties": false,
      "description": "A single template row in ``list_transactional_emails``.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Id"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "last_updated": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Last Updated"
        },
        "data_variables": {
          "items": {
            "type": "string"
          },
          "title": "Data Variables",
          "type": "array"
        }
      },
      "title": "TransactionalEmail",
      "type": "object"
    }
  },
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    },
    "transactional_emails": {
      "items": {
        "$ref": "#/$defs/TransactionalEmail"
      },
      "title": "Transactional Emails",
      "type": "array"
    },
    "pagination": {
      "anyOf": [
        {
          "$ref": "#/$defs/Pagination"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    }
  },
  "required": [
    "success"
  ],
  "title": "ListTransactionalEmailsOutput",
  "type": "object"
}

Parameters

name
string
required
The property name in camelCase format (e.g., “favoriteColor”)
type
string
required
The property data type (e.g., “string”, “number”, “boolean”, “date”)

Response

{
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "required": [
    "success"
  ],
  "title": "CreateContactPropertyOutput",
  "type": "object"
}

Parameters

list
string
Filter type: “all” for all properties (default) or “custom” for custom properties only

Response

{
  "$defs": {
    "ContactProperty": {
      "additionalProperties": false,
      "description": "A single property row in ``list_contact_properties``.",
      "properties": {
        "key": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Key"
        },
        "label": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Label"
        },
        "type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Type"
        }
      },
      "title": "ContactProperty",
      "type": "object"
    }
  },
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    },
    "properties": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/ContactProperty"
      },
      "title": "Properties"
    }
  },
  "required": [
    "success"
  ],
  "title": "ListContactPropertiesOutput",
  "type": "object"
}

Limits & Quotas

  • Loops applies per-account API rate limits; check your plan in the Loops dashboard for current values.
  • list_transactional_emails accepts per_page (10-50, default 20) and a cursor for pagination; the response carries a pagination block with next_cursor/next_page for fetching subsequent pages.
  • Error model: non-2xx responses and timeouts are caught and returned as success=False + error rather than raising. Mutating endpoints also return HTTP 200 with {"success": false, "message": ...} for business-logic failures, which is surfaced as error.

Klaviyo

SendGrid

AgentMail