From b77d56303f058dcb58e6d22924e00881174f237d Mon Sep 17 00:00:00 2001 From: Will Strinz Date: Mon, 26 Oct 2026 10:45:37 -0500 Subject: [PATCH 1/9] Document setting a draft broadcast's sender Co-Authored-By: Claude Opus 5.5 --- source/includes/rest/_broadcasts.md | 157 +++++++++++++++++++++++++++- 1 file changed, 152 insertions(+), 5 deletions(-) diff --git a/source/includes/rest/_broadcasts.md b/source/includes/rest/_broadcasts.md index 030220eb6c9..8076f065d7c 100644 --- a/source/includes/rest/_broadcasts.md +++ b/source/includes/rest/_broadcasts.md @@ -56,7 +56,10 @@ with [Set the audience](#set-the-audience). "status": "sent", "name": "4 Marketing Automation Trends for 2015", "from_name": "John Doe", - "from_email": "john@example.com", + "from_email": "john@acme.com", + "from_email_address_id": "1234567", + "reply_to": "support@acme.com", + "reply_to_email_address_id": "1234569", "postal_address": "123 Anywhere St\nFresno, CA 99999", "localize_sending_time": true, "send_at": "2015-07-01T10:00:00Z", @@ -111,7 +114,19 @@ with [Set the audience](#set-the-audience). from_email - A "from email" that appears in your sent emails and can be changed on a per email basis. This setting overrides the account's default from email. + The address the Single-Email Campaign is sent from: its own From address, or the account's default From address if it has none. Read-only; set it with from_email_address_id. + + + from_email_address_id + The id of the address in from_email, matching an id in the account's sending addresses, or null if the account has no default From address. See Sender. + + + reply_to + The Reply-To address, or null when replies go to the From address. Read-only; set it with reply_to_email_address_id. + + + reply_to_email_address_id + The id of the address in reply_to, matching an id in the account's sending addresses, or null. See Sender. postal_address @@ -127,7 +142,7 @@ with [Set the audience](#set-the-audience). bcc - A list of emails designated to receive a blind copy of the Single-Email Campaign. + A list of emails designated to receive a blind copy of the Single-Email Campaign. Read-only; it cannot be set via the API. created_at @@ -227,6 +242,113 @@ with a `422 Unprocessable Entity`: } ``` +## Sender + +> To change who a draft Single-Email Campaign is from and where replies go: + +```shell +curl -X PATCH "https://api.getdrip.com/v2/YOUR_ACCOUNT_ID/broadcasts/BROADCAST_ID" \ + -H "Content-Type: application/json" \ + -H 'User-Agent: Your App Name (www.yourapp.com)' \ + -u YOUR_API_KEY: \ + -d @- << EOF + { + "broadcasts": [{ + "from_name": "Acme Support", + "from_email_address_id": "1234568", + "reply_to_email_address_id": "1234569" + }] + } +EOF +``` + +```ruby +require "net/http" +require "json" + +uri = URI("https://api.getdrip.com/v2/YOUR_ACCOUNT_ID/broadcasts/BROADCAST_ID") + +request = Net::HTTP::Patch.new(uri) +request.basic_auth("YOUR_API_KEY", "") +request["User-Agent"] = "Your App Name (www.yourapp.com)" +request["Content-Type"] = "application/json" +request.body = { + broadcasts: [{ + from_name: "Acme Support", + from_email_address_id: "1234568", + reply_to_email_address_id: "1234569" + }] +}.to_json + +response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http| + http.request(request) +end + +puts response.body +``` + +```javascript +const response = await fetch( + "https://api.getdrip.com/v2/YOUR_ACCOUNT_ID/broadcasts/BROADCAST_ID", + { + method: "PATCH", + headers: { + "Content-Type": "application/json", + "User-Agent": "Your App Name (www.yourapp.com)", + "Authorization": "Basic " + Buffer.from("YOUR_API_KEY:").toString("base64") + }, + body: JSON.stringify({ + broadcasts: [{ + from_name: "Acme Support", + from_email_address_id: "1234568", + reply_to_email_address_id: "1234569" + }] + }) + } +); + +const body = await response.json(); +``` + +> If an address cannot be used, responds with a 422 Unprocessable Entity and changes nothing: + +```json +{ + "errors": [{ + "code": "validation_error", + "attribute": "from_email_address_id", + "message": "hello@example.com is not verified, so Drip cannot send from it. Authenticate its domain in Drip first, or use the id of an address in get_account's sending_addresses that has verified: true." + }] +} +``` + +A Single-Email Campaign's From name, From address and Reply-To address can be set when you +[create](#create-a-single-email-campaign) it, and changed while it is a `draft` with +[Update a Single-Email Campaign](#update-a-single-email-campaign). + +* `from_name` is free text, up to 255 characters. It cannot be blank, and supports Liquid + templating. +* The From and Reply-To addresses are chosen by id, never typed in. Use an `id` from the + account's [sending addresses](#sending-addresses), returned by + [Fetch an account](#fetch-an-account). +* `from_email_address_id` must be an address with `verified: true`. +* `reply_to_email_address_id` must be an address with `verified: true` and + `auto_generated: false`. +* On update, send `null` or `""` to clear either one. A cleared From address sends from the + account's default From address, and a cleared Reply-To sends replies to the From address. + +Any other id, such as an unverified or deleted address, or one that belongs to another account, +responds with a `422 Unprocessable Entity` and changes nothing. Every problem with the sender is +reported in a single response. + +`from_email`, `reply_to` and `bcc` are returned in responses but cannot be set directly. If a +request includes one with a value other than the one the campaign will have (a new campaign +sends from the account's default From address, with no Reply-To or BCC), it responds with a +`422 Unprocessable Entity` naming the field to use instead. A matching value is accepted, so you +can send back the fields you fetched. BCC cannot be set via the API. + +A sender set here appears in the Drip app, the same as one chosen there. + ## List all Single-Email Campaigns > To list Single-Email Campaigns in an account: @@ -485,6 +607,18 @@ everyone eligible to receive them. [Set the audience](#set-the-audience) to narr postal_address Optional. A physical mailing address for CAN-SPAM compliance. Defaults to the account's postal address. + + from_name + Optional. The name the email is sent from (255 characters maximum). Supports Liquid templating. Defaults to the account's default from name. + + + from_email_address_id + Optional. The id of a verified address in the account's sending addresses to send from. Defaults to the account's default From address. See Sender. + + + reply_to_email_address_id + Optional. The id of a verified, non-auto-generated address in the account's sending addresses to receive replies. If omitted, replies go to the From address. See Sender. + @@ -646,13 +780,14 @@ const body = await response.json(); { "errors": [{ "code": "conflict_error", - "message": "Cannot update a broadcast with status 'sent'" + "message": "Cannot update a broadcast with status 'sent': only a draft can be edited" }] } ``` Only Single-Email Campaigns in the `draft` status can be updated via the API; all other -statuses are read-only. Updates are partial: only the fields you include are changed. +statuses are read-only. Updates are partial: only the fields you include are changed. To change +the From name, From address or Reply-To address, see [Sender](#sender). Status, scheduling, and the audience are not updated here. Each has its own endpoint: [Set the audience](#set-the-audience), [Schedule](#schedule-a-single-email-campaign), and @@ -692,6 +827,18 @@ Status, scheduling, and the audience are not updated here. Each has its own endp postal_address Optional. A physical mailing address for CAN-SPAM compliance. + + from_name + Optional. The name the email is sent from (255 characters maximum). Supports Liquid templating. + + + from_email_address_id + Optional. The id of a verified address in the account's sending addresses to send from. Send null or "" to use the account's default From address. See Sender. + + + reply_to_email_address_id + Optional. The id of a verified, non-auto-generated address in the account's sending addresses to receive replies. Send null or "" to have replies go to the From address. See Sender. + From 7e85629fead889ed6caddbc972fc75f383c037b7 Mon Sep 17 00:00:00 2001 From: Will Strinz Date: Mon, 26 Oct 2026 10:45:37 -0500 Subject: [PATCH 2/9] Document sending addresses on accounts and reply_to on campaigns Co-Authored-By: Claude Opus 5.5 --- source/includes/rest/_accounts.md | 82 +++++++++++++++++++++++++++++- source/includes/rest/_campaigns.md | 5 ++ 2 files changed, 85 insertions(+), 2 deletions(-) diff --git a/source/includes/rest/_accounts.md b/source/includes/rest/_accounts.md index f003402a401..59421e4a8b7 100644 --- a/source/includes/rest/_accounts.md +++ b/source/includes/rest/_accounts.md @@ -88,6 +88,14 @@ links An object containing URLs for campaign and conversion resources. Note, conversions are represented as "Goals". + + default_email_address_id + A read-only id of the account's default From address in sending_addresses. Returns null if the account has no default From address or its default address has been deleted. Only returned when fetching an account. + + + sending_addresses + A read-only list of the account's email addresses, including unverified ones. Only returned when fetching an account. Refer to Sending addresses for an overview of the properties returned here. + @@ -191,13 +199,83 @@ client.fetchAccount(accountId) > The response looks like this: ```json -# The accounts property is an array of one account object. +# The accounts property is an array of one account object, +# which also includes the account's sending addresses. { "links": { ... }, - "accounts": [{ ... }] + "accounts": [{ + "id": "9999999", + "name": "Acme, Inc.", + ... + "default_email_address_id": "1234567", + "sending_addresses": [ + { + "id": "1234569", + "email": "support@acme.com", + "is_default": false, + "verified": true, + "auto_generated": false + }, + { + "id": "1234568", + "email": "news@acme.com", + "is_default": false, + "verified": true, + "auto_generated": false + }, + { + "id": "1234567", + "email": "john@acme.com", + "is_default": true, + "verified": true, + "auto_generated": false + } + ] + }] } ``` +### Sending addresses + +Fetching a single account also returns the account's email addresses, newest first. Only those with `verified: true` can be used as a From address. +Deleted addresses are not included. Listing accounts does not return them. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
idA read-only Drip generated id used to identify the address.
emailThe email address.
is_defaultReturns true for the account's default From address, which emails without their own From address are sent from.
verifiedReturns true if Drip can send from this address: it is on a sending domain you have authenticated in Drip, or it is an address Drip generated for the account. Unverified addresses are listed, but cannot be used as a From address until their domain is authenticated.
auto_generatedReturns true for the no-reply address Drip creates for new accounts.
+ +`default_email_address_id` is `null` when the account has no default From address, or when +its default address has been deleted. A `null` value does not mean emails have no From +address: `default_from_email` still shows the address emails without their own From address +are sent from. + ### HTTP Endpoint `GET /v2/accounts/:account_id` diff --git a/source/includes/rest/_campaigns.md b/source/includes/rest/_campaigns.md index d1d82202491..b5d2695fa02 100644 --- a/source/includes/rest/_campaigns.md +++ b/source/includes/rest/_campaigns.md @@ -9,6 +9,7 @@ "name": "SEO Email Course", "from_name": "John Doe", "from_email": "john@example.com", + "reply_to": "support@example.com", "postal_address": "123 Anywhere St\nFresno, CA 99999", "minutes_from_midnight": 440, "localize_sending_time": true, @@ -75,6 +76,10 @@ from_email A "from email" that appears in your sent emails. This setting overrides the account's default from email. + + reply_to + The Reply-To address set on the Email Series Campaign, or null if none is set. When it is null, replies go to the From address. + postal_address As required by the CAN-SPAM Act, this is a postal address used for all sent emails. From d7c8fe9013bbbd94ee4926dc6e5994d1a58bfa1b Mon Sep 17 00:00:00 2001 From: Will Strinz Date: Mon, 26 Oct 2026 10:53:23 -0500 Subject: [PATCH 3/9] Quote the transport-neutral sender 422 hint Co-Authored-By: Claude Opus 5.5 --- source/includes/rest/_broadcasts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/includes/rest/_broadcasts.md b/source/includes/rest/_broadcasts.md index 8076f065d7c..ee1d8960fc4 100644 --- a/source/includes/rest/_broadcasts.md +++ b/source/includes/rest/_broadcasts.md @@ -317,7 +317,7 @@ const body = await response.json(); "errors": [{ "code": "validation_error", "attribute": "from_email_address_id", - "message": "hello@example.com is not verified, so Drip cannot send from it. Authenticate its domain in Drip first, or use the id of an address in get_account's sending_addresses that has verified: true." + "message": "hello@example.com is not verified, so Drip cannot send from it. Authenticate its domain in Drip first, or use the id of an address in the account's sending_addresses that has verified: true." }] } ``` From 2d8e629def48e262bf3ec5b18bb8287636b7629b Mon Sep 17 00:00:00 2001 From: Will Strinz Date: Mon, 26 Oct 2026 12:00:46 -0500 Subject: [PATCH 4/9] Keep links last in the account properties table; rewrap sending addresses Co-Authored-By: Claude Opus 5.5 --- source/includes/rest/_accounts.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/source/includes/rest/_accounts.md b/source/includes/rest/_accounts.md index 59421e4a8b7..ede4a4ad767 100644 --- a/source/includes/rest/_accounts.md +++ b/source/includes/rest/_accounts.md @@ -84,10 +84,6 @@ href The url designated for retrieving the account record via the REST API. - - links - An object containing URLs for campaign and conversion resources. Note, conversions are represented as "Goals". - default_email_address_id A read-only id of the account's default From address in sending_addresses. Returns null if the account has no default From address or its default address has been deleted. Only returned when fetching an account. @@ -96,6 +92,10 @@ sending_addresses A read-only list of the account's email addresses, including unverified ones. Only returned when fetching an account. Refer to Sending addresses for an overview of the properties returned here. + + links + An object containing URLs for campaign and conversion resources. Note, conversions are represented as "Goals". + @@ -237,8 +237,9 @@ client.fetchAccount(accountId) ### Sending addresses -Fetching a single account also returns the account's email addresses, newest first. Only those with `verified: true` can be used as a From address. -Deleted addresses are not included. Listing accounts does not return them. +Fetching a single account also returns the account's email addresses, newest first. Only those +with `verified: true` can be used as a From address. Deleted addresses are not included. Listing +accounts does not return them. From 5ec2a86efda289204e3037871a9f6aa4256e683c Mon Sep 17 00:00:00 2001 From: Will Strinz Date: Mon, 26 Oct 2026 12:00:52 -0500 Subject: [PATCH 5/9] Capitalise From name to match the rest of the section Co-Authored-By: Claude Opus 5.5 --- source/includes/rest/_broadcasts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/includes/rest/_broadcasts.md b/source/includes/rest/_broadcasts.md index ee1d8960fc4..8ee1e3d3d52 100644 --- a/source/includes/rest/_broadcasts.md +++ b/source/includes/rest/_broadcasts.md @@ -609,7 +609,7 @@ everyone eligible to receive them. [Set the audience](#set-the-audience) to narr - + From 8be042be39b5e90757380f3cbd814a6772eab4cc Mon Sep 17 00:00:00 2001 From: Will Strinz Date: Mon, 26 Oct 2026 14:20:36 -0500 Subject: [PATCH 6/9] Note that a deleted address's id comes back null Co-Authored-By: Claude Opus 5.5 --- source/includes/rest/_broadcasts.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/includes/rest/_broadcasts.md b/source/includes/rest/_broadcasts.md index 8ee1e3d3d52..7201ce298fd 100644 --- a/source/includes/rest/_broadcasts.md +++ b/source/includes/rest/_broadcasts.md @@ -118,7 +118,7 @@ with [Set the audience](#set-the-audience). - + @@ -126,7 +126,7 @@ with [Set the audience](#set-the-audience). - + From f129faadcdb48e2a51ccf8e62e3250167d7b3c26 Mon Sep 17 00:00:00 2001 From: Will Strinz Date: Mon, 26 Oct 2026 14:52:42 -0500 Subject: [PATCH 7/9] Match the broadcast sender docs to the slimmed API behavior from_email, reply_to and bcc are ignored rather than rejected; the unverified-address and sent-broadcast error messages match the API text. Co-Authored-By: Claude Opus 5.5 --- source/includes/rest/_broadcasts.md | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/source/includes/rest/_broadcasts.md b/source/includes/rest/_broadcasts.md index 7201ce298fd..20c40e43580 100644 --- a/source/includes/rest/_broadcasts.md +++ b/source/includes/rest/_broadcasts.md @@ -142,7 +142,7 @@ with [Set the audience](#set-the-audience). - + @@ -317,7 +317,7 @@ const body = await response.json(); "errors": [{ "code": "validation_error", "attribute": "from_email_address_id", - "message": "hello@example.com is not verified, so Drip cannot send from it. Authenticate its domain in Drip first, or use the id of an address in the account's sending_addresses that has verified: true." + "message": "hello@example.com is not verified: use the id of an address in the account's sending_addresses that has verified: true." }] } ``` @@ -338,14 +338,10 @@ A Single-Email Campaign's From name, From address and Reply-To address can be se account's default From address, and a cleared Reply-To sends replies to the From address. Any other id, such as an unverified or deleted address, or one that belongs to another account, -responds with a `422 Unprocessable Entity` and changes nothing. Every problem with the sender is -reported in a single response. +responds with a `422 Unprocessable Entity` and changes nothing. -`from_email`, `reply_to` and `bcc` are returned in responses but cannot be set directly. If a -request includes one with a value other than the one the campaign will have (a new campaign -sends from the account's default From address, with no Reply-To or BCC), it responds with a -`422 Unprocessable Entity` naming the field to use instead. A matching value is accepted, so you -can send back the fields you fetched. BCC cannot be set via the API. +`from_email`, `reply_to` and `bcc` are read-only: they are returned in responses and ignored if +sent. A sender set here appears in the Drip app, the same as one chosen there. @@ -780,7 +776,7 @@ const body = await response.json(); { "errors": [{ "code": "conflict_error", - "message": "Cannot update a broadcast with status 'sent': only a draft can be edited" + "message": "Cannot update a broadcast with status 'sent'" }] } ``` From 6c49a11b3b84ff55297f99bfb156c8287dd0e83f Mon Sep 17 00:00:00 2001 From: Will Strinz Date: Thu, 29 Oct 2026 08:56:56 -0500 Subject: [PATCH 8/9] Broadcast sender docs: from_email is not ignored on create; set the sender with the address ids Co-Authored-By: Claude Sonnet 5.5 --- source/includes/rest/_broadcasts.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/includes/rest/_broadcasts.md b/source/includes/rest/_broadcasts.md index 20c40e43580..2132eda6674 100644 --- a/source/includes/rest/_broadcasts.md +++ b/source/includes/rest/_broadcasts.md @@ -340,8 +340,8 @@ A Single-Email Campaign's From name, From address and Reply-To address can be se Any other id, such as an unverified or deleted address, or one that belongs to another account, responds with a `422 Unprocessable Entity` and changes nothing. -`from_email`, `reply_to` and `bcc` are read-only: they are returned in responses and ignored if -sent. +`from_email`, `reply_to` and `bcc` are read-only: they are returned in responses. Set the sender +with the address ids above. A sender set here appears in the Drip app, the same as one chosen there. From de4b704a87a814eafd07aaceb32213312f6f373b Mon Sep 17 00:00:00 2001 From: Will Strinz Date: Mon, 2 Nov 2026 13:00:03 -0600 Subject: [PATCH 9/9] Clarity pass: wording and accuracy fixes Co-Authored-By: Claude Opus 5.5 --- source/includes/rest/_accounts.md | 7 +------ source/includes/rest/_broadcasts.md | 6 +++--- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/source/includes/rest/_accounts.md b/source/includes/rest/_accounts.md index ede4a4ad767..7d9b57c7aec 100644 --- a/source/includes/rest/_accounts.md +++ b/source/includes/rest/_accounts.md @@ -86,7 +86,7 @@ - + @@ -272,11 +272,6 @@ accounts does not return them.
from_nameOptional. The name the email is sent from (255 characters maximum). Supports Liquid templating. Defaults to the account's default from name.Optional. The name the email is sent from (255 characters maximum). Supports Liquid templating. Defaults to the account's default From name.
from_email_address_id
from_email_address_idThe id of the address in from_email, matching an id in the account's sending addresses, or null if the account has no default From address. See Sender.The id of the address in from_email, matching an id in the account's sending addresses. Returns null if the account has no default From address, or if the address has been deleted; from_email still shows it. See Sender.
reply_to
reply_to_email_address_idThe id of the address in reply_to, matching an id in the account's sending addresses, or null. See Sender.The id of the address in reply_to, matching an id in the account's sending addresses, or null. It is also null if the Reply-To address has been deleted; reply_to still shows it. See Sender.
postal_address
bccA list of emails designated to receive a blind copy of the Single-Email Campaign. Read-only; it cannot be set via the API.A list of emails designated to receive a blind copy of the Single-Email Campaign. Read-only.
created_at
default_email_address_idA read-only id of the account's default From address in sending_addresses. Returns null if the account has no default From address or its default address has been deleted. Only returned when fetching an account.A read-only id of the account's default From address in sending_addresses. Returns null if the account has no default From address or its default address has been deleted; default_from_email still shows the address emails are sent from when they have no From address of their own. Only returned when fetching an account.
sending_addresses
-`default_email_address_id` is `null` when the account has no default From address, or when -its default address has been deleted. A `null` value does not mean emails have no From -address: `default_from_email` still shows the address emails without their own From address -are sent from. - ### HTTP Endpoint `GET /v2/accounts/:account_id` diff --git a/source/includes/rest/_broadcasts.md b/source/includes/rest/_broadcasts.md index 2132eda6674..3e212a498ad 100644 --- a/source/includes/rest/_broadcasts.md +++ b/source/includes/rest/_broadcasts.md @@ -118,7 +118,7 @@ with [Set the audience](#set-the-audience). from_email_address_id - The id of the address in from_email, matching an id in the account's sending addresses. Returns null if the account has no default From address, or if the address has been deleted; from_email still shows it. See Sender. + The id of the address in from_email, matching an id in the account's sending addresses. Returns null if neither the campaign nor the account has a From address, or if the address has been deleted; from_email still shows it. See Sender. reply_to @@ -310,14 +310,14 @@ const response = await fetch( const body = await response.json(); ``` -> If an address cannot be used, responds with a 422 Unprocessable Entity and changes nothing: +> If an address id cannot be used, responds with a 422 Unprocessable Entity and changes nothing: ```json { "errors": [{ "code": "validation_error", "attribute": "from_email_address_id", - "message": "hello@example.com is not verified: use the id of an address in the account's sending_addresses that has verified: true." + "message": "sales@acme.com is not verified: use the id of an address in the account's sending_addresses that has verified: true." }] } ```