# Drip

> Manage your Drip email marketing audience: create, update, tag and unsubscribe subscribers, record custom events, start people on workflows, take them off campaigns, and draft broadcasts.

App · 20 actions. Web page: https://docs.lodol.com/docs/integrations/drip

## Actions

### Apply tag

Add a tag to a subscriber by email. A new tag name creates the tag. Automations triggered by the tag run as usual.

**Inputs**

- Email (`email`, text, required): The subscriber's email address.
- Tag (`tag`, text, required): The tag. Type a new one to create it.

**Outputs**

- `applied` (true/false): Always true once applied
- `email` (text): The subscriber's email
- `tag` (text): The tag

**Example output**

```json
{
  "applied": true,
  "email": "jo@example.com",
  "tag": "Customer"
}
```

### Create broadcast

Create a draft single-email broadcast to everyone in the account. It is not scheduled or sent; review and send it from Drip.

**Inputs**

- Name (`name`, text, required): The broadcast's internal name (up to 255 characters).
- Subject (`subject`, text, required): The email's subject line. Drip Liquid tags such as {{ subscriber.first_name }} work.
- HTML body (`html_body`, text, required): The email's HTML: a full document or just the body content, which is wrapped for you. No JavaScript.
- Plain-text body (`text_body`, text): The plain-text version. Leave empty and Drip generates it from the HTML.
- Preheader (`preheader`, text): The preview text inboxes show after the subject.
- Postal address (`postal_address`, text): The postal address shown in the footer. Defaults to the account's.
- Add the required footer (`add_compliance_footer`, true/false): Drip refuses an email without an unsubscribe link and your postal address. When on, whichever is missing is added at the bottom. Turn off only if your HTML already has {{ unsubscribe_url }} and {{ inline_postal_address }}. Default: `true`.

**Outputs**

- `broadcast` (object): The broadcast

**Example output**

```json
{
  "broadcast": {
    "created_at": "2026-10-10T10:00:00Z",
    "from_email": "hello@example.com",
    "from_name": "Acme",
    "href": "https://api.getdrip.com/v2/9999999/broadcasts/777888999",
    "id": "777888999",
    "name": "October newsletter",
    "preview_url": "https://www.getdrip.com/preview/777888999",
    "send_at": null,
    "status": "draft",
    "subject": "What's new in October"
  }
}
```

### Create or update subscriber

Create a subscriber, or update the one with this email or id: name, address, phone, SMS number and consent, time zone, lifetime value, custom fields, tags to add or remove, lead scoring, GDPR consent and status. Fields left empty are not changed. Sends no email.

**Inputs**

- Email (`email`, text): The subscriber's email address. Give this or the subscriber id.
- Subscriber ID (`subscriber_id`, text): The subscriber's Drip id, from 'List subscribers' or an earlier step. Give this or the email.
- New email (`new_email`, text): Change the subscriber's email address to this one.
- First name (`first_name`, text): The subscriber's first name.
- Last name (`last_name`, text): The subscriber's last name.
- Address line 1 (`address1`, text): The first line of their address.
- Address line 2 (`address2`, text): The second line of their address.
- City (`city`, text): Their city.
- State or region (`state`, text): Their state, county or region.
- ZIP or postal code (`zip_code`, text): Their ZIP or postal code.
- Country (`country`, text): Their country.
- Phone (`phone`, text): Their phone number.
- SMS number (`sms_number`, text): A US mobile number in international format, like +15551234567.
- SMS consent (`sms_consent`, true/false): Whether the person agreed to receive text messages.
- Lifetime value (`lifetime_value`, number): What the person has spent in total, in the account's currency (for example 49.99). At least 0.
- IP address (`ip_address`, text): The person's IP address, if known.
- Your user ID (`external_user_id`, text): Your own system's id for this person (Drip's user_id).
- Time zone (`time_zone`, text): The subscriber's time zone name. Drip's default is Etc/UTC.
- Custom fields (`custom_fields`, object): Custom field values by field identifier, for example shirt_size: M. A new identifier creates the field.
- Add tags (`tags`, list): Tags to add to the subscriber. Type a new one to create it.
- Prospect (`prospect`, true/false): Whether Drip should treat the person as a prospect and score them as a lead. Drip's default is yes.
- GDPR consent (`eu_consent`, text): Whether the person granted or denied consent to be emailed under GDPR. One of: `granted`, `denied`.
- GDPR consent wording (`eu_consent_message`, text): The consent text the person agreed to, kept with their consent record.
- Remove tags (`remove_tags`, list): Tags to take off the subscriber.
- Starting lead score (`base_lead_score`, number): The lead score to start from. Drip's default is 30. At least 0.
- Status (`status`, text): Set the subscriber's status, for existing or new subscribers. One of: `active`, `unsubscribed`.
- Status if new (`initial_status`, text): The status to give the subscriber only if they are new. Defaults to active. One of: `active`, `unsubscribed`.

**Outputs**

- `subscriber` (object): The subscriber as Drip has them now

**Example output**

```json
{
  "subscriber": {
    "base_lead_score": 30,
    "created_at": "2026-10-01T10:00:00Z",
    "custom_fields": {
      "shirt_size": "M"
    },
    "deliverable": true,
    "email": "jo@example.com",
    "first_name": "Jo",
    "href": "https://api.getdrip.com/v2/9999999/subscribers/z1togz2hcjrkpp5treip",
    "id": "z1togz2hcjrkpp5treip",
    "last_name": "Rivera",
    "lead_score": 30,
    "lifetime_value": 4999,
    "prospect": true,
    "status": "active",
    "tags": [
      "Customer"
    ],
    "time_zone": "America/New_York",
    "user_id": "user-123",
    "utc_offset": -240
  }
}
```

### Delete broadcast

Delete a broadcast. Drip keeps it with the status 'deleted'. One that is sending cannot be deleted.

**Inputs**

- Broadcast ID (`broadcast_id`, text, required): The broadcast's id, from 'List broadcasts' or 'Create broadcast'. A Drip broadcast link works too.

**Outputs**

- `broadcast` (object): The broadcast, now deleted
- `broadcast_id` (text): The broadcast deleted
- `deleted` (true/false): Always true once deleted

**Example output**

```json
{
  "broadcast": {
    "created_at": "2026-10-10T10:00:00Z",
    "from_email": "hello@example.com",
    "from_name": "Acme",
    "href": "https://api.getdrip.com/v2/9999999/broadcasts/777888999",
    "id": "777888999",
    "name": "October newsletter",
    "preview_url": "https://www.getdrip.com/preview/777888999",
    "send_at": null,
    "status": "deleted",
    "subject": "What's new in October"
  },
  "broadcast_id": "777888999",
  "deleted": true
}
```

### Delete subscriber

Permanently delete a subscriber and their history from the account. This cannot be undone; to stop emailing someone, unsubscribe them instead.

**Inputs**

- Subscriber (`subscriber`, text, required): The subscriber's email address or Drip subscriber id. A Drip subscriber link works too.

**Outputs**

- `deleted` (true/false): Always true once deleted
- `subscriber` (text): The email or id deleted

**Example output**

```json
{
  "deleted": true,
  "subscriber": "jo@example.com"
}
```

### Get subscriber

Read one subscriber by email address or Drip id, with their status, custom fields, tags, lead score and lifetime value.

**Inputs**

- Subscriber (`subscriber`, text, required): The subscriber's email address or Drip subscriber id. A Drip subscriber link works too.

**Outputs**

- `subscriber` (object): The subscriber as Drip has them now

**Example output**

```json
{
  "subscriber": {
    "base_lead_score": 30,
    "created_at": "2026-10-01T10:00:00Z",
    "custom_fields": {
      "shirt_size": "M"
    },
    "deliverable": true,
    "email": "jo@example.com",
    "first_name": "Jo",
    "href": "https://api.getdrip.com/v2/9999999/subscribers/z1togz2hcjrkpp5treip",
    "id": "z1togz2hcjrkpp5treip",
    "last_name": "Rivera",
    "lead_score": 30,
    "lifetime_value": 4999,
    "prospect": true,
    "status": "active",
    "tags": [
      "Customer"
    ],
    "time_zone": "America/New_York",
    "user_id": "user-123",
    "utc_offset": -240
  }
}
```

### List accounts

List every Drip account the API token's user can reach, with each one's id, name, website, default sender and postal address. The result also names the account this connection works in.

**Inputs**: None.

**Outputs**

- `accounts` (list): The accounts
- `connected_account_id` (text): The account this connection's steps use
- `count` (number): How many

**Example output**

```json
{
  "accounts": [
    {
      "created_at": "2026-01-01T10:00:00Z",
      "default_from_email": "hello@example.com",
      "default_from_name": "Acme",
      "href": "https://api.getdrip.com/v2/accounts/9999999",
      "id": "9999999",
      "name": "Acme",
      "primary_email": "owner@example.com",
      "url": "www.example.com"
    }
  ],
  "connected_account_id": "9999999",
  "count": 1
}
```

### List broadcasts

List single-email broadcasts by status, with their subject, sender, send time and content. Deleted ones are left out unless chosen.

**Inputs**

- Status (`status`, text): Only broadcasts with this status. Leave empty for all but deleted ones. One of: `draft`, `scheduled`, `sending`, `sent`, `canceled`, `deleted`, `all` (All (including deleted)).
- Sort by (`sort`, text): What to sort by. One of: `created_at` (Created), `updated_at` (Updated), `send_at` (Send time), `name`.
- Sort direction (`direction`, text): Ascending or descending. One of: `asc` (Ascending), `desc` (Descending).
- Page (`page`, number): Which page of results to return, starting at 1. At least 1. Default: `1`.
- Results per page (`per_page`, number): How many to return per page, 1-100. Defaults to 100. From 1 to 100. Default: `100`.

**Outputs**

- `broadcasts` (list): The broadcasts
- `count` (number): How many are on this page
- `page` (number): The page returned
- `total_count` (number): How many there are in all
- `total_pages` (number): How many pages there are

**Example output**

```json
{
  "broadcasts": [
    {
      "created_at": "2026-10-10T10:00:00Z",
      "from_email": "hello@example.com",
      "from_name": "Acme",
      "href": "https://api.getdrip.com/v2/9999999/broadcasts/777888999",
      "id": "777888999",
      "name": "October newsletter",
      "preview_url": "https://www.getdrip.com/preview/777888999",
      "send_at": null,
      "status": "draft",
      "subject": "What's new in October"
    }
  ],
  "count": 1,
  "page": 1,
  "total_count": 1,
  "total_pages": 1
}
```

### List Email Series Campaigns

List the account's Email Series Campaigns with their status, sender, number of emails and subscriber counts.

**Inputs**

- Status (`status`, text): Only those with this status. Leave empty for all of them. One of: `draft`, `active`, `paused`.
- Sort by (`sort`, text): What to sort by. Defaults to when they were created. One of: `created_at` (Created), `name`.
- Sort direction (`direction`, text): Ascending or descending. One of: `asc` (Ascending), `desc` (Descending).
- Page (`page`, number): Which page of results to return, starting at 1. At least 1. Default: `1`.

**Outputs**

- `campaigns` (list): The campaigns
- `count` (number): How many are on this page
- `page` (number): The page returned
- `total_count` (number): How many there are in all
- `total_pages` (number): How many pages there are

**Example output**

```json
{
  "campaigns": [
    {
      "active_subscriber_count": 120,
      "created_at": "2026-08-01T10:00:00Z",
      "email_count": 5,
      "from_email": "hello@example.com",
      "from_name": "Acme",
      "href": "https://api.getdrip.com/v2/9999999/campaigns/123456",
      "id": "123456",
      "name": "Onboarding course",
      "status": "active",
      "unsubscribed_subscriber_count": 4
    }
  ],
  "count": 1,
  "page": 1,
  "total_count": 1,
  "total_pages": 1
}
```

### List event names

List the custom event names recorded in the account so far.

**Inputs**

- Page (`page`, number): Which page of results to return, starting at 1. At least 1. Default: `1`.
- Results per page (`per_page`, number): How many to return per page, 1-1000. Defaults to 100. From 1 to 1000. Default: `100`.

**Outputs**

- `count` (number): How many are on this page
- `event_actions` (list): The event names
- `page` (number): The page returned
- `total_count` (number): How many there are in all
- `total_pages` (number): How many pages there are

**Example output**

```json
{
  "count": 2,
  "event_actions": [
    "Logged in",
    "Upgraded plan"
  ],
  "page": 1,
  "total_count": 1,
  "total_pages": 1
}
```

