# Loops.so

The email platform for modern SaaS. A better way to send product, marketing, and transactional email.

- **Category:** email
- **Auth:** API_KEY
- **Composio Managed App Available?** N/A
- **Tools:** 12
- **Triggers:** 0
- **Slug:** `LOOPS_SO`
- **Version:** 20260225_00

## Tools

### Create Contact

**Slug:** `LOOPS_SO_CREATE_CONTACT`

Tool to add a new contact to your Loops audience. Use when you need to create a contact with email and optional properties like name, subscription status, or custom attributes. Returns 409 if contact already exists.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | Yes | The contact's email address. This is the unique identifier for the contact. |
| `source` | string | No | Custom source value to replace the default 'API' source attribution. |
| `userId` | string | No | Unique user ID from your external application for linking contacts. |
| `lastName` | string | No | The contact's last name. |
| `firstName` | string | No | The contact's first name. |
| `userGroup` | string | No | Segment users into groups. A contact can only be in one user group at a time. |
| `subscribed` | boolean | No | Whether the contact should receive campaign and loops emails. Defaults to true if not specified. |
| `mailingLists` | object | No | Key-value pairs mapping mailing list IDs to boolean subscription status. Keys are mailing list IDs, values indicate subscription status. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Create Contact Property

**Slug:** `LOOPS_SO_CREATE_CONTACT_PROPERTY`

Tool to add a custom contact property to your Loops team. Use when you need to store additional contact data beyond default fields. Properties must have unique names in camelCase format and a specified data type (string, number, boolean, or date).

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | Yes | The name of the property in camelCase format (e.g., planName, favoriteColor). This will be used to identify the property in your contact data. |
| `type` | string ("string" | "number" | "boolean" | "date") | Yes | The property's data type. Must be one of: string, number, boolean, or date. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Delete Contact

**Slug:** `LOOPS_SO_DELETE_CONTACT`

Tool to delete a contact by email address or user ID. Use when you need to remove a contact from Loops. Either email or userId must be provided to identify the contact.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | The contact's email address to identify which contact to delete |
| `userId` | string | No | The contact's userId value to identify which contact to delete |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Find Contact

**Slug:** `LOOPS_SO_FIND_CONTACT`

Tool to search for a contact by email or userId. Use when you need to find a specific contact's details including subscription status and custom properties. Exactly one of email or userId must be provided per request.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | The contact's email address to search for. Must be URI-encoded. Only one of email or userId is allowed per request. |
| `userId` | string | No | The contact's unique user ID to search for. Only one of email or userId is allowed per request. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Contact Properties

**Slug:** `LOOPS_SO_GET_CONTACT_PROPERTIES`

Tool to retrieve a list of your account's contact properties from Loops.so. Use when you need to view all available contact properties or filter to only custom properties created by your team.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `list` | string | No | Use 'custom' to filter results to only custom properties created by your team. Omit this parameter to retrieve all properties (both standard and custom). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Dedicated Sending IPs

**Slug:** `LOOPS_SO_GET_DEDICATED_SENDING_IPS`

Tool to retrieve a list of Loops' dedicated sending IP addresses. Use when you need to get IP addresses for whitelisting purposes.

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Mailing Lists

**Slug:** `LOOPS_SO_GET_MAILING_LISTS`

Tool to retrieve all mailing lists associated with your Loops account. Use when you need to browse or manage mailing list information.

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Custom Fields

**Slug:** `LOOPS_SO_LIST_CUSTOM_FIELDS`

Tool to retrieve a list of custom contact properties. Use when you need to view available custom fields for contacts. Note: This endpoint is deprecated in favor of 'List contact properties'.

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Transactional Emails

**Slug:** `LOOPS_SO_LIST_TRANSACTIONAL_EMAILS`

Tool to retrieve a list of published transactional emails. Use when you need to view all available transactional email templates. Supports pagination with perPage and cursor parameters.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `cursor` | string | No | A cursor to return a specific page of results. Cursors can be found from the pagination.nextCursor value in each response. |
| `perPage` | integer | No | How many results to return in each request. Must be between 10 and 50. Default: 20 |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Send Event

**Slug:** `LOOPS_SO_SEND_EVENT`

Tool to send events to trigger emails in Loops. Use when you need to track user actions and trigger automated email workflows based on those events.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | The contact's email address. Required if userId is not provided. |
| `userId` | string | No | The contact's unique user ID. Required if email is not provided. |
| `eventName` | string | Yes | The name of the event to trigger. |
| `mailingLists` | object | No | Mailing list subscriptions as key-value pairs. Keys are list IDs, values are boolean (true to add, false to remove). |
| `idempotencyKey` | string | No | Optional idempotency key (up to 100 characters) to avoid duplicate requests within 24 hours. |
| `eventProperties` | object | No | Event property data as key-value pairs. Values can be string, number, boolean, or date. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Test API Key

**Slug:** `LOOPS_SO_TEST_API_KEY`

Tool to test API key validity and retrieve team information. Use to verify API credentials are working correctly.

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Contact

**Slug:** `LOOPS_SO_UPDATE_CONTACT`

Tool to update an existing contact by email or userId. Use when you need to modify contact properties or re-subscribe contacts. Creates a new contact if no matching record exists.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | Contact's email address. Creates new contact if none exists. Required if userId is not provided. |
| `source` | string | No | Custom source value replacing default 'API' |
| `userId` | string | No | Unique user identifier from external applications. Required if email is not provided. |
| `lastName` | string | No | Contact's last name |
| `firstName` | string | No | Contact's first name |
| `userGroup` | string | No | Single group for user segmentation |
| `subscribed` | boolean | No | Determines campaign/loop email eligibility. Setting to true will re-subscribe previously unsubscribed contacts. |
| `mailingLists` | object | No | Key-value pairs of list IDs with boolean subscription status |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |
