Skip to contentSkip to navigationSkip to topbar
On this page

Consent Management API


(information)

Pilot

Consent Management API only supports SMS .

Customers using Twilio's Compliance Toolkit obtain default access.

This Pilot is available for early adopter customers to test and provide feedback. Want to try it? Please complete the contact form(link takes you to an external page) and we will get back to you.

(warning)

Legal Warning

Consent Management API is currently available as a limited Pilot release and the information contained in this document is subject to change. Some features are not yet implemented and others may be changed before the product is declared as Generally Available. As a Pilot release, Consent Management API is made available to a limited number of Customers for testing purposes. Pilot products are not covered by the Twilio Support Terms or the Twilio Service Level Agreement(link takes you to an external page).

Consent Management API is not a HIPAA Eligible Service and should not be used in workflows that are subject to HIPAA.

Twilio's Consent Management API allows you to bulk manage user consent preferences for SMS messaging. Use it to store or update opt-in, opt-out, and re-opt-in status for your users, along with details about how and when consent was collected.


Twilio limits the Consent Management API to 100 requests per minute. Once you reach this limit, the API returns an HTTP 429 "Too Many Requests" response.


Consent Management API has a timeout value of three seconds.


POST https://accounts.twilio.com/v1/Consents/Bulk

Creates up to 25 consents for an authenticated account. If a consent already exists, it will be updated (via upsert) to match the requested object.

Every Consent object should be associated with a unique correlation_id, allowing you to track each individual request within the bulk operation.

If any issues arise during the processing of a consent object, the error will be returned and mapped specifically to that consent's correlation_id. This allows you to pinpoint and address issues for individual contacts.

For detailed information on possible failures and how to resolve them, refer to error code 30646, which provides guidance on common errors such as incorrect phone number format, missing required fields, and other validation issues.

Request body parameters

request-body-parameters page anchor
Encoding type:application/x-www-form-urlencoded
SchemaExample
Property nameTypeRequiredDescriptionChild properties
itemsarray
required

This is a list of objects that describes a contact's opt-in status. Each object contains the following fields: contact_id, which must be a string representing phone number in E.164 format; correlation_id, a unique 32-character UUID used to uniquely map the request item with the response item; sender_id, which can be either a valid messaging service SID or a from phone number; status, a string representing the consent status. Can be one of [opt-in, opt-out]; source, a string indicating the medium through which the consent was collected. Can be one of [website, offline, opt-in-message, opt-out-message, others]; date_of_consent, an optional datetime string field in ISO-8601 format that captures the exact date and time when the user gave or revoked consent. If not provided, it will be empty.

Upsert Consents in BulkLink to code sample: Upsert Consents in Bulk
1
// Download the helper library from https://www.twilio.com/docs/node/install
2
const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";
3
4
// Find your Account SID and Auth Token at twilio.com/console
5
// and set the environment variables. See http://twil.io/secure
6
const accountSid = process.env.TWILIO_ACCOUNT_SID;
7
const authToken = process.env.TWILIO_AUTH_TOKEN;
8
const client = twilio(accountSid, authToken);
9
10
async function createBulkConsents() {
11
const bulkConsent = await client.accounts.v1.bulkConsents.create({
12
items: [
13
{
14
contact_id: "+19999999991",
15
correlation_id: "ad388b5a46b33b874b0d41f7226db2ef",
16
sender_id: "MG00000000000000000000000000000000",
17
date_of_consent: "2025-02-28T10:05:27Z",
18
status: "opt-in",
19
source: "website",
20
},
21
{
22
contact_id: "+19",
23
correlation_id: "02520cfa6c432f0e3ec3a38c122d428d",
24
sender_id: "12345",
25
date_of_consent: "2025-02-25",
26
status: "opt-out",
27
source: "opt-out-message",
28
},
29
],
30
});
31
32
console.log(bulkConsent.items);
33
}
34
35
createBulkConsents();

Response

Note about this response
1
{
2
"items": [
3
{
4
"correlation_id": "ad388b5a46b33b874b0d41f7226db2ef",
5
"error_code": 0,
6
"error_messages": []
7
},
8
{
9
"correlation_id": "02520cfa6c432f0e3ec3a38c122d428d",
10
"error_code": 30646,
11
"error_messages": [
12
"INVALID_CONTACT_ID",
13
"INVALID_DATE_OF_CONSENT"
14
]
15
}
16
]
17
}

Each item in the response matches the submitted correlation_id. This enables tracing of validation errors for specific contacts. Note: STOP keyword override applies to all messages sent in the US from Short Codes and 10DLC numbers, but not Toll-free numbers. Zipwhip manages opt-out for all US messaging for TF traffic.


  • Always use a unique correlation_id per contact update.
  • Store and update the date_of_consent to establish proper consent timelines.
  • Use status=opt-in with source to update re-opt-in consent records.
  • Ensure contact_id is in proper E.164 format.