### List subscribers

List subscribers, filtered by status, tags or when they subscribed. Drip returns active subscribers unless another status is chosen.

**Inputs**

- Status (`status`, text): Which subscribers to include. Defaults to active. One of: `active` (Active (default)), `unsubscribed`, `active_or_unsubscribed` (Active or unsubscribed), `undeliverable`, `all`.
- Tags (`tags`, list): Only subscribers with any of these tags.
- Subscribed after (`subscribed_after`, date and time): Only subscribers who subscribed after this time.
- Subscribed before (`subscribed_before`, date and time): Only subscribers who subscribed before this time.
- Page (`page`, number): Which page of results to return, starting at 1. At least 1. Default: `1`.
- Results per page (`per_page`, number): How many to return per page, 1-1000. Defaults to 100. From 1 to 1000. Default: `100`.

**Outputs**

- `count` (number): How many are on this page
- `page` (number): The page returned
- `subscribers` (list): The subscribers
- `total_count` (number): How many there are in all
- `total_pages` (number): How many pages there are

**Example output**

```json
{
  "count": 1,
  "page": 1,
  "subscribers": [
    {
      "base_lead_score": 30,
      "created_at": "2026-10-01T10:00:00Z",
      "custom_fields": {
        "shirt_size": "M"
      },
      "deliverable": true,
      "email": "jo@example.com",
      "first_name": "Jo",
      "href": "https://api.getdrip.com/v2/9999999/subscribers/z1togz2hcjrkpp5treip",
      "id": "z1togz2hcjrkpp5treip",
      "last_name": "Rivera",
      "lead_score": 30,
      "lifetime_value": 4999,
      "prospect": true,
      "status": "active",
      "tags": [
        "Customer"
      ],
      "time_zone": "America/New_York",
      "user_id": "user-123",
      "utc_offset": -240
    }
  ],
  "total_count": 1,
  "total_pages": 1
}
```

### List tags

List every tag used in the account.

**Inputs**: None.

**Outputs**

- `count` (number): How many
- `tags` (list): The tag names

**Example output**

```json
{
  "count": 2,
  "tags": [
    "Customer",
    "SEO"
  ]
}
```

### List workflows

List the account's workflows with their status.

**Inputs**

- Status (`status`, text): Only those with this status. Leave empty for all of them. One of: `draft`, `active`, `paused`.
- Sort by (`sort`, text): What to sort by. Defaults to when they were created. One of: `created_at` (Created), `name`.
- Sort direction (`direction`, text): Ascending or descending. One of: `asc` (Ascending), `desc` (Descending).
- Page (`page`, number): Which page of results to return, starting at 1. At least 1. Default: `1`.

**Outputs**

- `count` (number): How many are on this page
- `page` (number): The page returned
- `total_count` (number): How many there are in all
- `total_pages` (number): How many pages there are
- `workflows` (list): The workflows

**Example output**

```json
{
  "count": 1,
  "page": 1,
  "total_count": 1,
  "total_pages": 1,
  "workflows": [
    {
      "created_at": "2026-09-01T10:00:00Z",
      "href": "https://api.getdrip.com/v2/9999999/workflows/444555666",
      "id": "444555666",
      "name": "Welcome series",
      "status": "active"
    }
  ]
}
```

### Record event

Record a custom event, such as 'Logged in' or 'Upgraded plan', against a subscriber, with optional properties and time. Workflows can start or branch on it.

**Inputs**

- Event name (`event_action`, text, required): What happened, for example 'Logged in'. Use the same name each time; 'List event names' shows those already used.
- Email (`email`, text): The subscriber's email address. Give this or the subscriber id.
- Subscriber ID (`subscriber_id`, text): The subscriber's Drip id, from 'List subscribers' or an earlier step. Give this or the email.
- Properties (`properties`, object): Details of the event, for example plan: Pro. For a conversion, give value in cents.
- When it happened (`occurred_at`, date and time): When the event happened. Defaults to now.
- Prospect (`prospect`, true/false): Whether Drip should treat the person as a prospect and score them as a lead. Drip's default is yes.

**Outputs**

- `email` (text): The subscriber's email
- `event_action` (text): The event name
- `occurred_at` (text): The time you gave, else null (Drip returns no body)
- `recorded` (true/false): Always true once recorded
- `subscriber_id` (text): The subscriber id you gave, else null (Drip returns no body)

**Example output**

```json
{
  "email": "jo@example.com",
  "event_action": "Logged in",
  "occurred_at": null,
  "recorded": true,
  "subscriber_id": null
}
```

### Remove subscriber from campaigns

Take someone off one Email Series Campaign, or off all of them. They stay subscribed to the account and still receive broadcasts.

**Inputs**

- Subscriber (`subscriber`, text, required): The subscriber's email address or Drip subscriber id. A Drip subscriber link works too.
- Email Series Campaign (`campaign_id`, text): Only remove them from this campaign. Leave empty to remove them from every Email Series Campaign.

**Outputs**

- `campaign_id` (text): The campaign they left, or empty for all
- `subscriber` (object): The subscriber

**Example output**

```json
{
  "campaign_id": null,
  "subscriber": {
    "base_lead_score": 30,
    "created_at": "2026-10-01T10:00:00Z",
    "custom_fields": {
      "shirt_size": "M"
    },
    "deliverable": true,
    "email": "jo@example.com",
    "first_name": "Jo",
    "href": "https://api.getdrip.com/v2/9999999/subscribers/z1togz2hcjrkpp5treip",
    "id": "z1togz2hcjrkpp5treip",
    "last_name": "Rivera",
    "lead_score": 30,
    "lifetime_value": 4999,
    "prospect": true,
    "status": "active",
    "tags": [
      "Customer"
    ],
    "time_zone": "America/New_York",
    "user_id": "user-123",
    "utc_offset": -240
  }
}
```

### Remove subscriber from workflow

Take someone off a workflow. Nothing happens if they were not on it.

**Inputs**

- Workflow (`drip_workflow_id`, text, required): The workflow. A Drip workflow link works too.
- Subscriber (`subscriber`, text, required): The subscriber's email address or Drip subscriber id. A Drip subscriber link works too.

**Outputs**

- `removed` (true/false): Whether they were removed (false when the workflow is not active, which Drip does not allow)
- `subscriber` (text): The email or id removed
- `warnings` (list): Anything to know
- `workflow_id` (text): The workflow

**Example output**

```json
{
  "removed": true,
  "subscriber": "jo@example.com",
  "warnings": [],
  "workflow_id": "444555666"
}
```

### Remove tag

Take a tag off a subscriber by email.

**Inputs**

- Email (`email`, text, required): The subscriber's email address.
- Tag (`tag`, text, required): The tag. Type a new one to create it.

**Outputs**

- `email` (text): The subscriber's email
- `removed` (true/false): Always true once removed
- `tag` (text): The tag

**Example output**

```json
{
  "email": "jo@example.com",
  "removed": true,
  "tag": "Customer"
}
```

### Start subscriber on workflow

Start someone on a workflow, creating or updating them as a subscriber with the details given. Drip only starts people on an active workflow; for a draft or paused one the step says so in 'warnings' and 'added' is false.

**Inputs**

- Workflow (`drip_workflow_id`, text, required): The workflow. A Drip workflow link works too.
- Email (`email`, text): The subscriber's email address. Give this or the subscriber id.
- Subscriber ID (`subscriber_id`, text): The subscriber's Drip id, from 'List subscribers' or an earlier step. Give this or the email.
- First name (`first_name`, text): The subscriber's first name.
- Last name (`last_name`, text): The subscriber's last name.
- Address line 1 (`address1`, text): The first line of their address.
- Address line 2 (`address2`, text): The second line of their address.
- City (`city`, text): Their city.
- State or region (`state`, text): Their state, county or region.
- ZIP or postal code (`zip_code`, text): Their ZIP or postal code.
- Country (`country`, text): Their country.
- Phone (`phone`, text): Their phone number.
- Your user ID (`external_user_id`, text): Your own system's id for this person (Drip's user_id).
- Time zone (`time_zone`, text): The subscriber's time zone name. Drip's default is Etc/UTC.
- Custom fields (`custom_fields`, object): Custom field values by field identifier, for example shirt_size: M. A new identifier creates the field.
- Add tags (`tags`, list): Tags to add to the subscriber. Type a new one to create it.
- Prospect (`prospect`, true/false): Whether Drip should treat the person as a prospect and score them as a lead. Drip's default is yes.
- GDPR consent (`eu_consent`, text): Whether the person granted or denied consent to be emailed under GDPR. One of: `granted`, `denied`.
- GDPR consent wording (`eu_consent_message`, text): The consent text the person agreed to, kept with their consent record.

**Outputs**

- `added` (true/false): Whether they were started (the workflow is active)
- `subscriber` (object): The subscriber
- `warnings` (list): Anything to know
- `workflow_id` (text): The workflow
- `workflow_status` (text): The workflow's status: draft, active or paused

**Example output**

```json
{
  "added": true,
  "subscriber": {
    "base_lead_score": 30,
    "created_at": "2026-10-01T10:00:00Z",
    "custom_fields": {
      "shirt_size": "M"
    },
    "deliverable": true,
    "email": "jo@example.com",
    "first_name": "Jo",
    "href": "https://api.getdrip.com/v2/9999999/subscribers/z1togz2hcjrkpp5treip",
    "id": "z1togz2hcjrkpp5treip",
    "last_name": "Rivera",
    "lead_score": 30,
    "lifetime_value": 4999,
    "prospect": true,
    "status": "active",
    "tags": [
      "Customer"
    ],
    "time_zone": "America/New_York",
    "user_id": "user-123",
    "utc_offset": -240
  },
  "warnings": [],
  "workflow_id": "444555666",
  "workflow_status": "active"
}
```

### Unsubscribe from all mailings

Unsubscribe someone from every mailing in the account: broadcasts, campaigns and workflow emails. Their record is kept.

**Inputs**

- Subscriber (`subscriber`, text, required): The subscriber's email address or Drip subscriber id. A Drip subscriber link works too.

**Outputs**

- `subscriber` (object): The subscriber as Drip has them now

**Example output**

```json
{
  "subscriber": {
    "base_lead_score": 30,
    "created_at": "2026-10-01T10:00:00Z",
    "custom_fields": {
      "shirt_size": "M"
    },
    "deliverable": true,
    "email": "jo@example.com",
    "first_name": "Jo",
    "href": "https://api.getdrip.com/v2/9999999/subscribers/z1togz2hcjrkpp5treip",
    "id": "z1togz2hcjrkpp5treip",
    "last_name": "Rivera",
    "lead_score": 30,
    "lifetime_value": 4999,
    "prospect": true,
    "status": "unsubscribed",
    "tags": [
      "Customer"
    ],
    "time_zone": "America/New_York",
    "user_id": "user-123",
    "utc_offset": -240
  }
}
```

### Update broadcast

Change a draft broadcast's name, subject, content, preheader or postal address. Only the fields given change. Drip refuses to edit a broadcast that is scheduled or sent.

**Inputs**

- Broadcast ID (`broadcast_id`, text, required): The broadcast's id, from 'List broadcasts' or 'Create broadcast'. A Drip broadcast link works too.
- Name (`name`, text): A new internal name (up to 255 characters).
- Subject (`subject`, text): The email's subject line. Drip Liquid tags such as {{ subscriber.first_name }} work.
- HTML body (`html_body`, text): The email's HTML: a full document or just the body content, which is wrapped for you. No JavaScript.
- Plain-text body (`text_body`, text): The plain-text version. Leave empty and Drip generates it from the HTML.
- Preheader (`preheader`, text): The preview text inboxes show after the subject.
- Postal address (`postal_address`, text): The postal address shown in the footer. Defaults to the account's.
- Add the required footer (`add_compliance_footer`, true/false): Drip refuses an email without an unsubscribe link and your postal address. When on, whichever is missing is added at the bottom. Turn off only if your HTML already has {{ unsubscribe_url }} and {{ inline_postal_address }}. Default: `true`.

**Outputs**

- `broadcast` (object): The broadcast

**Example output**

```json
{
  "broadcast": {
    "created_at": "2026-10-10T10:00:00Z",
    "from_email": "hello@example.com",
    "from_name": "Acme",
    "href": "https://api.getdrip.com/v2/9999999/broadcasts/777888999",
    "id": "777888999",
    "name": "October v2",
    "preview_url": "https://www.getdrip.com/preview/777888999",
    "send_at": null,
    "status": "draft",
    "subject": "What's new in October"
  }
}
```
