{"info":{"_postman_id":"29829c45-e619-4c12-910f-564ec8ccfda9","name":"Braze Endpoints","description":"<html><head></head><body><h1 id=\"braze-api-overview\">Braze API overview</h1>\n<p>Braze provides a high-performance REST API to allow you to track users, send messages, export data, and more. This reference article covers what a REST API is, the terminology, a brief overview of API keys, and API limits.</p>\n<p>A REST API is a way to programmatically transfer information over the web using a predefined schema. Braze has created many different endpoints which perform various actions and/or return various data.</p>\n<p>Braze manages a number of different instances for our dashboard and REST Endpoints. When your account is provisioned you will log in to one of the following URLs. Use the correct REST endpoint based on which instance you are provisioned to. If you are unsure, open a <a href=\"https://www.braze.com/docs/braze_support/\">support ticket</a> or use the following table to match the URL of the dashboard you use to the correct REST Endpoint.</p>\n<blockquote>\n<p>Customers using Braze’s EU database should use the <code>https://rest.fra-01.braze.eu/</code> endpoint. This endpoint will be used when configuring the Braze <a href=\"https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/initial_sdk_setup/completing_integration/#compile-time-endpoint-configuration-recommended\">iOS</a>, <a href=\"https://www.braze.com/docs/developer_guide/platform_integration_guides/android/initial_sdk_setup/android_sdk_integration/#step-2-configure-the-braze-sdk-in-brazexml\">Android</a>, and <a href=\"https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup/#step-2-initialize-braze\">Web</a> SDKs. </p>\n</blockquote>\n<h2 id=\"braze-instances\">Braze Instances</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Instance</th>\n<th>Dashboard URL</th>\n<th>REST Endpoint</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>US-01</td>\n<td><code>https://dashboard.braze.com</code> or  <br><code>https://dashboard-01.braze.com</code></td>\n<td><code>https://rest.iad-01.braze.com</code></td>\n</tr>\n<tr>\n<td>US-02</td>\n<td><code>https://dashboard-02.braze.com</code></td>\n<td><code>https://rest.iad-02.braze.com</code></td>\n</tr>\n<tr>\n<td>US-03</td>\n<td><code>https://dashboard-03.braze.com</code></td>\n<td><code>https://rest.iad-03.braze.com</code></td>\n</tr>\n<tr>\n<td>US-04</td>\n<td><code>https://dashboard-04.braze.com</code></td>\n<td><code>https://rest.iad-04.braze.com</code></td>\n</tr>\n<tr>\n<td>US-05</td>\n<td><code>https://dashboard-05.braze.com</code></td>\n<td><code>https://rest.iad-05.braze.com</code></td>\n</tr>\n<tr>\n<td>US-06</td>\n<td><code>https://dashboard-06.braze.com</code></td>\n<td><code>https://rest.iad-06.braze.com</code></td>\n</tr>\n<tr>\n<td>US-07</td>\n<td><code>https://dashboard-07.braze.com</code></td>\n<td><code>https://rest.iad-07.braze.com</code></td>\n</tr>\n<tr>\n<td>US-08</td>\n<td><code>https://dashboard-08.braze.com</code></td>\n<td><code>https://rest.iad-08.braze.com</code></td>\n</tr>\n<tr>\n<td>EU-01</td>\n<td><code>https://dashboard-01.braze.eu</code></td>\n<td><code>https://rest.fra-01.braze.eu</code></td>\n</tr>\n<tr>\n<td>EU-02</td>\n<td><code>https://dashboard-02.braze.eu</code></td>\n<td><code>https://rest.fra-02.braze.eu</code></td>\n</tr>\n</tbody>\n</table>\n</div><h1 id=\"using-brazes-postman-collection\">Using Braze's Postman collection</h1>\n<p>If you have a Postman account (you can download macOS, Windows, and Linux versions from the <a href=\"https://www.getpostman.com/\">Postman website</a> ), you can open our Postman documentation in your own Postman app by clicking the orange <strong>Run in Postman</strong> button. You can then <a href=\"https://www.braze.com/docs/api/postman_collection/#setting-up-your-postman-environment\">create an environment</a>, or use our Braze REST API environment as a template, and edit the available <code>POST</code> and <code>GET</code> requests to suit your own needs.</p>\n<h2 id=\"setting-up-your-postman-environment\">Setting up your Postman environment</h2>\n<p>The Braze Postman Collection uses a templating variable, <code>{{instance_url}}</code>, to substitute the REST API URL of your Braze instance into the pre-built requests, and the <code>{{api_key}}</code> variable for your API Key. Rather than having to manually edit all requests in the Collection, you can set up this variable in your Postman environment. You can either select our templated environment (Braze REST API Environment Template) from the dropdown and replace the variable values with your own, or you can set up your own environment.</p>\n<p>To set up your own environment, perform the following steps:</p>\n<ol>\n<li><p>From the <strong>Workspaces</strong> tab, select <strong>Environments</strong>.</p>\n</li>\n<li><p>Click the <strong>+</strong> plus button to create a new environment.</p>\n</li>\n<li><p>Give this environment a name (e.g., “Braze API Requests”) and add keys for <code>instance_url</code> and <code>api_key</code> with values corresponding to your <a href=\"https://www.braze.com/docs/developer_guide/rest_api/basics/#endpoints\">Braze instance</a> and <a href=\"https://www.braze.com/docs/api/api_key/\">Braze REST API Key</a>.</p>\n</li>\n<li><p>Click <strong>Save</strong>.</p>\n</li>\n</ol>\n<h2 id=\"using-the-pre-built-requests-from-the-collection\">Using the pre-built requests from the collection</h2>\n<p>Once you have configured your environment. You can use any of the pre-built requests in the collection as a template for building new API requests. To start using one of the pre-built requests, click on it within the <strong>Collections</strong> menu of Postman. This will open the request as a new tab in the main window of the Postman app.</p>\n<p>In general, there are two types of requests that Braze’s API endpoints accept - <code>GET</code> and <code>POST</code>. Depending on which <code>HTTP</code> method the endpoint uses, you’ll need to edit the pre-built request differently.</p>\n<h3 id=\"edit-a-post-request\">Edit a POST request</h3>\n<p>When editing a <code>POST</code> request, open the request and navigate to the <strong>Body</strong> section in the request editor. For readability, select the <strong>raw</strong> radio button to format the <code>JSON</code> request body.</p>\n<h3 id=\"edit-a-get-request\">Edit a GET request</h3>\n<p>When editing a <code>GET</code> request, edit the parameters passed in the request URL. To do so, select the <strong>Params</strong> tab and edit the key-value pairs in the fields that appear.</p>\n<h2 id=\"send-your-request\">Send your request</h2>\n<p>Once your API request is ready, click <strong>Send</strong>. The request sends and the response data populates in a section underneath the request editor. From here, you can view the raw data returned from Braze’s API, see the HTTP response code, see how long the request took to process, and view header information.</p>\n<p>The following documentation can be found on the Braze documentation site:</p>\n<ul>\n<li><p><a href=\"https://www.braze.com/docs/api/objects_filters/\">Object &amp; filter specifications</a></p>\n</li>\n<li><p><a href=\"https://www.braze.com/docs/api/api_key/\">API key overview</a></p>\n</li>\n<li><p><a href=\"https://www.braze.com/docs/api/identifier_types/\">API identifier types</a></p>\n</li>\n<li><p><a href=\"https://www.braze.com/docs/api/errors/\">Errors &amp; responses</a></p>\n</li>\n<li><p><a href=\"https://www.braze.com/docs/api/parameters\">Parameters</a></p>\n</li>\n<li><p><a href=\"https://www.braze.com/docs/api/data_retention/\">Data retention</a></p>\n</li>\n<li><p><a href=\"https://www.braze.com/docs/api/network_connectivity_issues\">API network connectivity issues</a></p>\n</li>\n<li><p><a href=\"https://www.braze.com/docs/api/api_limits/\">Rate limits</a></p>\n</li>\n<li><p><a href=\"https://www.braze.com/docs/api/api_campaigns/\">API campaigns</a></p>\n</li>\n</ul>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Braze API overview","slug":"braze-api-overview"},{"content":"Using Braze's Postman collection","slug":"using-brazes-postman-collection"}],"owner":"4689407","collectionId":"29829c45-e619-4c12-910f-564ec8ccfda9","publishedId":"SVYrsdsG","public":true,"customColor":{"top-bar":"27378f","right-sidebar":"303030","highlight":"3dcdde"},"publishDate":"2021-04-12T19:21:20.000Z"},"item":[{"name":"Catalogs","item":[{"name":"Catalog Management","item":[{"name":"Synchronous","item":[{"name":"Delete catalog","id":"c0915a86-797a-4486-8217-24cd1c689d0f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/catalogs/{catalog_name}","description":"<blockquote>\n<p>Use this endpoint to delete a catalog. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>catalogs.delete</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a shared rate limit of 50 requests per minute between all synchronous catalog endpoints, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"path-parameters\">Path parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>catalog_name</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Name of the catalog.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\">Response</h2>\n<p>There are two status code responses for this endpoint: <code>200</code> and <code>404</code>.</p>\n<h3 id=\"example-success-response\">Example success response</h3>\n<p>The status code <code>200</code> could return the following response body.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"success\"\n}\n\n</code></pre>\n<h3 id=\"example-error-response\">Example error response</h3>\n<p>The status code <code>404</code> could return the following response body. Refer to <a href=\"https://www.braze.com/docs/api/endpoints/catalogs/catalog_management/synchronous/delete_catalog/#troubleshooting\">Troubleshooting</a> for more information about errors you may encounter.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"errors\": [\n    {\n      \"id\": \"catalog-not-found\",\n      \"message\": \"Could not find catalog\",\n      \"parameters\": [\n        \"catalog_name\"\n      ],\n      \"parameter_values\": [\n        \"restaurants\"\n      ]\n    }\n  ],\n  \"message\": \"Invalid Request\"\n}\n\n</code></pre>\n<h2 id=\"troubleshooting\">Troubleshooting</h2>\n<p>The following table lists possible returned errors and their associated troubleshooting steps.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>catalog-not-found</code></td>\n<td>Check that the catalog name is valid.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["catalogs","{catalog_name}"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"c0915a86-797a-4486-8217-24cd1c689d0f"},{"name":"List catalogs","id":"7d65fb86-ccf7-423f-9eb2-f68ab36df824","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/catalogs","description":"<blockquote>\n<p>Use this endpoint to return a list of catalogs in a workspace. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>catalogs.get</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a shared rate limit of 50 requests per minute between all synchronous catalog endpoints, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"path-and-request-parameters\">Path and request parameters</h2>\n<p>There are no path or request parameters for this endpoint.</p>\n<h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request GET 'https://rest.iad-03.braze.com/catalogs' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY'\n\n</code></pre><h2 id=\"response\">Response</h2>\n<h3 id=\"example-success-response\">Example success response</h3>\n<p>The status code <code>200</code> could return the following response body.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"catalogs\": [\n    {\n      \"description\": \"My Restaurants\",\n      \"fields\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"Name\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"City\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"Cuisine\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"Rating\",\n          \"type\": \"number\"\n        },\n        {\n          \"name\": \"Loyalty_Program\",\n          \"type\": \"boolean\"\n        },\n        {\n          \"name\": \"Created_At\",\n          \"type\": \"time\"\n        }\n      ],\n      \"name\": \"restaurants\",\n      \"num_items\": 10,\n      \"updated_at\": \"2022-11-02T20:04:06.879+00:00\"\n    },\n    {\n      \"description\": \"My Catalog\",\n      \"fields\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"string_field\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"number_field\",\n          \"type\": \"number\"\n        },\n        {\n          \"name\": \"boolean_field\",\n          \"type\": \"boolean\"\n        },\n        {\n          \"name\": \"time_field\",\n          \"type\": \"time\"\n        },\n      ],\n      \"name\": \"my_catalog\",\n      \"num_items\": 3,\n      \"updated_at\": \"2022-11-02T09:03:19.967+00:00\"\n    },\n  ],\n  \"message\": \"success\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["catalogs"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"7d65fb86-ccf7-423f-9eb2-f68ab36df824"},{"name":"Create catalog","id":"af9f3e2d-b7e7-49e7-aa64-f4652892be6e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/catalogs","description":"<blockquote>\n<p>Use this endpoint to create a catalog. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>catalogs.create</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a shared rate limit of 50 requests per minute between all synchronous catalog endpoints, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>catalogs</code></td>\n<td>Required</td>\n<td>Array</td>\n<td>An array that contains catalog objects. Only one catalog object is allowed for this request.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"catalog-object-parameters\">Catalog object parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>name</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The name of the catalog that you want to create.</td>\n</tr>\n<tr>\n<td><code>description</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The description of the catalog that you want to create.</td>\n</tr>\n<tr>\n<td><code>fields</code></td>\n<td>Required</td>\n<td>Array</td>\n<td>An array of objects where the object contains keys <code>name</code> and <code>type</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request POST 'https://rest.iad-03.braze.com/catalogs' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY' \\\n--data-raw '{\n  \"catalogs\": [\n    {\n      \"name\": \"restaurants\",\n      \"description\": \"My Restaurants\",\n      \"fields\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"Name\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"City\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"Cuisine\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"Rating\",\n          \"type\": \"number\"\n        },\n        {\n          \"name\": \"Loyalty_Program\",\n          \"type\": \"boolean\"\n        },\n        {\n          \"name\": \"Created_At\",\n          \"type\": \"time\"\n        }\n      ]\n    }\n  ]\n}'\n\n</code></pre><h2 id=\"response\">Response</h2>\n<p>There are two status code responses for this endpoint: <code>201</code> and <code>400</code>.</p>\n<h3 id=\"example-success-response\">Example success response</h3>\n<p>The status code <code>201</code> could return the following response body.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"catalogs\": [\n    {\n      \"description\": \"My Restaurants\",\n      \"fields\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"Name\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"City\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"Cuisine\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"Rating\",\n          \"type\": \"number\"\n        },\n        {\n          \"name\": \"Loyalty_Program\",\n          \"type\": \"boolean\"\n        },\n        {\n          \"name\": \"Created_At\",\n          \"type\": \"time\"\n        }\n      ],\n      \"name\": \"restaurants\",\n      \"num_items\": 0,\n      \"updated_at\": \"2022-11-02T20:04:06.879+00:00\"\n    }\n  ],\n  \"message\": \"success\"\n}\n\n</code></pre>\n<h3 id=\"example-error-response\">Example error response</h3>\n<p>The status code <code>400</code> could return the following response body. Refer to <a href=\"#troubleshooting\">Troubleshooting</a> for more information about errors you may encounter.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"errors\": [\n    {\n      \"id\": \"catalog-name-already-exists\",\n      \"message\": \"A catalog with that name already exists\",\n      \"parameters\": [\n        \"name\"\n      ],\n      \"parameter_values\": [\n        \"restaurants\"\n      ]\n    }\n  ],\n  \"message\": \"Invalid Request\"\n}\n\n</code></pre>\n<h2 id=\"troubleshooting\">Troubleshooting</h2>\n<p>The following table lists possible returned errors and their associated troubleshooting steps.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>catalog-array-invalid</code></td>\n<td><code>catalogs</code> must be an array of objects.</td>\n</tr>\n<tr>\n<td><code>catalog-name-already-exists</code></td>\n<td>Catalog with that name already exists.</td>\n</tr>\n<tr>\n<td><code>catalog-name-too-large</code></td>\n<td>Character limit for a catalog name is 250.</td>\n</tr>\n<tr>\n<td><code>description-too-long</code></td>\n<td>Character limit for description is 250.</td>\n</tr>\n<tr>\n<td><code>field-names-not-unique</code></td>\n<td>The same field name is referenced twice.</td>\n</tr>\n<tr>\n<td><code>field-names-too-large</code></td>\n<td>Character limit for a field name is 250.</td>\n</tr>\n<tr>\n<td><code>id-not-first-column</code></td>\n<td>The <code>id</code> must be the first field in the array. Check that the type is a string.</td>\n</tr>\n<tr>\n<td><code>invalid_catalog_name</code></td>\n<td>Catalog name can only include letters, numbers, hyphens, and underscores.</td>\n</tr>\n<tr>\n<td><code>invalid-field-names</code></td>\n<td>Fields can only include letters, numbers, hyphens, and underscores.</td>\n</tr>\n<tr>\n<td><code>invalid-field-types</code></td>\n<td>Make sure the field types are valid.</td>\n</tr>\n<tr>\n<td><code>invalid-fields</code></td>\n<td><code>fields</code> is not formatted correctly.</td>\n</tr>\n<tr>\n<td><code>reached-company-catalogs-limit</code></td>\n<td>Maximum number of catalogs reached. Contact your Braze account manager for more information.</td>\n</tr>\n<tr>\n<td><code>too-many-catalog-atoms</code></td>\n<td>You can only create one catalog per request.</td>\n</tr>\n<tr>\n<td><code>too-many-fields</code></td>\n<td>Number of fields limit is 30.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["catalogs"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"af9f3e2d-b7e7-49e7-aa64-f4652892be6e"}],"id":"d12978e6-4b76-40d6-a5c1-0a27e5fdb1ca","_postman_id":"d12978e6-4b76-40d6-a5c1-0a27e5fdb1ca","description":""}],"id":"850d5c37-e893-4edc-99d5-4ce241e15843","_postman_id":"850d5c37-e893-4edc-99d5-4ce241e15843","description":""},{"name":"Catalog Items","item":[{"name":"Asynchronous","item":[{"name":"Delete multiple catalog items","id":"647c82e8-8b38-4df2-bde2-b1d8e19fd332","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/catalogs/{catalog_name}/items","description":"<blockquote>\n<p>Use this endpoint to delete multiple items in your catalog. </p>\n</blockquote>\n<p>Each request can support up to 50 items. This endpoint is asynchronous.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>catalogs.delete_items</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a shared rate limit of 16,000 requests per minute between all asynchronous catalog item endpoints, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"path-parameters\">Path parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>catalog_name</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Name of the catalog.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>items</code></td>\n<td>Required</td>\n<td>Array</td>\n<td>An array that contains item objects. The item objects should contain an <code>id</code> referencing the items Braze should delete. Up to 50 item objects are allowed per request.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request DELETE 'https://rest.iad-03.braze.com/catalogs/restaurants/items' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY' \\\n--data-raw '{\n  \"items\": [\n    {\"id\": \"restaurant1\"},\n    {\"id\": \"restaurant2\"},\n    {\"id\": \"restaurant3\"}\n  ]\n}'\n\n</code></pre><h2 id=\"response\">Response</h2>\n<p>There are three status code responses for this endpoint: <code>202</code>, <code>400</code>, and <code>404</code>.</p>\n<h3 id=\"example-success-response\">Example success response</h3>\n<p>The status code <code>202</code> could return the following response body.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"success\"\n}\n\n</code></pre>\n<h3 id=\"example-error-response\">Example error response</h3>\n<p>The status code <code>400</code> could return the following response body. Refer to <a href=\"#troubleshooting\">Troubleshooting</a> for more information about errors you may encounter.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"errors\": [\n    {\n      \"id\": \"items-missing-ids\",\n      \"message\": \"There are 1 item(s) that do not have ids\",\n      \"parameters\": [],\n      \"parameter_values\": []\n    }\n  ],\n  \"message\": \"Invalid Request\",\n}\n\n</code></pre>\n<h2 id=\"troubleshooting\">Troubleshooting</h2>\n<p>The following table lists possible returned errors and their associated troubleshooting steps.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>catalog-not-found</code></td>\n<td>Check that the catalog name is valid.</td>\n</tr>\n<tr>\n<td><code>ids-too-large</code></td>\n<td>Item IDs can't be more than 250 characters.</td>\n</tr>\n<tr>\n<td><code>ids-not-unique</code></td>\n<td>Check that the item IDs are unique in the request.</td>\n</tr>\n<tr>\n<td><code>ids-not-strings</code></td>\n<td>Item IDs must be of type string.</td>\n</tr>\n<tr>\n<td><code>items-missing-ids</code></td>\n<td>Some items don't have item IDs. Check that each item has an item ID.</td>\n</tr>\n<tr>\n<td><code>invalid-ids</code></td>\n<td>Item IDs can only include letters, numbers, hyphens, and underscores.</td>\n</tr>\n<tr>\n<td><code>request-includes-too-many-items</code></td>\n<td>Your request has too many items. The item limit per request is 50.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["catalogs","{catalog_name}","items"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"647c82e8-8b38-4df2-bde2-b1d8e19fd332"},{"name":"Edit multiple catalog items","id":"03f3548e-4139-4f60-812d-7e1a695a738a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/catalogs/{catalog_name}/items","description":"<blockquote>\n<p>Use this endpoint to delete multiple items in your catalog. </p>\n</blockquote>\n<p>Each request can support up to 50 items. This endpoint is asynchronous.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>catalogs.update_items</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a shared rate limit of 16,000 requests per minute between all asynchronous catalog item endpoints, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"path-parameters\">Path parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>catalog_name</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Name of the catalog.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>items</code></td>\n<td>Required</td>\n<td>Array</td>\n<td>An array that contains item objects. The item objects should contain fields that exist in the catalog. Up to 50 item objects are allowed per request.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request PATCH 'https://rest.iad-03.braze.com/catalogs/restaurants/items' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY' \\\n--data-raw '{\n  \"items\": [\n    {\n      \"id\": \"restaurant1\",\n      \"Name\": \"Restaurant\",\n      \"Loyalty_Program\": false,\n      \"Location\": {\n        \"Latitude\": 33.6112,\n        \"Longitude\": -117.8711\n      },\n      \"Top_Dishes\": {\n        \"$add\": [\n          \"Biscuits\",\n          \"Coleslaw\"\n        ],\n        \"$remove\": [\n          \"French Fries\"\n        ]\n      },\n      \"Open_Time\": \"2021-09-03T09:03:19.967+00:00\"\n    },\n    {\n      \"id\": \"restaurant3\",\n      \"City\": \"San Francisco\",\n      \"Rating\": 2,\n      \"Top_Dishes\": [\n        \"Buffalo Wings\",\n        \"Philly Cheesesteak\"\n      ]\n    }\n  ]\n}'\n\n</code></pre><blockquote>\n<p><strong>Note:</strong> The $<code>add</code> and <code>$remove</code> operators are only applicable to array type fields, and are only supported by PATCH endpoints. </p>\n</blockquote>\n<h2 id=\"response\">Response</h2>\n<p>There are three status code responses for this endpoint: <code>202</code>, <code>400</code>, and <code>404</code>.</p>\n<h3 id=\"example-success-response\">Example success response</h3>\n<p>The status code <code>202</code> could return the following response body.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"success\"\n}\n\n</code></pre>\n<h3 id=\"example-error-response\">Example error response</h3>\n<p>The status code <code>400</code> could return the following response body. Refer to <a href=\"#troubleshooting\">Troubleshooting</a> for more information about errors you may encounter.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"errors\": [\n    {\n      \"id\": \"invalid-fields\",\n      \"message\": \"Some of the fields given do not exist in the catalog\",\n      \"parameters\": [\n        \"id\"\n      ],\n      \"parameter_values\": [\n        \"restaurant1\"\n      ]\n    }\n  ],\n  \"message\": \"Invalid Request\"\n}\n\n</code></pre>\n<h2 id=\"troubleshooting\">Troubleshooting</h2>\n<p>The following table lists possible returned errors and their associated troubleshooting steps.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>catalog-not-found</code></td>\n<td>Check that the catalog name is valid.</td>\n</tr>\n<tr>\n<td><code>ids-too-large</code></td>\n<td>Item IDs can't be more than 250 characters.</td>\n</tr>\n<tr>\n<td><code>ids-not-strings</code></td>\n<td>Item IDs must be of type string.</td>\n</tr>\n<tr>\n<td><code>ids-not-unique</code></td>\n<td>Item IDs must be unique in the request.</td>\n</tr>\n<tr>\n<td><code>invalid-ids</code></td>\n<td>Item IDs can only include letters, numbers, hyphens, and underscores.</td>\n</tr>\n<tr>\n<td><code>invalid-fields</code></td>\n<td>Confirm that all fields you are sending in the API request already exist in the catalog. This is not related to the ID field mentioned in the error.</td>\n</tr>\n<tr>\n<td><code>invalid-keys-in-value-object</code></td>\n<td>Item object keys can't include <code>.</code> or <code>$</code>.</td>\n</tr>\n<tr>\n<td><code>items-missing-ids</code></td>\n<td>Some items don't have item IDs. Check that each item has an item ID.</td>\n</tr>\n<tr>\n<td><code>item-array-invalid</code></td>\n<td><code>items</code> must be an array of objects.</td>\n</tr>\n<tr>\n<td><code>items-too-large</code></td>\n<td>Item values can't exceed 5,000 characters.</td>\n</tr>\n<tr>\n<td><code>request-includes-too-many-items</code></td>\n<td>Your request has too many items. The item limit per request is 50.</td>\n</tr>\n<tr>\n<td><code>too-deep-nesting-in-value-object</code></td>\n<td>Item objects can't have more than 50 levels of nesting.</td>\n</tr>\n<tr>\n<td><code>unable-to-coerce-value</code></td>\n<td>Item types can't be converted.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["catalogs","{catalog_name}","items"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"03f3548e-4139-4f60-812d-7e1a695a738a"},{"name":"Create multiple catalog items","id":"cea18bb3-b83a-4160-81fe-8cd42aa6e7cc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/catalogs/{catalog_name}/items","description":"<blockquote>\n<p>Use this endpoint to create multiple items in your catalog. </p>\n</blockquote>\n<p>Each request can support up to 50 items. This endpoint is asynchronous.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>catalogs.add_items</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a shared rate limit of 16,000 requests per minute between all asynchronous catalog item endpoints, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"path-parameters\">Path parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>catalog_name</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Name of the catalog.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>items</code></td>\n<td>Required</td>\n<td>Array</td>\n<td>An array that contains item objects. The item objects should contain all of the fields in the catalog. Up to 50 item objects are allowed per request.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request POST 'https://rest.iad-03.braze.com/catalogs/restaurants/items' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY' \\\n--data-raw '{\n  \"items\": [\n    {\n      \"id\": \"restaurant1\",\n      \"Name\": \"Restaurant1\",\n      \"City\": \"New York\",\n      \"Cuisine\": \"American\",\n      \"Rating\": 5,\n      \"Loyalty_Program\": true,\n      \"Location\": {\n        \"Latitude\": 33.6112,\n        \"Longitude\": -117.8711\n      },\n      \"Top_Dishes\": [\n        \"Hamburger\",\n        \"Deluxe Cheeseburger\"\n      ],\n      \"Created_At\": \"2022-11-01T09:03:19.967+00:00\"\n    },\n    {\n      \"id\": \"restaurant2\",\n      \"Name\": \"Restaurant2\",\n      \"City\": \"New York\",\n      \"Cuisine\": \"American\",\n      \"Rating\": 10,\n      \"Loyalty_Program\": true,\n      \"Location\": {\n        \"Latitude\": 40.7413,\n        \"Longitude\": -73.9764\n      },\n      \"Top_Dishes\": [\n        \"Hot Dog\",\n        \"French Fries\"\n      ],\n      \"Created_At\": \"2022-11-02T09:03:19.967+00:00\"\n    },\n    {\n      \"id\": \"restaurant3\",\n      \"Name\": \"Restaurant3\",\n      \"City\": \"New York\",\n      \"Cuisine\": \"American\",\n      \"Rating\": 3,\n      \"Loyalty_Program\": false,\n      \"Location\": {\n        \"Latitude\": 40.7489,\n        \"Longitude\": -73.9972\n      },\n      \"Top_Dishes\": [\n        \"Buffalo Wings\",\n        \"Philly Cheesesteak\"\n      ],\n      \"Created_At\": \"2022-11-03T09:03:19.967+00:00\"\n    }\n  ]\n}'\n\n</code></pre><h2 id=\"response\">Response</h2>\n<p>There are three status code responses for this endpoint: <code>202</code>, <code>400</code>, and <code>404</code>.</p>\n<h3 id=\"example-success-response\">Example success response</h3>\n<p>The status code <code>202</code> could return the following response body.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"success\"\n}\n\n</code></pre>\n<h3 id=\"example-error-response\">Example error response</h3>\n<p>The status code <code>400</code> could return the following response body. Refer to <a href=\"#troubleshooting\">Troubleshooting</a> for more information about errors you may encounter.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"errors\": [\n    {\n      \"id\": \"fields-do-not-match\",\n      \"message\": \"Fields do not match with fields on the catalog\",\n      \"parameters\": [\n        \"id\"\n      ],\n      \"parameter_values\": [\n        \"restaurant2\"\n      ]\n    }\n  ],\n  \"message\": \"Invalid Request\"\n}\n\n</code></pre>\n<h2 id=\"troubleshooting\">Troubleshooting</h2>\n<p>The following table lists possible returned errors and their associated troubleshooting steps.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>catalog-not-found</code></td>\n<td>Check that the catalog name is valid.</td>\n</tr>\n<tr>\n<td><code>ids-not-strings</code></td>\n<td>Item IDs must be of type string.</td>\n</tr>\n<tr>\n<td><code>ids-not-unique</code></td>\n<td>Item IDs must be unique in the request.</td>\n</tr>\n<tr>\n<td><code>ids-too-large</code></td>\n<td>Item IDs can't be more than 250 characters.</td>\n</tr>\n<tr>\n<td><code>invalid-ids</code></td>\n<td>Item IDs can only include letters, numbers, hyphens, and underscores.</td>\n</tr>\n<tr>\n<td><code>invalid-fields</code></td>\n<td>Confirm that the fields in the request exist in the catalog.</td>\n</tr>\n<tr>\n<td><code>invalid-keys-in-value-object</code></td>\n<td>Item object keys can't include <code>.</code> or <code>$</code>.</td>\n</tr>\n<tr>\n<td><code>item-array-invalid</code></td>\n<td><code>items</code> must be an array of objects.</td>\n</tr>\n<tr>\n<td><code>items-missing-ids</code></td>\n<td>Some items don't have item IDs. Check that each item has an item ID.</td>\n</tr>\n<tr>\n<td><code>items-too-large</code></td>\n<td>Item values can't exceed 5,000 characters.</td>\n</tr>\n<tr>\n<td><code>request-includes-too-many-items</code></td>\n<td>Your request has too many items. The item limit per request is 50.</td>\n</tr>\n<tr>\n<td><code>too-deep-nesting-in-value-object</code></td>\n<td>Item objects can't have more than 50 levels of nesting.</td>\n</tr>\n<tr>\n<td><code>unable-to-coerce-value</code></td>\n<td>Item types can't be converted.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["catalogs","{catalog_name}","items"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"cea18bb3-b83a-4160-81fe-8cd42aa6e7cc"},{"name":"Update multiple catalog items","id":"ab30a4fc-60bc-4460-885c-1b92af8bc061","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"items\": [\n    {\n      \"Name\": \"Restaurant\",\n      \"Loyalty_Program\": false,\n      \"Location\": {\n        \"Latitude\": 33.6112,\n        \"Longitude\": -117.8711\n      },\n      \"Open_Time\": \"2021-09-03T09:03:19.967+00:00\"\n    }\n  ]\n}"},"url":"https://{{instance_url}}/catalogs/{catalog_name}/items","description":"<blockquote>\n<p>Use this endpoint to update multiple items in your catalog. </p>\n</blockquote>\n<p>If a catalog item doesn’t exist, this endpoint will create the item in your catalog. Each request can support up to 50 catalog items. This endpoint is asynchronous.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you'll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>catalogs.replace_item</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a shared rate limit of 16,000 requests per minute between all asynchronous catalog item endpoints, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"path-parameters\">Path parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>catalog_name</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Name of the catalog.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>items</code></td>\n<td>Required</td>\n<td>Array</td>\n<td>An array that contains item objects. Each object must have an ID. The item objects should contain fields that exist in the catalog. Up to 50 item objects are allowed per request.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location --request PUT 'https://rest.iad-03.braze.com/catalogs/restaurants/items' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY' \\\n--data-raw '{\n  \"items\": [\n    {\n      \"id\": \"restaurant1\",\n      \"Name\": \"Restaurant\",\n      \"Loyalty_Program\": false,\n      \"Location\": {\n        \"Latitude\": 33.6112,\n        \"Longitude\": -117.8711\n      },\n      \"Top_Dishes\": [\n        \"Hamburger\",\n        \"Deluxe Cheeseburger\"\n      ],\n      \"Open_Time\": \"2021-09-03T09:03:19.967+00:00\"\n    },\n    {\n      \"id\": \"restaurant3\",\n      \"City\": \"San Francisco\",\n      \"Rating\": 2,\n      \"Top_Dishes\": [\n        \"Hot Dog\",\n        \"French Fries\"\n      ]\n    }\n  ]\n}'\n\n</code></pre>\n<h2 id=\"response\">Response</h2>\n<p>There are three status code responses for this endpoint: <code>202</code>, <code>400</code>, and <code>404</code>.</p>\n<h3 id=\"example-success-response\">Example success response</h3>\n<p>The status code <code>202</code> could return the following response body.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"success\"\n}\n\n</code></pre>\n<h3 id=\"example-error-response\">Example error response</h3>\n<p>The status code <code>400</code> could return the following response body. Refer to <a href=\"https://www.braze.com/docs/api/endpoints/catalogs/catalog_items/asynchronous/put_update_catalog_items/#troubleshooting\">Troubleshooting</a> for more information about errors you may encounter.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"errors\": [\n    {\n      \"id\": \"invalid-fields\",\n      \"message\": \"Some of the fields given do not exist in the catalog\",\n      \"parameters\": [\n        \"id\"\n      ],\n      \"parameter_values\": [\n        \"restaurant1\"\n      ]\n    }\n  ],\n  \"message\": \"Invalid Request\"\n}\n\n</code></pre>\n<h2 id=\"troubleshooting\">Troubleshooting</h2>\n<p>The following table lists possible returned errors and their associated troubleshooting steps.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>catalog_not_found</code></td>\n<td>Check that the catalog name is valid.</td>\n</tr>\n<tr>\n<td><code>ids_not_string</code></td>\n<td>Confirm that each item ID is a string.</td>\n</tr>\n<tr>\n<td><code>ids_not_unique</code></td>\n<td>Check that each item ID is unique.</td>\n</tr>\n<tr>\n<td><code>ids_too_large</code></td>\n<td>Character limit for each item ID is 250 characters.</td>\n</tr>\n<tr>\n<td><code>item_array_invalid</code></td>\n<td><code>items</code> must be an array of objects.</td>\n</tr>\n<tr>\n<td><code>items_missing_ids</code></td>\n<td>Some items don't have item IDs. Confirm that each item has an ID.</td>\n</tr>\n<tr>\n<td><code>items_too_large</code></td>\n<td>Item values can't exceed 5,000 characters.</td>\n</tr>\n<tr>\n<td><code>invalid_ids</code></td>\n<td>Supported characters for item ID names are letters, numbers, hyphens, and underscores.</td>\n</tr>\n<tr>\n<td><code>invalid_fields</code></td>\n<td>Confirm that the fields in the request exist in the catalog.</td>\n</tr>\n<tr>\n<td><code>invalid_keys_in_value_object</code></td>\n<td>Item object keys can't include <code>.</code> or <code>$</code>.</td>\n</tr>\n<tr>\n<td><code>too_deep_nesting_in_value_object</code></td>\n<td>Item objects can't have more than 50 levels of nesting.</td>\n</tr>\n<tr>\n<td><code>request_includes_too_many_items</code></td>\n<td>Your request has too many items. The item limit per request is 50.</td>\n</tr>\n<tr>\n<td><code>unable_to_coerce_value</code></td>\n<td>Item types can't be converted.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["catalogs","{catalog_name}","items"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"ab30a4fc-60bc-4460-885c-1b92af8bc061"}],"id":"7549210a-6b3e-4748-a22f-caa2e605066e","_postman_id":"7549210a-6b3e-4748-a22f-caa2e605066e","description":""},{"name":"Synchronous","item":[{"name":"Delete a catalog item","id":"0dcce797-1346-472f-9384-082f14541689","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/catalogs/{catalog_name}/items/{item_id}","description":"<blockquote>\n<p>Use this endpoint to delete an item in your catalog. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>catalogs.delete_item</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a shared rate limit of 50 requests per minute between all synchronous catalog item endpoints, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"path-parameters\">Path parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>catalog_name</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Name of the catalog.</td>\n</tr>\n<tr>\n<td><code>item_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The ID of the catalog item.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"request-parameters\">Request parameters</h2>\n<p>There is no request body for this endpoint.</p>\n<h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request DELETE 'https://rest.iad-03.braze.com/catalogs/restaurants/items/restaurant1' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY'\n\n</code></pre><h2 id=\"response\">Response</h2>\n<p>There are three status code responses for this endpoint: <code>202</code>, <code>400</code>, and <code>404</code>.</p>\n<h3 id=\"example-success-response\">Example success response</h3>\n<p>The status code <code>202</code> could return the following response body.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"success\"\n}\n\n</code></pre>\n<h3 id=\"example-error-response\">Example error response</h3>\n<p>The status code <code>400</code> could return the following response body. Refer to <a href=\"#troubleshooting\">Troubleshooting</a> for more information about errors you may encounter.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"errors\": [\n    {\n      \"id\": \"item-not-found\",\n      \"message\": \"Could not find item\",\n      \"parameters\": [\n        \"item_id\"\n      ],\n      \"parameter_values\": [\n        \"restaurant34\"\n      ]\n    }\n  ],\n  \"message\": \"Invalid Request\"\n}\n\n</code></pre>\n<h2 id=\"troubleshooting\">Troubleshooting</h2>\n<p>The following table lists possible returned errors and their associated troubleshooting steps.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>arbitrary-error</code></td>\n<td>An arbitrary error occurred. Please try again or contact <a href=\"https://www.braze.com/docs/support_contact/\">Support</a>.</td>\n</tr>\n<tr>\n<td><code>catalog-not-found</code></td>\n<td>Check that the catalog name is valid.</td>\n</tr>\n<tr>\n<td><code>item-not-found</code></td>\n<td>Check that the item to be deleted exists in your catalog.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["catalogs","{catalog_name}","items","{item_id}"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"0dcce797-1346-472f-9384-082f14541689"},{"name":"List catalog item details","id":"52c6631c-7366-48e5-9e0e-16de7b6285cc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/catalogs/{catalog_name}/items/{item_id}","description":"<blockquote>\n<p>Use this endpoint to return a catalog item and its content. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>catalogs.get_item</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a shared rate limit of 50 requests per minute between all synchronous catalog item endpoints, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"path-parameters\">Path parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>catalog_name</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Name of the catalog.</td>\n</tr>\n<tr>\n<td><code>item_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The ID of the catalog item.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"request-parameters\">Request parameters</h2>\n<p>There is no request body for this endpoint.</p>\n<h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request GET 'https://rest.iad-03.braze.com/catalogs/restaurants/items/restaurant1' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY'\n\n</code></pre><h2 id=\"response\">Response</h2>\n<p>There are two status code responses for this endpoint: <code>200</code> and <code>404</code>.</p>\n<h3 id=\"example-success-response\">Example success response</h3>\n<p>The status code <code>200</code> could return the following response body.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"items\": [\n    {\n      \"id\": \"restaurant3\",\n      \"Name\": \"Restaurant1\",\n      \"City\": \"New York\",\n      \"Cuisine\": \"American\",\n      \"Rating\": 5,\n      \"Loyalty_Program\": true,\n      \"Open_Time\": \"2022-11-01T09:03:19.967Z\"\n    }\n  ],\n  \"message\": \"success\"\n}\n\n</code></pre>\n<h3 id=\"example-error-response\">Example error response</h3>\n<p>The status code <code>404</code> could return the following response. Refer to <a href=\"#troubleshooting\">Troubleshooting</a> for more information about errors you may encounter.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"errors\": [\n    {\n      \"id\": \"item-not-found\",\n      \"message\": \"Could not find item\",\n      \"parameters\": [\n        \"item_id\"\n      ],\n      \"parameter_values\": [\n        \"restaurant34\"\n      ]\n    }\n  ],\n  \"message\": \"Invalid Request\"\n}\n\n</code></pre>\n<h2 id=\"troubleshooting\">Troubleshooting</h2>\n<p>The following table lists possible returned errors and their associated troubleshooting steps, if applicable.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>catalog-not-found</code></td>\n<td>Check that the catalog name is valid.</td>\n</tr>\n<tr>\n<td><code>item-not-found</code></td>\n<td>Check that the item is in the catalog.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["catalogs","{catalog_name}","items","{item_id}"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"52c6631c-7366-48e5-9e0e-16de7b6285cc"},{"name":"List multiple catalog item details","id":"63a19dd5-10e0-4649-bdf0-097216748bbb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/catalogs/{catalog_name}/items","description":"<blockquote>\n<p>Use this endpoint to return multiple catalog items and their content. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>catalogs.get_items</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a shared rate limit of 50 requests per minute between all synchronous catalog item endpoints, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"path-parameters\">Path parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>catalog_name</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Name of the catalog.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"query-parameters\">Query parameters</h2>\n<p>Note that each call to this endpoint will return 50 items. For a catalog with more than 50 items, use the <code>Link</code> header to retrieve the data on the next page as shown in the following example response.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>cursor</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>Determines the pagination of the catalog items.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"request-parameters\">Request parameters</h2>\n<p>There is no request body for this endpoint.</p>\n<h2 id=\"example-requests\">Example requests</h2>\n<h3 id=\"without-cursor\">Without cursor</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request GET 'https://rest.iad-03.braze.com/catalogs/restaurants/items' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY'\n\n</code></pre><h3 id=\"with-cursor\">With cursor</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request GET 'https://rest.iad-03.braze.com/catalogs/restaurants/items?cursor=c2tpcDow' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY'\n\n</code></pre><h2 id=\"response\">Response</h2>\n<p>There are three status code responses for this endpoint: <code>200</code>, <code>400</code>, and <code>404</code>.</p>\n<h3 id=\"example-success-response\">Example success response</h3>\n<p>The status code <code>200</code> could return the following response header and body.</p>\n<blockquote>\n<p><strong>Note:</strong> The <code>Link</code> header won't exist if the catalog has less than or equal to 50 items. For calls without a cursor, <code>prev</code> will not show. When looking at the last page of items, <code>next</code> will not show.  </p>\n</blockquote>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Link: &lt;/catalogs/all_restaurants/items?cursor=c2tpcDow&gt;; rel=\"prev\",&lt;/catalogs/all_restaurants/items?cursor=c2tpcDoxMDA=&gt;; rel=\"next\"\n\n</code></pre><pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"items\": [\n    {\n      \"id\": \"restaurant1\",\n      \"Name\": \"Restaurant1\",\n      \"City\": \"New York\",\n      \"Cuisine\": \"American\",\n      \"Rating\": 5,\n      \"Loyalty_Program\": true,\n      \"Open_Time\": \"2022-11-02T09:03:19.967Z\"\n    },\n    {\n      \"id\": \"restaurant2\",\n      \"Name\": \"Restaurant2\",\n      \"City\": \"New York\",\n      \"Cuisine\": \"American\",\n      \"Rating\": 10,\n      \"Loyalty_Program\": true,\n      \"Open_Time\": \"2022-11-02T09:03:19.967Z\"\n    },\n    {\n      \"id\": \"restaurant3\",\n      \"Name\": \"Restaurant3\",\n      \"City\": \"New York\",\n      \"Cuisine\": \"American\",\n      \"Rating\": 5,\n      \"Loyalty_Program\": false,\n      \"Open_Time\": \"2022-11-02T09:03:19.967Z\"\n    }\n  ],\n  \"message\": \"success\"\n}\n\n</code></pre>\n<h3 id=\"example-error-response\">Example error response</h3>\n<p>The status code <code>400</code> could return the following response body. Refer to <a href=\"#troubleshooting\">Troubleshooting</a> for more information about errors you may encounter.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"errors\": [\n    {\n      \"id\": \"invalid-cursor\",\n      \"message\": \"'cursor' is not valid\",\n      \"parameters\": [\n        \"cursor\"\n      ],\n      \"parameter_values\": [\n        \"bad-cursor\"\n      ]\n    }\n  ],\n  \"message\": \"Invalid Request\"\n}\n\n</code></pre>\n<h2 id=\"troubleshooting\">Troubleshooting</h2>\n<p>The following table lists possible returned errors and their associated troubleshooting steps.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>catalog-not-found</code></td>\n<td>Check that the catalog name is valid.</td>\n</tr>\n<tr>\n<td><code>invalid-cursor</code></td>\n<td>Check that your <code>cursor</code> is valid.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["catalogs","{catalog_name}","items"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"63a19dd5-10e0-4649-bdf0-097216748bbb"},{"name":"Edit catalog items","id":"e35976ae-ff77-42b7-b691-a883c980d8c0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"items\": [\n    {\n      \"Name\": \"Restaurant\",\n      \"Loyalty_Program\": false,\n      \"Open_Time\": \"2021-09-03T09:03:19.967+00:00\"\n    }\n  ]\n}"},"url":"https://{{instance_url}}/catalogs/{catalog_name}/items/{item_id}","description":"<blockquote>\n<p>Use this endpoint to edit an item in your catalog. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>catalogs.update_item</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a shared rate limit of 50 requests per minute between all synchronous catalog item endpoints, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"path-parameters\">Path parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>catalog_name</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Name of the catalog.</td>\n</tr>\n<tr>\n<td><code>item_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The ID of the catalog item.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>items</code></td>\n<td>Required</td>\n<td>Array</td>\n<td>An array that contains item objects. The item objects should contain fields that exist in the catalog except for the <code>id</code> field. Only one item object is allowed per request.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request PATCH 'https://rest.iad-03.braze.com/catalogs/restaurants/items/restaurant1' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY' \\\n--data-raw '{\n  \"items\": [\n    {\n      \"Name\": \"Restaurant\",\n      \"Loyalty_Program\": false,\n      \"Location\": {\n        \"Latitude\": 33.6112,\n        \"Longitude\": -117.8711\n      },\n      \"Top_Dishes\": {\n        \"$add\": [\n          \"Biscuits\",\n          \"Coleslaw\"\n        ],\n        \"$remove\": [\n          \"French Fries\"\n        ]\n      },\n      \"Open_Time\": \"2021-09-03T09:03:19.967+00:00\"\n    }\n  ]\n}'\n\n</code></pre><blockquote>\n<p><strong>Note:</strong> The $<code>add</code> and <code>$remove</code> operators are only applicable to array type fields, and are only supported by PATCH endpoints. </p>\n</blockquote>\n<h2 id=\"response\">Response</h2>\n<p>There are three status code responses for this endpoint: <code>200</code>, <code>400</code>, and <code>404</code>.</p>\n<h3 id=\"example-success-response\">Example success response</h3>\n<p>The status code <code>200</code> could return the following response body.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"success\"\n}\n\n</code></pre>\n<h3 id=\"example-error-response\">Example error response</h3>\n<p>The status code <code>400</code> could return the following response body. Refer to <a href=\"#troubleshooting\">Troubleshooting</a> for more information about errors you may encounter.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"errors\": [\n    {\n      \"id\": \"invalid-fields\",\n      \"message\": \"Some of the fields given do not exist in the catalog\",\n      \"parameters\": [\n        \"id\"\n      ],\n      \"parameter_values\": [\n        \"restaurant1\"\n      ]\n    }\n  ],\n  \"message\": \"Invalid Request\"\n}\n\n</code></pre>\n<h2 id=\"troubleshooting\">Troubleshooting</h2>\n<p>The following table lists possible returned errors and their associated troubleshooting steps.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>arbitrary-error</code></td>\n<td>An arbitrary error occurred. Please try again or contact <a href=\"https://www.braze.com/docs/support_contact/\">Support</a>.</td>\n</tr>\n<tr>\n<td><code>catalog-not-found</code></td>\n<td>Check that the catalog name is valid.</td>\n</tr>\n<tr>\n<td><code>filtered-set-field-too-long</code></td>\n<td>The field value is being used in a filtered set that exceeds the character limit for an item.</td>\n</tr>\n<tr>\n<td><code>id-in-body</code></td>\n<td>An item ID already exists in the catalog.</td>\n</tr>\n<tr>\n<td><code>ids-too-large</code></td>\n<td>Character limit for each item ID is 250 characters.</td>\n</tr>\n<tr>\n<td><code>invalid-ids</code></td>\n<td>Supported characters for item ID names are letters, numbers, hyphens, and underscores.</td>\n</tr>\n<tr>\n<td><code>invalid-fields</code></td>\n<td>Confirm that the fields in the request exist in the catalog.</td>\n</tr>\n<tr>\n<td><code>invalid-keys-in-value-object</code></td>\n<td>Item object keys can't include <code>.</code> or <code>$</code>.</td>\n</tr>\n<tr>\n<td><code>item-not-found</code></td>\n<td>Check that the item is in the catalog.</td>\n</tr>\n<tr>\n<td><code>item-array-invalid</code></td>\n<td><code>items</code> must be an array of objects.</td>\n</tr>\n<tr>\n<td><code>items-too-large</code></td>\n<td>Character limit for each item is 5,000 characters.</td>\n</tr>\n<tr>\n<td><code>request-includes-too-many-items</code></td>\n<td>You can only edit one catalog item per request.</td>\n</tr>\n<tr>\n<td><code>too-deep-nesting-in-value-object</code></td>\n<td>Item objects can't have more than 50 levels of nesting.</td>\n</tr>\n<tr>\n<td><code>unable-to-coerce-value</code></td>\n<td>Item types can't be converted.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["catalogs","{catalog_name}","items","{item_id}"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"e35976ae-ff77-42b7-b691-a883c980d8c0"},{"name":"Create catalog item","id":"820c305b-ea6a-4b71-811a-55003a212a40","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"items\": [\n    {\n      \"Name\": \"Restaurant1\",\n      \"City\": \"New York\",\n      \"Cuisine\": \"American\",\n      \"Rating\": 5,\n      \"Loyalty_Program\": true,\n      \"Created_At\": \"2022-11-01T09:03:19.967+00:00\"\n    }\n  ]\n}"},"url":"https://{{instance_url}}/catalogs/{catalog_name}/items/{item_id}","description":"<blockquote>\n<p>Use this endpoint to create an item in your catalog. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>catalogs.create_item</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a shared rate limit of 50 requests per minute between all synchronous catalog item endpoints, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"path-parameters\">Path parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>catalog_name</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Name of the catalog.</td>\n</tr>\n<tr>\n<td><code>item_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The ID of the catalog item.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>items</code></td>\n<td>Required</td>\n<td>Array</td>\n<td>An array that contains item objects. The item objects should contain all of the fields in the catalog except for the <code>id</code> field. Only one item object is allowed per request.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request POST 'https://rest.iad-03.braze.com/catalogs/restaurants/items/restaurant1' \\\ncurl --location --request POST 'https://rest.iad-03.braze.com/catalogs/restaurants/items/restaurant1' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY' \\\n--data-raw '{\n  \"items\": [\n    {\n      \"Name\": \"Restaurant1\",\n      \"City\": \"New York\",\n      \"Cuisine\": \"American\",\n      \"Rating\": 5,\n      \"Loyalty_Program\": true,\n      \"Location\": {\n        \"Latitude\": 33.6112,\n        \"Longitude\": -117.8711\n      },\n      \"Top_Dishes\": [\n        \"Hamburger\",\n        \"Deluxe Cheeseburger\"\n      ],\n      \"Created_At\": \"2022-11-01T09:03:19.967+00:00\"\n    }\n  ]\n}'\n\n</code></pre><h2 id=\"response\">Response</h2>\n<p>There are three status code responses for this endpoint: <code>201</code>, <code>400</code>, and <code>404</code>.</p>\n<h3 id=\"example-success-response\">Example success response</h3>\n<p>The status code <code>201</code> could return the following response body.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"success\"\n}\n\n</code></pre>\n<h3 id=\"example-error-response\">Example error response</h3>\n<p>The status code <code>400</code> could return the following response body. Refer to <a href=\"#troubleshooting\">Troubleshooting</a> for more information about errors you may encounter.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"errors\": [\n    {\n      \"id\": \"invalid-fields\",\n      \"message\": \"Some of the fields given do not exist in the catalog\",\n      \"parameters\": [\n        \"id\"\n      ],\n      \"parameter_values\": [\n        \"restaurant1\"\n      ]\n    }\n  ],\n  \"message\": \"Invalid Request\"\n}\n\n</code></pre>\n<h2 id=\"troubleshooting\">Troubleshooting</h2>\n<p>The following table lists possible returned errors and their associated troubleshooting steps.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>already-reached-catalog-item-limit</code></td>\n<td>Maximum number of catalogs reached. Contact your Braze account manager for more information.</td>\n</tr>\n<tr>\n<td><code>already-reached-company-item-limit</code></td>\n<td>Maximum number of catalog items reached. Contact your Braze account manager for more information.</td>\n</tr>\n<tr>\n<td><code>arbitrary-error</code></td>\n<td>An arbitrary error occurred. Please try again or contact <a href=\"https://www.braze.com/docs/support_contact/\">Support</a>.</td>\n</tr>\n<tr>\n<td><code>catalog-not-found</code></td>\n<td>Check that the catalog name is valid.</td>\n</tr>\n<tr>\n<td><code>filtered-set-field-too-long</code></td>\n<td>The field value is being used in a filtered set that exceeds the character limit for an item.</td>\n</tr>\n<tr>\n<td><code>id-in-body</code></td>\n<td>Remove any item IDs in the request body.</td>\n</tr>\n<tr>\n<td><code>ids-too-large</code></td>\n<td>Character limit for each item ID is 250 characters.</td>\n</tr>\n<tr>\n<td><code>invalid-ids</code></td>\n<td>Supported characters for item ID names are letters, numbers, hyphens, and underscores.</td>\n</tr>\n<tr>\n<td><code>invalid-fields</code></td>\n<td>Confirm that the fields in the request exist in the catalog.</td>\n</tr>\n<tr>\n<td><code>invalid-keys-in-value-object</code></td>\n<td>Item object keys can't include <code>.</code> or <code>$</code>.</td>\n</tr>\n<tr>\n<td><code>item-already-exists</code></td>\n<td>The item already exists in the catalog.</td>\n</tr>\n<tr>\n<td><code>item-array-invalid</code></td>\n<td><code>items</code> must be an array of objects.</td>\n</tr>\n<tr>\n<td><code>items-too-large</code></td>\n<td>Character limit for each item is 5,000 characters.</td>\n</tr>\n<tr>\n<td><code>request-includes-too-many-items</code></td>\n<td>You can only create one catalog item per request.</td>\n</tr>\n<tr>\n<td><code>too-deep-nesting-in-value-object</code></td>\n<td>Item objects can't have more than 50 levels of nesting.</td>\n</tr>\n<tr>\n<td><code>unable-to-coerce-value</code></td>\n<td>Item types can't be converted.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["catalogs","{catalog_name}","items","{item_id}"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"820c305b-ea6a-4b71-811a-55003a212a40"},{"name":"Update catalog item","id":"b2871ed7-734e-4a37-b8f1-e11584e569f5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"items\": [\n    {\n      \"Name\": \"Restaurant\",\n      \"Loyalty_Program\": false,\n      \"Location\": {\n        \"Latitude\": 33.6112,\n        \"Longitude\": -117.8711\n      },\n      \"Open_Time\": \"2021-09-03T09:03:19.967+00:00\"\n    }\n  ]\n}"},"url":"https://{{instance_url}}/catalogs/{catalog_name}/items/{item_id}","description":"<blockquote>\n<p>Use this endpoint to update an item in your catalog. </p>\n</blockquote>\n<p>If the <code>item_id</code> isn't found, this endpoint will create the item. This endpoint is synchronous.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you'll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>catalogs.replace_item</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a shared rate limit of 50 requests per minute between all synchronous catalog item endpoints, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"path-parameters\">Path parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>catalog_name</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Name of the catalog.</td>\n</tr>\n<tr>\n<td><code>item_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The ID of the catalog item.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>items</code></td>\n<td>Required</td>\n<td>Array</td>\n<td>An array that contains item objects. The item objects should contain fields that exist in the catalog except for the <code>id</code> field. Only one item object is allowed per request.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request PUT 'https://rest.iad-03.braze.com/catalogs/restaurants/items/restaurant1' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY' \\\n--data-raw '{\n  \"items\": [\n    {\n      \"Name\": \"Restaurant\",\n      \"Loyalty_Program\": false,\n      \"Location\": {\n        \"Latitude\": 33.6112,\n        \"Longitude\": -117.8711\n      },\n      \"Top_Dishes\": [\n        \"Hamburger\",\n        \"Deluxe Cheeseburger\"\n      ],\n      \"Open_Time\": \"2021-09-03T09:03:19.967+00:00\"\n    }\n  ]\n}'\n\n</code></pre><h2 id=\"response\">Response</h2>\n<p>There are three status code responses for this endpoint: <code>200</code>, <code>400</code>, and <code>404</code>.</p>\n<h3 id=\"example-success-response\">Example success response</h3>\n<p>The status code <code>200</code> could return the following response body.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"success\"\n}\n\n</code></pre>\n<h3 id=\"example-error-response\">Example error response</h3>\n<p>The status code <code>400</code> could return the following response body. Refer to <a href=\"#troubleshooting\">Troubleshooting</a> for more information about errors you may encounter.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"errors\": [\n    {\n      \"id\": \"invalid-fields\",\n      \"message\": \"Some of the fields given do not exist in the catalog\",\n      \"parameters\": [\n        \"id\"\n      ],\n      \"parameter_values\": [\n        \"restaurant1\"\n      ]\n    }\n  ],\n  \"message\": \"Invalid Request\"\n}\n\n</code></pre>\n<h2 id=\"troubleshooting\">Troubleshooting</h2>\n<p>The following table lists possible returned errors and their associated troubleshooting steps.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>already_reached_catalog_item_limit</code></td>\n<td>Maximum number of catalogs reached. Contact your Braze account manager for more information.</td>\n</tr>\n<tr>\n<td><code>already_reached_company_item_limit</code></td>\n<td>Maximum number of items reached. Contact your Braze account manager for more information.</td>\n</tr>\n<tr>\n<td><code>arbitrary_error</code></td>\n<td>An arbitrary error occurred. Please try again or contact <a href=\"https://www.braze.com/docs/support_contact/\">Support</a>.</td>\n</tr>\n<tr>\n<td><code>catalog_not_found</code></td>\n<td>Check that the catalog name is valid.</td>\n</tr>\n<tr>\n<td><code>filtered-set-field-too-long</code></td>\n<td>The field value is being used in a filtered set that exceeds the character limit for an item.</td>\n</tr>\n<tr>\n<td><code>id_in_body</code></td>\n<td>Remove any item IDs in the request body.</td>\n</tr>\n<tr>\n<td><code>ids_too_large</code></td>\n<td>Character limit for each item ID is 250 characters.</td>\n</tr>\n<tr>\n<td><code>invalid_ids</code></td>\n<td>Supported characters for item ID names are letters, numbers, hyphens, and underscores.</td>\n</tr>\n<tr>\n<td><code>invalid_fields</code></td>\n<td>Confirm that the fields in the request exist in the catalog.</td>\n</tr>\n<tr>\n<td><code>invalid_keys_in_value_object</code></td>\n<td>Item object keys can't include <code>.</code> or <code>$</code>.</td>\n</tr>\n<tr>\n<td><code>item_already_exists</code></td>\n<td>The item already exists in the catalog.</td>\n</tr>\n<tr>\n<td><code>item_array_invalid</code></td>\n<td><code>items</code> must be an array of objects.</td>\n</tr>\n<tr>\n<td><code>items_too_large</code></td>\n<td>Item values can't exceed 5,000 characters.</td>\n</tr>\n<tr>\n<td><code>request_includes_too_many_items</code></td>\n<td>Your request has too many items. The item limit per request is 50.</td>\n</tr>\n<tr>\n<td><code>too_deep_nesting_in_value_object</code></td>\n<td>Item objects can't have more than 50 levels of nesting.</td>\n</tr>\n<tr>\n<td><code>unable_to_coerce_value</code></td>\n<td>Item types can't be converted.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["catalogs","{catalog_name}","items","{item_id}"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"b2871ed7-734e-4a37-b8f1-e11584e569f5"}],"id":"4d5f85a9-fbaa-4304-af83-a9a71206b5ed","_postman_id":"4d5f85a9-fbaa-4304-af83-a9a71206b5ed","description":""}],"id":"ab52029c-d19c-4241-b59a-f3c08f2815e8","_postman_id":"ab52029c-d19c-4241-b59a-f3c08f2815e8","description":""}],"id":"dbe0b381-5d9b-4e6d-9622-c934727d4b47","description":"<p>Use the Braze Catalogs Endpoints to add, edit, and manage your catalogs and catalog item details. You can use the asynchronous catalog endpoints to make bulk changes to your catalog.</p>\n<p>Looking for guidance on creating a catalog? Check out our article for <a href=\"https://www.braze.com/docs/user_guide/personalization_and_dynamic_content/catalog/\">creating and using catalogs</a>.</p>\n","_postman_id":"dbe0b381-5d9b-4e6d-9622-c934727d4b47"},{"name":"Email Lists & Addresses","item":[{"name":"Query hard bounced emails","id":"7c2ef84f-ddf5-451a-a72c-beeabc06ad9d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/email/hard_bounces?start_date=2019-01-01&end_date=2019-02-01&limit=100&offset=1&email=example@braze.com","description":"<blockquote>\n<p>Use this endpoint to pull a list of email addresses that have “hard bounced” your email messages within a certain time frame. </p>\n</blockquote>\n<blockquote>\n<p><strong>Note:</strong> You must provide an <code>end_date</code>, as well as either an <code>email</code> or a <code>start_date</code>. If you provide all three, <code>start_date</code>, <code>end_date</code>, and an <code>email</code>, we prioritize the emails given and disregard the date range. </p>\n</blockquote>\n<p>If your date range has more than <code>limit</code> number of hard bounces, you will need to make multiple API calls, each time increasing the <code>offset</code> until a call returns either fewer than <code>limit</code> or zero results.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>email.hard_bounces</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request GET 'https://rest.iad-01.braze.com/email/hard_bounces?start_date=2019-01-01&amp;end_date=2019-02-01&amp;limit=100&amp;offset=1&amp;email=example@braze.com' \\\n--header 'Authorization: Bearer YOUR-API-KEY-HERE'\n\n</code></pre><h2 id=\"response\">Response</h2>\n<p>Entries are listed in descending order.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n  \"emails\": [\n    {\n      \"email\": \"example1@braze.com\",\n      \"hard_bounced_at\": \"2016-08-25 15:24:32 +0000\"\n    },\n    {\n      \"email\": \"example2@braze.com\",\n      \"hard_bounced_at\": \"2016-08-24 17:41:58 +0000\"\n    },\n    {\n      \"email\": \"example3@braze.com\",\n      \"hard_bounced_at\": \"2016-08-24 12:01:13 +0000\"\n    }\n  ],\n  \"message\": \"success\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["email","hard_bounces"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Optional*) String in YYYY-MM-DD format </p>\n<p>Start date of the range to retrieve hard bounces, must be earlier than <code>end_date</code>. This is treated as midnight in UTC time by the API.</p>\n<p>*You must provide either an <code>email</code> or a <code>start_date</code>, and an <code>end_date</code>.</p>\n","type":"text/plain"},"key":"start_date","value":"2019-01-01"},{"description":{"content":"<p>(Optional*) String in YYYY-MM-DD format</p>\n<p>String in YYYY-MM-DD format. End date of the range to retrieve hard bounces. This is treated as midnight in UTC time by the API.</p>\n<p>*You must provide either an <code>email</code> or a <code>start_date</code>, and an <code>end_date</code>.</p>\n","type":"text/plain"},"key":"end_date","value":"2019-02-01"},{"description":{"content":"<p>(Optional) Integer</p>\n<p>Optional field to limit the number of results returned. Defaults to 100, maximum is 500.</p>\n","type":"text/plain"},"key":"limit","value":"100"},{"description":{"content":"<p>(Optional) Integer</p>\n<p>Optional beginning point in the list to retrieve from.</p>\n","type":"text/plain"},"key":"offset","value":"1"},{"description":{"content":"<p>(Optional*) String</p>\n<p>If provided, we will return whether or not the user has hard bounced.</p>\n<p>*You must provide either an <code>email</code> or a <code>start_date</code>, and an <code>end_date</code>.</p>\n","type":"text/plain"},"key":"email","value":"example@braze.com"}],"variable":[]}},"response":[],"_postman_id":"7c2ef84f-ddf5-451a-a72c-beeabc06ad9d"},{"name":"Query list of unsubscribed email addresses","id":"d2966b81-188a-407b-ba7e-e6c252c44b4a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/email/unsubscribes?start_date=2020-01-01&end_date=2020-02-01&limit=1&offset=1&sort_direction=desc&email=example@braze.com","description":"<blockquote>\n<p>Use this endpoint to return emails that have unsubscribed during the time period from <code>start_date</code> to <code>end_date</code>. </p>\n</blockquote>\n<p>You can use this endpoint to set up a bi-directional sync between Braze and other email systems or your own database.</p>\n<blockquote>\n<p><strong>Note:</strong> You must provide an <code>end_date</code>, as well as either an <code>email</code> or a <code>start_date</code>. </p>\n</blockquote>\n<p>If your date range has more than <code>limit</code> number of unsubscribes, you will need to make multiple API calls, each time increasing the <code>offset</code> until a call returns either fewer than <code>limit</code> or zero results.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>email.unsubscribe</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request GET 'https://rest.iad-01.braze.com/email/unsubscribes?start_date=2020-01-01&amp;end_date=2020-02-01&amp;limit=1&amp;offset=1&amp;sort_direction=desc&amp;email=example@braze.com' \\\n--header 'Authorization: Bearer YOUR-API-KEY-HERE'\n\n</code></pre><h2 id=\"response\">Response</h2>\n<p>Entries are listed in descending order.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n  \"emails\": [\n    {\n      \"email\": \"example1@braze.com\",\n      \"unsubscribed_at\": \"2016-08-25 15:24:32 +0000\"\n    },\n    {\n      \"email\": \"example2@braze.com\",\n      \"unsubscribed_at\": \"2016-08-24 17:41:58 +0000\"\n    },\n    {\n      \"email\": \"example3@braze.com\",\n      \"unsubscribed_at\": \"2016-08-24 12:01:13 +0000\"\n    }\n  ],\n  \"message\": \"success\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["email","unsubscribes"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Optional*) String in YYYY-MM-DD format</p>\n<p>Start date of the range to retrieve unsubscribes, must be earlier than end_date. This is treated as midnight in UTC time by the API.</p>\n","type":"text/plain"},"key":"start_date","value":"2020-01-01"},{"description":{"content":"<p>(Optional*)  String in YYYY-MM-DD format</p>\n<p>End date of the range to retrieve unsubscribes. This is treated as midnight in UTC time by the API.</p>\n","type":"text/plain"},"key":"end_date","value":"2020-02-01"},{"description":{"content":"<p>(Optional) Integer</p>\n<p>Optional field to limit the number of results returned. Limit must be greater than 1. Defaults to 100, maximum is 500.</p>\n","type":"text/plain"},"key":"limit","value":"1"},{"description":{"content":"<p>(Optional) Integer </p>\n<p>Optional beginning point in the list to retrieve from.</p>\n","type":"text/plain"},"key":"offset","value":"1"},{"description":{"content":"<p>(Optional) String</p>\n<p>Pass in the value <code>asc</code> to sort unsubscribes from oldest to newest. Pass in <code>desc</code> to sort from newest to oldest. If sort_direction is not included, the default order is newest to oldest.</p>\n","type":"text/plain"},"key":"sort_direction","value":"desc"},{"description":{"content":"<p>(Optional*) String</p>\n<p>If provided, we will return whether or not the user has unsubscribed.</p>\n","type":"text/plain"},"key":"email","value":"example@braze.com"}],"variable":[]}},"response":[],"_postman_id":"d2966b81-188a-407b-ba7e-e6c252c44b4a"},{"name":"Change email subscription status","id":"be852462-0cda-4a48-b68b-85bd8a9f2147","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","type":"text","value":"Bearer {{api_key}}"}],"body":{"mode":"raw","raw":"{\n  \"email\": \"example@braze.com\",\n  \"subscription_state\": \"subscribed\"\n}"},"url":"https://{{instance_url}}/email/status","description":"<blockquote>\n<p>Use this endpoint to set the email subscription state for your users. Users can be <code>opted_in</code>, <code>unsubscribed</code>, or <code>subscribed</code> (not specifically opted in or out). </p>\n</blockquote>\n<p>You can set the email subscription state for an email address that is not yet associated with any of your users within Braze. When that email address is subsequently associated with a user, the email subscription state that you uploaded will be automatically set.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>email.status</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>email</code></td>\n<td>Required</td>\n<td>String or array</td>\n<td>String email address to modify, or an array of up to 50 email addresses to modify.</td>\n</tr>\n<tr>\n<td><code>subscription_state</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Either “subscribed”, “unsubscribed”, or “opted_in”.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["email","status"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"be852462-0cda-4a48-b68b-85bd8a9f2147"},{"name":"Remove hard bounced emails","id":"7b87a884-fa20-4085-b9f1-18363103575f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","type":"text","value":"Bearer {{api_key}}"}],"body":{"mode":"raw","raw":"{\n  \"email\": \"example@braze.com\"\n}"},"url":"https://{{instance_url}}/email/bounce/remove","description":"<blockquote>\n<p>Use this endpoint to remove email addresses from your Braze bounce list and bounce list maintained by your email provider. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>email.bounce.remove</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>email</code></td>\n<td>Required</td>\n<td>String or array</td>\n<td>String email address to modify, or an array of up to 50 email addresses to modify.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["email","bounce","remove"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"7b87a884-fa20-4085-b9f1-18363103575f"},{"name":"Remove email addresses from spam list","id":"1614a82f-510a-4c37-95a6-8207a125e487","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","type":"text","value":"Bearer {{api_key}}"}],"body":{"mode":"raw","raw":"{\n  \"email\": \"example@braze.com\"\n}"},"url":"https://{{instance_url}}/email/spam/remove","description":"<blockquote>\n<p>Use this endpoint to remove email addresses from your Braze spam list and spam list maintained by your email provider. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>email.spam.remove</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>email</code></td>\n<td>Required</td>\n<td>String or array</td>\n<td>String email address to modify, or an array of up to 50 email addresses to modify.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["email","spam","remove"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"1614a82f-510a-4c37-95a6-8207a125e487"},{"name":"Blocklist email addresses","id":"d51155a1-a6e8-4dcc-9f2b-88c54ab9e8c6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","type":"text","value":"application/json"},{"key":"Authorization","type":"text","value":"Bearer {{api_key}}"}],"body":{"mode":"raw","raw":"{\n  \"email\": [\"blocklist_email1\",\"blocklist_email2\"]\n}"},"url":"https://{{instance_url}}/email/blocklist","description":"<blockquote>\n<p>Use this endpoint to unsubscribe a user from email and mark them as hard bounced. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>email.blacklist</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>email</code></td>\n<td>Required</td>\n<td>String or array</td>\n<td>String email address to blacklist, or an array of up to 50 email addresses to blocklist.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["email","blocklist"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"d51155a1-a6e8-4dcc-9f2b-88c54ab9e8c6"},{"name":"Blacklist email addresses","id":"5044c082-6a15-452b-8dc1-7a0ba6b49cad","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","type":"text","value":"application/json"},{"key":"Authorization","type":"text","value":"Bearer {{api_key}}"}],"body":{"mode":"raw","raw":"{\n  \"email\": [\"blacklist_email1\",\"blacklist_email2\"]\n}"},"url":"https://{{instance_url}}/email/blacklist","description":"<blockquote>\n<p>Use this endpoint to unsubscribe a user from email and mark them as hard bounced. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>email.blacklist</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>email</code></td>\n<td>Required</td>\n<td>String or array</td>\n<td>String email address to blacklist, or an array of up to 50 email addresses to blocklist.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["email","blacklist"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"5044c082-6a15-452b-8dc1-7a0ba6b49cad"}],"id":"e4c30d01-354b-49db-8772-b86d64484600","description":"<p>Using this set of endpoints, you can update a user’s email subscription status, and use the Braze API to set up bi-directional sync between Braze and other email systems or your own database.</p>\n","_postman_id":"e4c30d01-354b-49db-8772-b86d64484600"},{"name":"Export","item":[{"name":"Campaign","item":[{"name":"Export campaign analytics","id":"c07b5ebd-0246-471e-b154-416d63ae28a1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/campaigns/data_series?campaign_id={{campaign_identifier}}&length=7&ending_at=2020-06-28T23:59:59-5:00","description":"<blockquote>\n<p>Use this endpoint to retrieve a daily series of various stats for a campaign over time. </p>\n</blockquote>\n<p>Data returned includes how many messages were sent, opened, clicked, or converted by messaging channel.</p>\n<blockquote>\n<p><strong>Note:</strong> If you are using our <a href=\"https://www.braze.com/docs/navigation\">older navigation</a>, <code>campaign_id</code> can be found at <strong>Developer Console &gt; API Settings</strong>. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>campaigns.data_series</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a rate limit of 50,000 requests per minute, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"responses\">Responses</h2>\n<h3 id=\"multichannel-response\">Multichannel response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n    \"message\": (required, string) the status of the export, returns 'success' when completed without errors,\n    \"data\" : [\n        {\n            \"time\" : (string) date as ISO 8601 date,\n            \"messages\" : {\n                \"ios_push\" : [\n                    {\n                      \"variation_name\": \"iOS_Push\",\n                      \"sent\" : (int),\n                      \"direct_opens\" : (int),\n                      \"total_opens\" : (int),\n                      \"bounces\" : (int),\n                      \"body_clicks\" : (int)\n                      \"revenue\": 0,\n                      \"unique_recipients\": 1,\n                      \"conversions\": 0,\n                      \"conversions_by_send_time\": 0,\n                      \"conversions1\": 0,\n                      \"conversions1_by_send_time\": 0,\n                      \"conversions2\": 0,\n                      \"conversions2_by_send_time\": 0,\n                      \"conversions3\": 0,\n                      \"conversions3_by_send_time\": 0,\n                      \"carousel_slide_[NUM]_[TITLE]_click\": (optional, int),\n                      \"notif_button_[NUM]_[TITLE]_click\": (optional, int)\n                    }\n                ],\n                \"android_push\" : [\n                    {\n                      \"sent\" : (int),\n                      \"direct_opens\" : (int),\n                      \"total_opens\" : (int),\n                      \"bounces\" : (int),\n                      \"body_clicks\" : (int)\n                    }\n                ],\n                \"webhook\": [\n                    {\n                      \"sent\": (int),\n                      \"errors\": (int)\n                    }\n                ],\n                \"email\" : [\n                    {\n                      \"sent\": (int),\n                      \"opens\": (int),\n                      \"unique_opens\": (int),\n                      \"clicks\": (int),\n                      \"unique_clicks\": (int),\n                      \"unsubscribes\": (int),\n                      \"bounces\": (int),\n                      \"delivered\": (int),\n                      \"reported_spam\": (int)\n                    }\n                ],\n                \"sms\" : [\n                  {\n                    \"sent\": (int),\n                    \"delivered\": (int),\n                    \"undelivered\": (int),\n                    \"delivery_failed\": (int)\n                  }\n                ]\n              },\n           \"conversions_by_send_time\": (optional, int),\n           \"conversions1_by_send_time\": (optional, int),\n           \"conversions2_by_send_time\": (optional, int),\n           \"conversions3_by_send_time\": (optional, int),\n           \"conversions\": (int),\n           \"conversions1\": (optional, int),\n           \"conversions2\": (optional, int),\n           \"conversions3\": (optional, int),\n           \"unique_recipients\": (int),\n           \"revenue\": (optional, float)\n        },\n        ...\n    ],\n    ...\n}\n\n</code></pre>\n<h3 id=\"multivariate-response\">Multivariate response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n    \"data\" : [\n        {\n            \"time\" : (string) date as ISO 8601 date,\n            \"conversions\" : (int),\n            \"revenue\": (float),\n            \"conversions_by_send_time\": (int),\n            \"messages\" : {\n               \"trigger_in_app_message\": [{\n                      \"variation_name\": (optional, string),\n                      \"impressions\": (int),\n                      \"clicks\": (int),\n                      \"first_button_clicks\": (int),\n                      \"second_button_clicks\": (int),\n                      \"revenue\": (optional, float),,\n                      \"unique_recipients\": (int),\n                      \"conversions\": (optional, int),\n                      \"conversions_by_send_time\": (optional, int),\n                      \"conversions1\": (optional, int),\n                      \"conversions1_by_send_time\": (optional, int),\n                      \"conversions2\": (optional, int),\n                      \"conversions2_by_send_time\": (optional, int),\n                      \"conversions3\": (optional, int),\n                      \"conversions3_by_send_time\": (optional, int)\n                  }, {\n                      \"variation_name\": (optional, string),\n                      \"impressions\": (int),\n                      \"clicks\": (int),\n                      \"first_button_clicks\": (int),\n                      \"second_button_clicks\": (int),\n                      \"revenue\": (optional, float),,\n                      \"unique_recipients\": (int),\n                      \"conversions\": (optional, int),\n                      \"conversions_by_send_time\": (optional, int),\n                      \"conversions1\": (optional, int),\n                      \"conversions1_by_send_time\": (optional, int),\n                      \"conversions2\": (optional, int),\n                      \"conversions2_by_send_time\": (optional, int),\n                      \"conversions3\": (optional, int).\n                      \"conversions3_by_send_time\": (optional, int)\n                  }, {\n                      \"variation_name\": (optional, string),\n                      \"revenue\": (optional, float),,\n                      \"unique_recipients\": (int),\n                      \"conversions\": (optional, int),\n                      \"conversions_by_send_time\": (optional, int),\n                      \"conversions1\": (optional, int),\n                      \"conversions1_by_send_time\": (optional, int),\n                      \"conversions2\": (optional, int),\n                      \"conversions2_by_send_time\": (optional, int),\n                      \"conversions3\": (optional, int),\n                      \"conversions3_by_send_time\": (optional, int),\n                      \"enrolled\": (optional, int)\n                  }]\n              },\n              \"conversions_by_send_time\": (optional, int),\n              \"conversions1_by_send_time\": (optional, int),\n              \"conversions2_by_send_time\": (optional, int),\n              \"conversions3_by_send_time\": (optional, int),\n              \"conversions\": (optional, int,\n              \"conversions1\": (optional, int),\n              \"conversions2\": (optional, int),\n              \"conversions3\": (optional, int),\n              \"unique_recipients\": (int),\n              \"revenue\": (optional, float)\n         }],\n         ...\n}\n\n</code></pre>\n<p>Possible message types are <code>email</code>, <code>in_app_message</code>, <code>webhook</code>, <code>android_push</code>, ios_push, <code>kindle_push</code>, <code>web_push</code>. All push message types will have the same statistics shown for <code>android_push</code>.</p>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["campaigns","data_series"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) String</p>\n<p>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">campaign API identifier</a>.</p>\n<p>The <code>campaign_id</code> for API campaigns can be found at <strong>Settings &gt; Setup and Testing &gt; API Keys</strong> and the <strong>Campaign Details</strong> page within your dashboard, or you can use the <a href=\"https://www.braze.com/docs/api/endpoints/export/campaigns/get_campaigns/\">List campaigns endpoint</a>.</p>\n","type":"text/plain"},"key":"campaign_id","value":"{{campaign_identifier}}"},{"description":{"content":"<p>(Required) Integer</p>\n<p>Max number of days before <code>ending_at</code> to include in the returned series. Must be between 1 and 100 (inclusive).</p>\n","type":"text/plain"},"key":"length","value":"7"},{"description":{"content":"<p>(Optional) Datetime (<a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> string)</p>\n<p>Date on which the data series should end. Defaults to time of the request.</p>\n","type":"text/plain"},"key":"ending_at","value":"2020-06-28T23:59:59-5:00"}],"variable":[]}},"response":[],"_postman_id":"c07b5ebd-0246-471e-b154-416d63ae28a1"},{"name":"Export campaign details","id":"aad2a811-7237-43b1-9d64-32042eabecd9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/campaigns/details?campaign_id={{campaign_identifier}}","description":"<blockquote>\n<p>Use this endpoint to retrieve relevant information on a specified campaign, which can be identified by the <code>campaign_id</code>. </p>\n</blockquote>\n<p>If you want to retrieve Canvas data, refer to the <a href=\"https://www.braze.com/docs/api/endpoints/export/canvas/get_canvas_details/\">Canvas Details</a> endpoint.</p>\n<blockquote>\n<p><strong>Note:</strong> If you are using our <a href=\"https://www.braze.com/docs/navigation\">older navigation</a>, <code>campaign_id</code> can be found at <strong>Developer Console</strong> &gt; <strong>API Settings</strong> </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an API key with the <code>campaign.details</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"responses\">Responses</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"message\": (required, string) the status of the export, returns 'success' when completed without errors,\n    \"created_at\" : (string) the date created as ISO 8601 date,\n    \"updated_at\" : (string) the date last updated as ISO 8601 date,\n    \"archived\": (boolean) whether this campaign is archived,\n    \"draft\": (boolean) whether this campaign is a draft,\n    \"enabled\": (boolean) whether this campaign is active or not,\n    \"has_post_launch_draft\": (boolean) whether this campaign has a post-launch draft,\n    \"name\" : (string) the campaign name,\n    \"description\" : (string) the campaign description,\n    \"schedule_type\" : (string) the type of scheduling action,\n    \"channels\" : (array) the list of channels to send via,\n    \"first_sent\" : (string) the date and hour of first sent as ISO 8601 date,\n    \"last_sent\" : (string) the date and hour of last sent as ISO 8601 date,\n    \"tags\" : (array) the tag names associated with the campaign,\n    \"teams\" : (array) the names of the Teams associated with the campaign,\n    \"messages\": {\n        \"message_variation_id\": (string) { // &lt;=This is the actual id\n            \"channel\": (string) the channel type of the message, must be either email, ios_push, webhook, content_card, in-app_message, or sms,\n            \"name\": (string) the name of the message in the dashboard (for example, \"Variation 1\"),\n            \"has_translatable_content\": (boolean) whether the message has translatable content (only present if `include_has_translatable_content` is true); `true` if locales are configured and the message contains at least one translation tag; `false` if no locales are configured or no translation tags detected; `null` if detection could not be completed,\n            ... channel-specific fields for this message, see the following messages section ...\n        }\n    },\n    \"conversion_behaviors\": (array) the conversion event behaviors assigned to the campaign, see the following conversions behavior section.\n}\n\n</code></pre>\n<h3 id=\"messages-by-channel\">Messages by channel</h3>\n<p>The <code>messages</code> response will contain information about each message. The following includes example message responses for each channel:</p>\n<h4 id=\"push\">Push</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"channel\": (string) description of the channel, such as \"ios_push\" or \"android_push\"\n    \"alert\": (string) alert body text,\n    \"extras\": (hash) any key value pairs provided\n}\n\n</code></pre>\n<h4 id=\"email\">Email</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"channel\": \"email\",\n    \"subject\": (string) subject,\n    \"body\": (string) HTML body,\n    \"from\": (string) from address and display name,\n    \"reply_to\": (string) reply-to for message, if different than \"from\" address,\n    \"title\": (string) name of the email,\n    \"extras\": (hash) any key value pairs provided\n}\n\n</code></pre>\n<h4 id=\"in-app-message\">In-app message</h4>\n<p>The response format depends on the type of in-app message. Survey in-app messages return <code>type</code> and <code>data</code> fields. Other in-app message types (slideup, modal, and fullscreen) return <code>name</code>, <code>message</code>, and <code>extras</code> fields.</p>\n<h5 id=\"surveys\">Surveys</h5>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"type\": (string) description of in-app message type, such as \"survey\",\n    \"data\": {\n        \"pages\": [\n            {\n                \"header\": \n                    {\n                         \"text\":(string) display text for the header of the survey,\n                    }\n                \"choices\": [\n                    {\n                       \"choice_id\": (string) choice identifier,\n                       \"text\": (string) display text, \n                       \"custom_attribute_key\": (string) custom attribute key, \n                       \"custom_attribute_value\": (sting) custom attribute value,\n                       \"deleted\": (boolean) deleted from live campaign, \n                    },\n                    ...\n                ]\n            }\n        ]\n    }\n}\n\n</code></pre>\n<h5 id=\"slideup-modal-fullscreen-in-app-messages\">Slideup, modal, fullscreen in-app messages</h5>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"channel\": \"in_app_message\",\n    \"name\": (string) the name of the variant,\n    \"message\": (string, optional) the body text,\n    \"extras\": (hash, optional) any key-value pairs provided; only present if at least one key-value pair has been set\n}\n\n</code></pre>\n<h4 id=\"content-card\">Content Card</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"channel\": \"content_cards\",\n    \"name\": (string) name of variant,\n    \"extras\": (hash) any key value pairs provided; only present if at least one key-value pair has been set\n}\n\n</code></pre>\n<h4 id=\"webhook\">Webhook</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"channel\": \"webhook\",\n    \"url\": (string) url for webhook,\n    \"body\": (string) payload body,\n    \"type\": (string) body content type,\n    \"headers\": (hash) specified request headers,\n    \"method\": (string) HTTP method (e.g., \"POST\" or \"GET\"),\n}\n\n</code></pre>\n<h4 id=\"sms\">SMS</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"channel\": \"sms\",\n  \"body\": (string) payload body,\n  \"from\": (string) list of numbers associated with the subscription group,\n  \"subscription_group_id\": (string) API id of the subscription group targeted in the SMS message\n}\n\n</code></pre>\n<h4 id=\"whatsapp\">WhatsApp</h4>\n<h5 id=\"template-messages\">Template messages</h5>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"channel\": \"whats_app\",\n  \"subscription_group_id\": (string) the API ID of the subscription group selected in the WhatsApp message\n  \"from\": (array) the list of strings of the numbers associated with the subscription group,\n  \"template_name\": (string) the name of the WhatsApp template being sent,\n  \"template_language_code\": (string) the language code of the WhatsApp template being sent,\n  \"header_variables\": (array) the list of strings, if present, of Liquid variables being inserted into header of WhatsApp template being sent,\n  \"body_variables\": (array) the list of strings, if present, of Liquid variables being inserted into body of WhatsApp template being sent,\n  \"button_variables\": (array) the list of strings, if present, of Liquid variables being inserted into buttons of WhatsApp template being sent\n}\n\n</code></pre>\n<h5 id=\"response-messages\">Response messages</h5>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"channel\": \"whats_app\",\n  \"subscription_group_id\": (string) the API ID of the subscription group selected in the WhatsApp message,\n  \"from\": (array) list of strings of the numbers associated with the subscription group,\n  \"layout\": (string) the name of the WhatsApp template being sent (text or media or quick-reply),\n  \"header_text\": (string, optional) the text, if present, of the header of the message being sent,\n  \"body_text\": (string, optional) the text, if present, of the body of the message being sent,\n  \"footer_text\": (string, optional) the text, if present, of the footer of the message being sent,\n  \"buttons\": (array) list of button objects in the message being sent ({\"text\": (string) the text of the button})\n}\n\n</code></pre>\n<h4 id=\"control-messages\">Control messages</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"channel\": (string) description of the channel that the control is for,\n    \"type\": \"control\"\n}\n\n</code></pre>\n<h3 id=\"conversion-behaviors\">Conversion behaviors</h3>\n<p>The <code>conversion_behaviors</code> array will contain information about each conversion event behavior set for the campaign. These behaviors are in order as set by the campaign. For example, Conversion Event A will be the first item in the array, Conversion Event B will be second, etc. The following lists example conversion event behavior responses:</p>\n<h4 id=\"clicks-email\">Clicks email</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"type\": \"Clicks Email\",\n    \"window\": (integer) number of seconds during which the user can convert on this event, i.e. - 86400, which is 24 hours\n}\n\n</code></pre>\n<h4 id=\"opens-email\">Opens email</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"type\": \"Opens Email\",\n    \"window\": (integer) number of seconds during which the user can convert on this event, i.e. - 86400, which is 24 hours\n}\n\n</code></pre>\n<h4 id=\"makes-purchase-any-purchase\">Makes purchase (any purchase)</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"type\": \"Makes Any Purchase\",\n    \"window\": (integer) number of seconds during which the user can convert on this event, i.e. - 86400, which is 24 hours\n}\n\n</code></pre>\n<h4 id=\"makes-purchase-specific-product\">Makes purchase (specific product)</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"type\": \"Makes Specific Purchase\",\n    \"window\": (integer) number of seconds during which the user can convert on this event, i.e. - 86400, which is 24 hours,\n    \"product\": (string) name of the product, i.e. - \"Feline Body Armor\"\n}\n\n</code></pre>\n<h4 id=\"performs-custom-event\">Performs custom event</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"type\": \"Performs Custom Event\",\n    \"window\": (integer) number of seconds during which the user can convert on this event, i.e. - 86400, which is 24 hours,\n    \"custom_event_name\": (string) name of the event, i.e. - \"Used Feline Body Armor\"\n}\n\n</code></pre>\n<h4 id=\"upgrades-app\">Upgrades app</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"type\": \"Upgrades App\",\n    \"window\": (integer) number of seconds during which the user can convert on this event, i.e. - 86400, which is 24 hours,\n    \"app_ids\": (array|null) array of app ids, i.e. - [\"12345\", \"67890\"], or `null` if \"Track sessions for any app\" is selected in the UI\n}\n\n</code></pre>\n<h4 id=\"uses-app\">Uses app</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"type\": \"Starts Session\",\n    \"window\": (integer) number of seconds during which the user can convert on this event, i.e. - 86400, which is 24 hours,\n    \"app_ids\": (array|null) array of app ids, i.e. - [\"12345\", \"67890\"], or `null` if \"Track sessions for any app\" is selected in the UI\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["campaigns","details"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) String</p>\n<p>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">campaign API identifier</a>.</p>\n<p>The <code>campaign_id</code> for API campaigns can be found on the <strong>Settings &gt; Setup and Testing &gt; API Keys</strong> and the campaign details page within your dashboard, or you can use the <a href=\"https://www.braze.com/docs/api/endpoints/export/campaigns/get_campaign_analytics/#campaign-list-endpoint\">Campaign List Endpoint</a>.</p>\n","type":"text/plain"},"key":"campaign_id","value":"{{campaign_identifier}}"},{"disabled":true,"description":{"content":"<p>(Optional) Boolean</p>\n","type":"text/plain"},"key":"post_launch_draft_version","value":null},{"disabled":true,"description":{"content":"<p>(Optional) Boolean</p>\n","type":"text/plain"},"key":"include_has_translatable_content","value":null}],"variable":[]}},"response":[],"_postman_id":"aad2a811-7237-43b1-9d64-32042eabecd9"},{"name":"Export campaign list","id":"f3b0b3ef-04fb-4a31-8570-e6ad88dacb18","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/campaigns/list?page=0&include_archived=false&sort_direction=desc&last_edit.time[gt]=2020-06-28T23:59:59-5:00","description":"<blockquote>\n<p>Use this endpoint to export a list of campaigns, each of which will include its name, campaign API identifier, whether it is an API campaign, and tags associated with the campaign. </p>\n</blockquote>\n<p>The campaigns are returned in groups of 100 sorted by time of creation (oldest to newest by default).</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an API key with the <code>campaigns.list</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"campaign-list-endpoint-api-response\">Campaign list endpoint API response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n    \"message\": (required, string) the status of the export, returns 'success' when completed without errors,\n    \"campaigns\" : [\n        {\n            \"id\" : (string) Campaign API Identifier,\n            \"last_edited\": (ISO 8601 string) the last edited time for the message \n            \"name\" : (string) campaign name,\n            \"is_api_campaign\" : (boolean) whether the campaign is an API Campaign,\n            \"tags\" : (array) tag names associated with the campaign\n        },\n        ...\n    ]\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["campaigns","list"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Optional) Integer</p>\n<p>The page of campaigns to return, defaults to 0 (returns the first set of up to 100).</p>\n","type":"text/plain"},"key":"page","value":"0"},{"description":{"content":"<p>(Optional) Boolean</p>\n<p>Whether or not to include archived campaigns, defaults to false.</p>\n","type":"text/plain"},"key":"include_archived","value":"false"},{"description":{"content":"<p>(Optional) String</p>\n<ul>\n<li>Sort creation time from newest to oldest: pass in the value <code>desc</code>.</li>\n<li>Sort creation time from oldest to newest: pass in the value <code>asc</code>.</li>\n</ul>\n<p>If <code>sort_direction</code> is not included, the default order is oldest to newest.</p>\n","type":"text/plain"},"key":"sort_direction","value":"desc"},{"description":{"content":"<p>(Optional) Datetime (<a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> string)</p>\n<p>Filters the results and only returns campaigns that were edited greater than the time provided till now. Format is <code>yyyy-MM-DDTHH:mm:ss</code>.</p>\n","type":"text/plain"},"key":"last_edit.time[gt]","value":"2020-06-28T23:59:59-5:00"}],"variable":[]}},"response":[],"_postman_id":"f3b0b3ef-04fb-4a31-8570-e6ad88dacb18"},{"name":"Export send analytics","id":"76f822a8-a13b-4bfb-b20e-72b5013dfe86","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/sends/data_series?campaign_id={{campaign_identifier}}&send_id={{send_identifier}}&length=30&ending_at=2014-12-10T23:59:59-05:00","description":"<blockquote>\n<p>Use this endpoint to retrieve a daily series of various stats for a tracked <code>send_id</code> for API campaigns. </p>\n</blockquote>\n<p>Braze stores send analytics for 14 days after the send. Campaign conversions will be attributed toward the most recent <code>send_id</code> that a given user has received from the campaign.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>This endpoint is for API campaigns only. To use this endpoint, you'll need an <a href=\"https://www.braze.com/docs/api/basics#rest-api-key/\">API key</a> with the <code>sends.data_series</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"response\">Response</h2>\n<h3 id=\"send-analytics-endpoint-api-response\">Send analytics endpoint API response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n            \"variation_name\": (string) variation name,\n            \"sent\": (int) the number of sends,\n            \"delivered\": (int) the number of messages successfully delivered,\n            \"undelivered\": (int) the number of undelivered,\n            \"delivery_failed\": (int) the number of rejected,\n            \"direct_opens\": (int) the number of direct opens,\n            \"total_opens\": (int) the number of total opens,\n            \"bounces\": (int) the number of bounces,\n            \"body_clicks\": (int) the number of body clicks,\n            \"revenue\": (float) the number of dollars of revenue (USD),\n            \"unique_recipients\": (int) the number of unique recipients,\n            \"conversions\": (int) the number of conversions,\n            \"conversions_by_send_time\": (int) the number of conversions,\n            \"conversions1\": (int, optional) the number of conversions for the second conversion event,\n            \"conversions1_by_send_time\": (int, optional) the number of conversions for the second conversion event by send time,\n            \"conversions2\": (int, optional) the number of conversions for the third conversion event,\n            \"conversions2_by_send_time\": (int, optional) the number of conversions for the third conversion event by send time,\n            \"conversions3\": (int, optional) the number of conversions for the fourth conversion event,\n            \"conversions3_by_send_time\": (int, optional) the number of conversions for the fourth conversion event by send time\n          }\n        ]\n      },\n      \"conversions_by_send_time\": 0,\n      \"conversions1_by_send_time\": 0,\n      \"conversions2_by_send_time\": 0,\n      \"conversions3_by_send_time\": 0,\n      \"conversions\": 0,\n      \"conversions1\": 0,\n      \"conversions2\": 0,\n      \"conversions3\": 0,\n      \"unique_recipients\": 1,\n      \"revenue\": 0\n    }\n  ],\n  \"message\": \"success\"\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["sends","data_series"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) String</p>\n<p>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">Campaign API identifier</a>.</p>\n","type":"text/plain"},"key":"campaign_id","value":"{{campaign_identifier}}"},{"description":{"content":"<p>(Required) String</p>\n<p>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">Send API identifier</a>.</p>\n","type":"text/plain"},"key":"send_id","value":"{{send_identifier}}"},{"description":{"content":"<p>(Required) Integer</p>\n<p>Max number of days before <code>ending_at</code> to include in the returned series. Must be between 1 and 100 (inclusive).</p>\n","type":"text/plain"},"key":"length","value":"30"},{"description":{"content":"<p>(Optional) Datetime (<a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> string)</p>\n<p>Date on which the data series should end. Defaults to time of the request.</p>\n","type":"text/plain"},"key":"ending_at","value":"2014-12-10T23:59:59-05:00"}],"variable":[]}},"response":[],"_postman_id":"76f822a8-a13b-4bfb-b20e-72b5013dfe86"}],"id":"5cbed14c-dca8-4af6-abf1-dc5144bc48f5","_postman_id":"5cbed14c-dca8-4af6-abf1-dc5144bc48f5","description":""},{"name":"Canvas","item":[{"name":"Export Canvas data series analytics","id":"0fd61e93-7edf-4d87-a8dc-052420aefb73","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/canvas/data_series?canvas_id={{canvas_id}}&ending_at=2018-05-30T23:59:59-5:00&starting_at=2018-05-28T23:59:59-5:00&length=10&include_variant_breakdown=true&include_step_breakdown=true&include_deleted_step_data=true","description":"<blockquote>\n<p>Use this endpoint to export time series data for a Canvas. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an API key with the <code>canvas.data_series</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n  \"data\": {\n    \"name\": (string) Canvas name,\n    \"stats\": [\n      {\n        \"time\": (string) date as ISO 8601 date,\n        \"total_stats\": {\n          \"revenue\": (float),\n          \"conversions\": (int),\n          \"conversions_by_entry_time\": (int),\n          \"entries\": (int)\n        },\n        \"variant_stats\": (optional) {\n          \"00000000-0000-0000-0000-0000000000000\": (API identifier for variant) {\n            \"name\": (string) name of variant,\n            \"revenue\": (int),\n            \"conversions\": (int),\n            \"conversions_by_entry_time\": (int),\n            \"entries\": (int)\n          },\n          ... (more variants)\n        },\n        \"step_stats\": (optional) {\n          \"00000000-0000-0000-0000-0000000000000\": (API identifier for step) {\n            \"name\": (string) name of step,\n            \"revenue\": (float),\n            \"conversions\": (int),\n            \"conversions_by_entry_time\": (int),\n            \"messages\": {\n              \"email\": [\n                {\n                  \"sent\": (int),\n                  \"opens\": (int),\n                  \"unique_opens\": (int),\n                  \"clicks\": (int),\n                  ... (more stats)\n                }\n              ],\n              ... (more channels)\n            }\n          },\n          ... (more steps)\n        }\n      },\n      ... (more stats by time)\n    ]\n  },\n  \"message\": (required, string) the status of the export, returns 'success' when completed without errors\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["canvas","data_series"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) String</p>\n<p>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">Canvas API Identifier</a>.</p>\n","type":"text/plain"},"key":"canvas_id","value":"{{canvas_id}}"},{"description":{"content":"<p>(Required) Datetime (<a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> string)</p>\n<p>Date on which the data export should end. Defaults to time of the request.</p>\n","type":"text/plain"},"key":"ending_at","value":"2018-05-30T23:59:59-5:00"},{"description":{"content":"<p>(Optional*) Datetime (<a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> string) </p>\n<p>Date on which the data export should begin.</p>\n<p>*Either <code>length</code> or <code>starting_at</code> is required.</p>\n","type":"text/plain"},"key":"starting_at","value":"2018-05-28T23:59:59-5:00"},{"description":{"content":"<p>(Optional*) String</p>\n<p>Maximum number of days before <code>ending_at</code> to include in the returned series. Must be between 1 and 14 (inclusive).</p>\n<p>*Either <code>length</code> or <code>starting_at</code> is required.</p>\n","type":"text/plain"},"key":"length","value":"10"},{"description":{"content":"<p>(Optional) Boolean</p>\n<p>Whether or not to include variant stats (defaults to false).</p>\n","type":"text/plain"},"key":"include_variant_breakdown","value":"true"},{"description":{"content":"<p>(Optional) Boolean</p>\n<p>Whether or not to include step stats (defaults to false).</p>\n","type":"text/plain"},"key":"include_step_breakdown","value":"true"},{"description":{"content":"<p>(Optional) Boolean</p>\n<p>Whether or not to include step stats for deleted steps (defaults to false).</p>\n","type":"text/plain"},"key":"include_deleted_step_data","value":"true"}],"variable":[]}},"response":[],"_postman_id":"0fd61e93-7edf-4d87-a8dc-052420aefb73"},{"name":"Export Canvas data analytics summary","id":"1eb1b760-6b00-4c03-bcfb-12646f2ba6da","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","type":"text","value":"Bearer {{api_key}}"}],"url":"https://{{instance_url}}/canvas/data_summary?canvas_id={{canvas_id}}&ending_at=2018-05-30T23:59:59-5:00&starting_at=2018-05-28T23:59:59-5:00&length=5&include_variant_breakdown=true&include_step_breakdown=true&include_deleted_step_data=true","description":"<blockquote>\n<p>Use this endpoint to export rollups of time series data for a Canvas, providing a concise summary of a Canvas’ results. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>canvas.data_summary</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n  \"data\": {\n    \"name\": (string) Canvas name,\n    \"total_stats\": {\n      \"revenue\": (float),\n      \"conversions\": (int),\n      \"conversions_by_entry_time\": (int),\n      \"entries\": (int)\n    },\n    \"variant_stats\": (optional) {\n      \"00000000-0000-0000-0000-0000000000000\": (API identifier for variant) {\n        \"name\": (string) name of variant,\n        \"revenue\": (float),\n        \"conversions\": (int),\n        \"entries\": (int)\n      },\n      ... (more variants)\n    },\n    \"step_stats\": (optional) {\n      \"00000000-0000-0000-0000-0000000000000\": (API identifier for step) {\n        \"name\": (string) name of step,\n        \"revenue\": (float),\n        \"conversions\": (int),\n        \"conversions_by_entry_time\": (int),\n        \"messages\": {\n          \"android_push\": (name of channel) [\n            {\n              \"sent\": (int),\n              \"opens\": (int),\n              \"influenced_opens\": (int),\n              \"bounces\": (int)\n              ... (more stats for channel)\n            }\n          ],\n          ... (more channels)\n        }\n      },\n      ... (more steps)\n    }\n  },\n  \"message\": (required, string) the status of the export, returns 'success' when completed without errors\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://desktop.postman.com/?desktopVersion=9.19.0&amp;userId=16580579&amp;teamId=409325\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["canvas","data_summary"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) String </p>\n<p>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">Canvas API identifier</a>.</p>\n","type":"text/plain"},"key":"canvas_id","value":"{{canvas_id}}"},{"description":{"content":"<p>(Required) Datetime (<a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> string)\nDate on which the data export should end. Defaults to time of the request</p>\n","type":"text/plain"},"key":"ending_at","value":"2018-05-30T23:59:59-5:00"},{"description":{"content":"<p>(Optional*) Datetime (<a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> string)</p>\n<p>Date on which the data export should begin.</p>\n<p>*Either <code>length</code> or <code>starting_at</code> is required.</p>\n","type":"text/plain"},"key":"starting_at","value":"2018-05-28T23:59:59-5:00"},{"description":{"content":"<p>(Optional*) Integer</p>\n<p>Max number of days before <code>ending_at</code> to include in the returned series. Must be between 1 and 14 (inclusive).</p>\n<p>*Either <code>length</code> or <code>starting_at</code> is required.</p>\n","type":"text/plain"},"key":"length","value":"5"},{"description":{"content":"<p>(Optional) Boolean</p>\n<p>Whether or not to include variant stats (defaults to false).</p>\n","type":"text/plain"},"key":"include_variant_breakdown","value":"true"},{"description":{"content":"<p>(Optional) Boolean</p>\n<p>Whether or not to include step stats (defaults to false).</p>\n","type":"text/plain"},"key":"include_step_breakdown","value":"true"},{"description":{"content":"<p>(Optional) Boolean</p>\n<p>Whether or not to include step stats for deleted steps (defaults to false).</p>\n","type":"text/plain"},"key":"include_deleted_step_data","value":"true"}],"variable":[]}},"response":[],"_postman_id":"1eb1b760-6b00-4c03-bcfb-12646f2ba6da"},{"name":"Export Canvas details","id":"5188873c-13a3-4aaf-a54b-9fa1daeac5f8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/canvas/details?canvas_id={{canvas_identifier}}","description":"<blockquote>\n<p>Use this endpoint to export metadata about a Canvas, such as the name, time created, current status, and more. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>canvas.details</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"response\">Response</h2>\n<blockquote>\n<p><strong>Note:</strong> All Canvas steps have a next_paths field, which is an array of <code>{name, next_step_id}</code> data. For full steps and Message steps, the <code>next_step_ids</code> field will be present, but will not contain data for other Canvas Flow steps. </p>\n</blockquote>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"created_at\": (string) the date created as ISO 8601 date,\n  \"updated_at\": (string) the date updated as ISO 8601 date,\n  \"name\": (string) the Canvas name,\n  \"description\": (string) the Canvas description,\n  \"archived\": (boolean) whether this Canvas is archived,\n  \"draft\": (boolean) whether this Canvas is a draft,\n  \"enabled\": (boolean) whether this Canvas is active or not,\n  \"has_post_launch_draft\": (boolean) whether this Canvas has a post-launch draft,\n  \"schedule_type\": (string) the type of scheduling action,\n  \"first_entry\": (string) the date of first entry as ISO 8601 date,\n  \"last_entry\": (string) the date of last entry as ISO 8601 date,\n  \"channels\": (array of strings) step channels used with Canvas,\n  \"variants\": [\n    {\n      \"name\": (string) the name of variant,\n      \"id\": (string) the API identifier of the variant,\n      \"first_step_ids\": (array of strings) the API identifiers for first steps in variant,\n      \"first_step_id\": (string) the API identifier of first step in variant (deprecated in November 2017, only included if the variant has only one first step)\n    },\n    ... (more variations)\n  ],\n  \"tags\": (array of strings) the tag names associated with the Canvas,\n  \"teams\" : (array) the names of the Teams associated with the Canvas,\n  \"steps\": [\n    {\n      \"name\": (string) the name of step,\n      \"type\" (string) the type of Canvas component,\n      \"id\": (string) the API identifier of the step,\n      \"next_step_ids\": (array of strings) IDs for next steps that are full steps or Message steps,\n      \"next_paths\": { (array of objects)\n      // for Decision Splits, this property should evaluate to \"Yes\" or \"No\"\n      // for Audience Path and Action Paths, this property should evaluate to the group name\n      // for Experiment Paths, this property should evaluate to the path name\n      // for other steps, this property should evaluate to \"null\"\n        \"name\": (string) name the name of step,\n        \"next_step_id\": (string) IDs for next steps that are full steps or Message steps,\n        }\n      \"channels\": (array of strings) the channels used in step,\n      \"messages\": {\n          \"message_variation_id\": (string) {  // &lt;=This is the actual id\n              \"channel\": (string) the channel type of the message (for example, \"email\"),\n              \"has_translatable_content\": (boolean) whether the message has translatable content (only present if `include_has_translatable_content` is true); `true` if locales are configured and the message contains at least one translation tag; `false` if no locales are configured or no translation tags detected; `null` if detection could not be completed,\n              // channel-specific fields for this message, see Campaign Details endpoint API Response for example message responses\n          }\n      }\n    },\n    ... (more steps)\n  ],\n  \"message\": (required, string) the status of the export, returns 'success' when completed without errors\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://desktop.postman.com/?desktopVersion=9.19.0&amp;userId=16580579&amp;teamId=409325\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["canvas","details"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) String</p>\n<p>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">Canvas API Identifier</a> </p>\n","type":"text/plain"},"key":"canvas_id","value":"{{canvas_identifier}}"},{"disabled":true,"description":{"content":"<p>(Optional) Boolean</p>\n","type":"text/plain"},"key":"post_launch_draft_version","value":null},{"disabled":true,"description":{"content":"<p>(Optional) Boolean</p>\n","type":"text/plain"},"key":"include_has_translatable_content","value":null}],"variable":[]}},"response":[],"_postman_id":"5188873c-13a3-4aaf-a54b-9fa1daeac5f8"},{"name":"Export Canvas list","id":"e6c150d7-fceb-4b10-91e2-a9ca4d5806d1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/canvas/list?page=1&include_archived=false&sort_direction=desc&last_edit.time[gt]=2020-06-28T23:59:59-5:00","description":"<blockquote>\n<p>Use this endpoint to export a list of Canvases, including the name, Canvas API identifier and associated tags. </p>\n</blockquote>\n<p>Canvases are returned in groups of 100 sorted by time of creation (oldest to newest by default).</p>\n<p>Archived Canvases will not be included in the API response unless the <code>include_archived</code> field is specified. Canvases that are stopped but not archived, however, will be returned by default.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>canvas.list</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n  \"canvases\" : [\n      {\n          \"id\" : (string) Canvas API Identifier,\n          \"last_edited\": (ISO 8601 string) the last edited time for the message,\n          \"name\" : (string) Canvas name,\n          \"tags\" : (array) tag names associated with the Canvas,\n      },\n    ... (more Canvases)\n  ],\n  \"message\": (required, string) the status of the export, returns 'success' when completed without errors\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://desktop.postman.com/?desktopVersion=9.19.0&amp;userId=16580579&amp;teamId=409325\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["canvas","list"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Optional) Integer</p>\n<p>The page of Canvases to return, defaults to <code>0</code> (returns the first set of up to 100).</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>(Optional) Boolean</p>\n<p>Whether or not to include archived Canvases, defaults to <code>false</code>.</p>\n","type":"text/plain"},"key":"include_archived","value":"false"},{"description":{"content":"<p>(Optional) String</p>\n<ul>\n<li>Sort creation time from newest to oldest: pass in the value <code>desc</code>.</li>\n<li>Sort creation time from oldest to newest: pass in the value <code>asc</code>.</li>\n</ul>\n<p>If <code>sort_direction</code> is not included, the default order is oldest to newest.</p>\n","type":"text/plain"},"key":"sort_direction","value":"desc"},{"description":{"content":"<p>(Optional) Datetime (<a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> string)</p>\n<p>Filters the results and only returns Canvases that were edited greater than the time provided till now. Format is <code>yyyy-MM-DDTHH:mm:ss</code>.</p>\n","type":"text/plain"},"key":"last_edit.time[gt]","value":"2020-06-28T23:59:59-5:00"}],"variable":[]}},"response":[],"_postman_id":"e6c150d7-fceb-4b10-91e2-a9ca4d5806d1"}],"id":"8422c426-842f-4f2d-b79b-e4e71384081d","_postman_id":"8422c426-842f-4f2d-b79b-e4e71384081d","description":""},{"name":"Custom Events","item":[{"name":"Export custom events list","id":"93ecd8a5-305d-4b72-ae33-2d74983255c1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/events/list?page=3","description":"<blockquote>\n<p>Use this endpoint to export a list of custom events that have been recorded for your app. The event names are returned in groups of 250, sorted alphabetically. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>events.list</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>For customers who onboarded with Braze on or after September 16, 2021, we apply a shared rate limit of 1,000 requests per hour to this endpoint. This rate limit is shared with the <code>/purchases/product_list</code> endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n    \"message\": (required, string) the status of the export, returns 'success' when completed without errors,\n    \"events\" : [\n        \"Event A\", (string) the event name,\n        \"Event B\", (string) the event name,\n        \"Event C\", (string) the event name,\n        ...\n    ]\n}\n\n</code></pre>\n<h3 id=\"fatal-error-response-codes\">Fatal error response codes</h3>\n<p>For status codes and associated error messages that will be returned if your request encounters a fatal error, reference <a href=\"https://www.braze.com/docs/api/errors/#fatal-errors\">Fatal errors &amp; responses</a>.</p>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["events","list"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Optional) Integer</p>\n<p>The page of event names to return, defaults to 0 (returns the first set of up to 250).</p>\n","type":"text/plain"},"key":"page","value":"3"}],"variable":[]}},"response":[],"_postman_id":"93ecd8a5-305d-4b72-ae33-2d74983255c1"},{"name":"Export custom events analytics","id":"0bd1ab63-d1a5-4301-8d17-246cf24a178c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/events/data_series?event=event_name&length=24&unit=hour&ending_at=2014-12-10T23:59:59-05:00&app_id={{app_identifier}}&segment_id={{segment_identifier}}","description":"<blockquote>\n<p>Use this endpoint to retrieve a series of the number of occurrences of a custom event in your app over a designated time period. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>events.data_series</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n    \"message\": (required, string) the status of the export, returns 'success' when completed without errors,\n    \"data\" : [\n        {\n            \"time\" : (string) point in time - as ISO 8601 extended when unit is \"hour\" and as ISO 8601 date when unit is \"day\",\n            \"count\" : (int)\n        },\n        ...\n    ]\n}\n\n</code></pre>\n<h3 id=\"fatal-error-response-codes\">Fatal error response codes</h3>\n<p>For status codes and associated error messages that will be returned if your request encounters a fatal error, reference <a href=\"https://www.braze.com/docs/api/errors/#fatal-errors\">Fatal errors &amp; responses</a>.</p>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["events","data_series"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) String</p>\n<p>The name of the custom event for which to return analytics. </p>\n","type":"text/plain"},"key":"event","value":"event_name"},{"description":{"content":"<p>(Required) Integer</p>\n<p>Maximum number of units (days or hours) before <code>ending_at</code> to include in the returned series. Must be between 1 and 100 (inclusive).</p>\n","type":"text/plain"},"key":"length","value":"24"},{"description":{"content":"<p>(Optional) String</p>\n<p>Unit of time between data points - can be <code>day</code> or <code>hour</code>, defaults to <code>day</code>.</p>\n","type":"text/plain"},"key":"unit","value":"hour"},{"description":{"content":"<p>(Optional) Datetime (<a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> string)</p>\n<p>Date on which the data series should end. Defaults to time of the request.</p>\n","type":"text/plain"},"key":"ending_at","value":"2014-12-10T23:59:59-05:00"},{"description":{"content":"<p>(Optional) String</p>\n<p>App API identifier retrieved from the <a href=\"https://www.braze.com/docs/user_guide/administrative/app_settings/api_settings_tab/\">API Keys</a> page to limit analytics to a specific app.</p>\n<p>Note: If you are using our <a href=\"https://www.braze.com/docs/navigation\">older navigation</a>, <code>app_id</code> can be found at <strong>Developer Console</strong> &gt; <strong>API Settings</strong></p>\n","type":"text/plain"},"key":"app_id","value":"{{app_identifier}}"},{"description":{"content":"<p>(Optional) String</p>\n<p>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">Segment API identifier</a>. Segment ID indicating the analytics-enabled segment for which event analytics should be returned.</p>\n","type":"text/plain"},"key":"segment_id","value":"{{segment_identifier}}"}],"variable":[]}},"response":[],"_postman_id":"0bd1ab63-d1a5-4301-8d17-246cf24a178c"}],"id":"fef2bce9-b482-4c2c-965e-85bd53caaa42","_postman_id":"fef2bce9-b482-4c2c-965e-85bd53caaa42","description":""},{"name":"KPI","item":[{"name":"Export daily new users by date","id":"07756c39-cfa0-40a0-8101-03f8791cec01","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/kpi/new_users/data_series?length=14&ending_at=2018-06-28T23:59:59-5:00&app_id={{app_identifier}}","description":"<blockquote>\n<p>Use this endpoint to retrieve a daily series of the total number of new users on each date. </p>\n</blockquote>\n<p>Note: If you are using our <a href=\"https://www.braze.com/docs/navigation\">older navigation</a>, <code>app_id</code> can be found at <strong>Developer Console</strong> &gt; <strong>API Settings</strong>.</p>\n<p>To use this endpoint, you’ll need to generate an API key with the <code>kpi.new_users.data_series</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n    \"message\": (required, string) the status of the export, returns 'success' when completed without errors,\n    \"data\" : [\n        {\n            \"time\" : (string) the date as ISO 8601 date,\n            \"new_users\" : (int) the number of daily new users\n        },\n        ...\n    ]\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["kpi","new_users","data_series"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) Integer</p>\n<p>Maximum number of days before <code>ending_at</code> to include in the returned series. Must be between 1 and 100 (inclusive).</p>\n","type":"text/plain"},"key":"length","value":"14"},{"description":{"content":"<p>(Optional) Datetime (<a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> string)</p>\n<p>Date on which the data series should end. Defaults to time of the request.</p>\n","type":"text/plain"},"key":"ending_at","value":"2018-06-28T23:59:59-5:00"},{"description":{"content":"<p>(Optional) String</p>\n<p>App API identifier retrieved from the <a href=\"https://www.braze.com/docs/user_guide/administrative/app_settings/api_settings_tab/\">API Keys</a> page. If excluded, results for all apps in the workspace will be returned.</p>\n","type":"text/plain"},"key":"app_id","value":"{{app_identifier}}"}],"variable":[]}},"response":[],"_postman_id":"07756c39-cfa0-40a0-8101-03f8791cec01"},{"name":"Export daily active users by date","id":"90a64560-65aa-4f71-a8ef-1edf49321986","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/kpi/dau/data_series?length=10&ending_at=2018-06-28T23:59:59-5:00&app_id={{app_identifier}}","description":"<blockquote>\n<p>Use this endpoint to retrieve a daily series of the total number of unique active users on each date. </p>\n</blockquote>\n<p>Note: If you are using our <a href=\"https://www.braze.com/docs/navigation\">older navigation</a>, API Keys can be found at <strong>Developer Console &gt; API Settings</strong>.</p>\n<p>To use this endpoint, you’ll need to generate an API key with the <code>kpi.dau.data_series</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n    \"message\": (required, string) the status of the export, returns 'success' when completed without errors,\n    \"data\" : [\n        {\n            \"time\" : (string) the date as ISO 8601 date,\n            \"dau\" : (int) the number of daily active users\n        },\n        ...\n    ]\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["kpi","dau","data_series"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) Integer</p>\n<p>Maximum number of days before <code>ending_at</code> to include in the returned series. Must be between 1 and 100 (inclusive).</p>\n","type":"text/plain"},"key":"length","value":"10"},{"description":{"content":"<p>(Optional)  Datetime (<a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> string)\nDate on which the data series should end. Defaults to time of the request.</p>\n","type":"text/plain"},"key":"ending_at","value":"2018-06-28T23:59:59-5:00"},{"description":{"content":"<p>(Optional) String</p>\n<p>App API identifier retrieved from the <a href=\"https://www.braze.com/docs/user_guide/administrative/app_settings/api_settings_tab/\">API Keys</a> page. If excluded, results for all apps in the workspace will be returned.</p>\n","type":"text/plain"},"key":"app_id","value":"{{app_identifier}}"}],"variable":[]}},"response":[],"_postman_id":"90a64560-65aa-4f71-a8ef-1edf49321986"},{"name":"Export monthly active users for last 30 days","id":"68f45461-3bf1-425c-b918-f0bbf3f87149","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/kpi/mau/data_series?length=7&ending_at=2018-06-28T23:59:59-05:00&app_id={{app_identifier}}","description":"<blockquote>\n<p>Use this endpoint to retrieve a daily series of the total number of unique active users over a 30-day rolling window. </p>\n</blockquote>\n<p>Note: If you are using our <a href=\"https://www.braze.com/docs/navigation\">older navigation</a>, API Keys can be found at <strong>Developer Console &gt; API Settings</strong>.</p>\n<p>To use this endpoint, you’ll need to generate an API key with the <code>kpi.mau.data_series</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n    \"message\": (required, string) the status of the export, returns 'success' when completed without errors,\n    \"data\" : [\n        {\n            \"time\" : (string) the date as ISO 8601 date,\n            \"mau\" : (int) the number of monthly active users\n        },\n        ...\n    ]\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["kpi","mau","data_series"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) Integer</p>\n<p>Maximum number of days before <code>ending_at</code> to include in the returned series. Must be between 1 and 100 (inclusive).</p>\n","type":"text/plain"},"key":"length","value":"7"},{"description":{"content":"<p>(Optional)  Datetime (<a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> string)</p>\n<p>Date on which the data series should end. Defaults to time of the request.</p>\n","type":"text/plain"},"key":"ending_at","value":"2018-06-28T23:59:59-05:00"},{"description":{"content":"<p>(Optional) String</p>\n<p>App API identifier retrieved from the <a href=\"https://www.braze.com/docs/user_guide/administrative/app_settings/api_settings_tab/\">API Keys</a> page. If excluded, results for all apps in the workspace will be returned.</p>\n","type":"text/plain"},"key":"app_id","value":"{{app_identifier}}"}],"variable":[]}},"response":[],"_postman_id":"68f45461-3bf1-425c-b918-f0bbf3f87149"},{"name":"Export KPIs for daily app uninstalls by date","id":"59c4d592-3e77-42f8-8ff1-d5d250acbeae","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/kpi/uninstalls/data_series?length=14&ending_at=2018-06-28T23:59:59-5:00&app_id={{app_identifier}}","description":"<blockquote>\n<p>Use this endpoint to retrieve a daily series of the total number of uninstalls on each date. </p>\n</blockquote>\n<p>Note: If you are using our <a href=\"https://www.braze.com/docs/navigation\">older navigation</a>, API Keys can be found at <strong>Developer Console &gt; API Settings</strong>.</p>\n<p>To use this endpoint, you’ll need to generate an API key with the <code>kpi.uninstalls.data_series</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n    \"message\": (required, string) the status of the export, returns 'success' when completed without errors,\n    \"data\" : [\n        {\n            \"time\" : (string) the date as ISO 8601 date,\n            \"uninstalls\" : (int) the number of uninstalls\n        },\n        ...\n    ]\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["kpi","uninstalls","data_series"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) Integer</p>\n<p>Maximum number of days before <code>ending_at</code> to include in the returned series. Must be between 1 and 100 (inclusive).</p>\n","type":"text/plain"},"key":"length","value":"14"},{"description":{"content":"<p>(Optional)  Datetime (<a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> string)</p>\n<p>Date on which the data series should end. Defaults to time of the request.</p>\n","type":"text/plain"},"key":"ending_at","value":"2018-06-28T23:59:59-5:00"},{"description":{"content":"<p>(Optional) String</p>\n<p>App API identifier retrieved from the <a href=\"https://www.braze.com/docs/user_guide/administrative/app_settings/api_settings_tab/\">API Keys</a> page. If excluded, results for all apps in the workspace will be returned.</p>\n","type":"text/plain"},"key":"app_id","value":"{{app_identifier}}"}],"variable":[]}},"response":[],"_postman_id":"59c4d592-3e77-42f8-8ff1-d5d250acbeae"}],"id":"daae620d-ba97-4bb5-bce1-ede361670f56","_postman_id":"daae620d-ba97-4bb5-bce1-ede361670f56","description":""},{"name":"News Feed","item":[{"name":"Export News Feed Card analytics","id":"9cdc3b1e-641e-4d62-b9e8-42d04ee9d4d8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/feed/data_series?card_id={{card_identifier}}&length=14&unit=day&ending_at=2018-06-28T23:59:59-5:00","description":"<blockquote>\n<p>Use this endpoint to retrieve a daily series of engagement stats for a card over time. </p>\n</blockquote>\n<p>Note: If you are using our <a href=\"https://www.braze.com/docs/navigation\">older navigation</a>, `card_id` can be found at <strong>Developer Console &gt; API Settings</strong>.</p>\n<p>To use this endpoint, you’ll need to generate an API key with the <code>feed.data_series</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n    \"message\": (required, string) the status of the export, returns 'success' when completed without errors,\n    \"data\" : [\n        {\n            \"time\" : (string) the point in time - as ISO 8601 extended when unit is \"hour\" and as ISO 8601 date when unit is \"day\",\n            \"clicks\" : (int) the number of clicks,\n            \"impressions\" : (int) the number of impressions,\n            \"unique_clicks\" : (int) the number of unique clicks,\n            \"unique_impressions\" : (int) the number of unique impressions\n        },\n        ...\n    ]\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["feed","data_series"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) String</p>\n<p>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">Card API identifier</a>.</p>\n<p>The <code>card_id</code> for a given card can be found in the <strong>Settings &gt; Setup and Testing &gt; API Keys</strong> page and on the card details page within your dashboard, or you can use the <a href=\"https://www.braze.com/docs/api/endpoints/export/news_feed/get_news_feed_cards/\">News Feed List Endpoint</a>.</p>\n","type":"text/plain"},"key":"card_id","value":"{{card_identifier}}"},{"description":{"content":"<p>(Required) Integer</p>\n<p>Max number of units (days or hours) before <code>ending_at</code> to include in the returned series. Must be between 1 and 100 (inclusive).</p>\n","type":"text/plain"},"key":"length","value":"14"},{"description":{"content":"<p>(Optional) String</p>\n<p>Unit of time between data points. Can be <code>day</code> or <code>hour</code>, defaults to <code>day</code>.</p>\n","type":"text/plain"},"key":"unit","value":"day"},{"description":{"content":"<p>(Optional) Datetime (<a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> string)</p>\n<p>Date on which the data series should end. Defaults to time of the request.</p>\n","type":"text/plain"},"key":"ending_at","value":"2018-06-28T23:59:59-5:00"}],"variable":[]}},"response":[],"_postman_id":"9cdc3b1e-641e-4d62-b9e8-42d04ee9d4d8"},{"name":"Export News Feed Cards details","id":"5b1401a6-f12c-4827-82c9-8dc604f1671e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","type":"text","value":"Bearer {{api_key}}"}],"url":"https://{{instance_url}}/feed/details?card_id={{card_identifier}}","description":"<blockquote>\n<p>Use this endpoint to retrieve relevant information on a card, which can be identified by the <code>card_id</code>. </p>\n</blockquote>\n<p>Note: If you are using our <a href=\"https://www.braze.com/docs/navigation\">older navigation</a>, <code>card_id</code> can be found at <strong>Developer Console &gt; API Settings</strong>.</p>\n<p>To use this endpoint, you’ll need to generate an API key with the <code>feed.details</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n    \"message\": (required, string) The status of the export, returns 'success' when completed without errors,\n    \"created_at\" : (string) Date created as ISO 8601 date,\n    \"updated_at\" : (string) Date last updated as ISO 8601 date,\n    \"name\" : (string) Card name,\n    \"publish_at\" : (string) Date card was published as ISO 8601 date,\n    \"end_at\" : (string) Date card will stop displaying for users as ISO 8601 date,\n    \"tags\" : (array) Tag names associated with the card,\n    \"title\" : (string) Title of the card,\n    \"image_url\" : (string) Image URL used by this card,\n    \"extras\" : (dictionary) Dictionary containing key-value pair data attached to this card,\n    \"description\" : (string) Description text used by this card,\n    \"archived\": (boolean) whether this Card is archived,\n    \"draft\": (boolean) whether this Card is a draft,\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["feed","details"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) String</p>\n<p>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">Card API identifier</a>.</p>\n<p>The <code>card_id</code> for a given card can be found in the <strong>Settings &gt; Setup and Testing &gt; API Keys</strong> page and on the card details page within your dashboard, or you can use the <a href=\"https://www.braze.com/docs/api/endpoints/export/news_feed/get_news_feed_cards/\">News Feed List Endpoint</a>.</p>\n","type":"text/plain"},"key":"card_id","value":"{{card_identifier}}"}],"variable":[]}},"response":[],"_postman_id":"5b1401a6-f12c-4827-82c9-8dc604f1671e"},{"name":"Export News Feed Cards list","id":"9fa7a3bc-4a02-4de2-bc4c-8f111750665e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/feed/list?page=1&include_archived=true&sort_direction=desc","description":"<blockquote>\n<p>Use this endpoint to export a list of News Feed cards, each of which will include its name and card API identifier. </p>\n</blockquote>\n<p>The cards are returned in groups of 100 sorted by time of creation (oldest to newest by default).</p>\n<p>To use this endpoint, you’ll need to generate an API key with the <code>feed.list</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n    \"message\": (required, string) the status of the export, returns 'success' when completed without errors,\n    \"cards\" : [\n        {\n            \"id\" : (string) the card API identifier,\n            \"type\" : (string) type of the card - NewsItem (classic cards), CaptionedImage, Banner\n            \"title\" : (string) the title of the card,\n            \"tags\" : (array) the tag names associated with the card\n        },\n        ...\n    ]\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["feed","list"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Optional) Integer</p>\n<p>The page of cards to return, defaults to 0 (returns the first set of up to 100).</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>(Optional) Boolean</p>\n<p>Whether or not to include archived cards, defaults to false.</p>\n","type":"text/plain"},"key":"include_archived","value":"true"},{"description":{"content":"<p>(Optional) String</p>\n<ul>\n<li>Sort creation time from newest to oldest: pass in the value <code>desc</code>.</li>\n<li>Sort creation time from oldest to newest: pass in the value <code>asc</code>.</li>\n</ul>\n<p>If <code>sort_direction</code> is not included, the default order is oldest to newest.</p>\n","type":"text/plain"},"key":"sort_direction","value":"desc"}],"variable":[]}},"response":[],"_postman_id":"9fa7a3bc-4a02-4de2-bc4c-8f111750665e"}],"id":"f015f1bd-9cc5-4be0-ab62-b02e55580169","_postman_id":"f015f1bd-9cc5-4be0-ab62-b02e55580169","description":""},{"name":"Purchases","item":[{"name":"Export product IDs","id":"dff4ed40-81f5-451d-9d44-accc0e932285","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/purchases/product_list?page=1","description":"<blockquote>\n<p>Use this endpoint to return a paginated lists of product IDs. </p>\n</blockquote>\n<p>To use this endpoint, you’ll need to generate an API key with the <code>purchases.product_list</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>For customers who onboarded with Braze on or after September 16, 2021, we apply a shared rate limit of 1,000 requests per hour to this endpoint. This rate limit is shared with the <code>/events/list</code> endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n  \"products\": [\n    \"product_name\" (string), the name of the product\n  ],\n  \"message\": \"success\"\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["purchases","product_list"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Optional) Integer</p>\n<p>The page of your product list that you would like to view.</p>\n","type":"text/plain"},"key":"page","value":"1"}],"variable":[]}},"response":[],"_postman_id":"dff4ed40-81f5-451d-9d44-accc0e932285"},{"name":"Export number of purchases","id":"6ac59282-d231-4317-88df-f7f12169b94e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/purchases/quantity_series?ending_at=2018-06-28T23:59:59-5:00&length=100&unit=14&app_id={{app_identifier}}&product=name","description":"<blockquote>\n<p>Use this endpoint to return the total number of purchases in your app over a time range. </p>\n</blockquote>\n<p>To use this endpoint, you’ll need to generate an API key with the <code>purchases.quantity_series</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>For customers who onboarded with Braze on or after September 16, 2021, we apply a shared rate limit of 1,000 requests per hour to this endpoint. This rate limit is shared with the <code>/events/list</code> endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request GET 'https://rest.iad-01.braze.com/purchases/quantity_series?length=100' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY'\n\n</code></pre><h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n  \"message\": (required, string) the status of the export, returns 'success' when completed without errors,\n  \"data\" : [\n    {\n      \"time\" : (string) the date as ISO 8601 date,\n      \"purchase_quantity\" : (int) the number of items purchased in the time period\n      },\n    ...\n  ]\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["purchases","quantity_series"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Optional) Datetime (ISO 8601 string)\nDate on which the data series should end. Defaults to time of the request.</p>\n","type":"text/plain"},"key":"ending_at","value":"2018-06-28T23:59:59-5:00"},{"description":{"content":"<p>(Required) Integer\nMaximum number of days before ending_at to include in the returned series. Must be between 1 and 100 (inclusive).</p>\n","type":"text/plain"},"key":"length","value":"100"},{"description":{"content":"<p>(Optional) String\nUnit of time between data points. Can be <code>day</code> or <code>hour</code>, defaults to <code>day</code>. </p>\n","type":"text/plain"},"key":"unit","value":"14"},{"description":{"content":"<p>(Optional) String\nApp API identifier retrieved from the <a href=\"https://www.braze.com/docs/user_guide/administrative/app_settings/api_settings_tab/\">API Keys</a> page. If excluded, results for all apps in the workspace will be returned.</p>\n","type":"text/plain"},"key":"app_id","value":"{{app_identifier}}"},{"description":{"content":"<p>(Optional) String\nName of product to filter response by. If excluded, results for all apps will be returned.</p>\n","type":"text/plain"},"key":"product","value":"name"}],"variable":[]}},"response":[],"_postman_id":"6ac59282-d231-4317-88df-f7f12169b94e"},{"name":"Export revenue data by time","id":"f6e05f9a-13c0-4d66-8caa-4a376d25749f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/purchases/revenue_series?ending_at=2018-06-28T23:59:59-5:00&length=100&unit=14&app_id={{app_identifier}}&product=name","description":"<blockquote>\n<p>Use this endpoint to return the total money spent in your app over a time range. </p>\n</blockquote>\n<p>To use this endpoint, you’ll need to generate an API key with the <code>purchases.revenue_series</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>For customers who onboarded with Braze on or after September 16, 2021, we apply a shared rate limit of 1,000 requests per hour to this endpoint. This rate limit is shared with the <code>/events/list</code> endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request GET 'https://rest.iad-01.braze.com/purchases/revenue_series?length=100' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY'\n\n</code></pre><h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n  \"message\": (required, string) the status of the export, returns 'success' when completed without errors,\n  \"data\" : [\n    {\n      \"time\" : (string) the date as ISO 8601 date,\n      \"revenue\" : (int) amount of revenue for the time period\n      },\n    ...\n  ]\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["purchases","revenue_series"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Optional) Datetime (ISO 8601 string)\nDate on which the data series should end. Defaults to time of the request.</p>\n","type":"text/plain"},"key":"ending_at","value":"2018-06-28T23:59:59-5:00"},{"description":{"content":"<p>(Required) Integer\nMaximum number of days before ending_at to include in the returned series. Must be between 1 and 100 (inclusive).</p>\n","type":"text/plain"},"key":"length","value":"100"},{"description":{"content":"<p>(Optional) String\nUnit of time between data points. Can be <code>day</code> or <code>hour</code>, defaults to <code>day</code>. </p>\n","type":"text/plain"},"key":"unit","value":"14"},{"description":{"content":"<p>(Optional) String\nApp API identifier retrieved from the Settings &gt; Setup and Testing &gt; API Keys to limit analytics to a specific app.</p>\n","type":"text/plain"},"key":"app_id","value":"{{app_identifier}}"},{"description":{"content":"<p>(Optional) String\nName of product to filter response by. If excluded, results for all apps will be returned.</p>\n","type":"text/plain"},"key":"product","value":"name"}],"variable":[]}},"response":[],"_postman_id":"f6e05f9a-13c0-4d66-8caa-4a376d25749f"}],"id":"52f3ac64-fe73-4597-a3ff-bbfba2392738","_postman_id":"52f3ac64-fe73-4597-a3ff-bbfba2392738","description":""},{"name":"Segment","item":[{"name":"Export segment list","id":"1349e6f4-3ce7-4e60-b3e9-951c99c0993f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}"}],"url":"https://{{instance_url}}/segments/list?page=1&sort_direction=desc","description":"<blockquote>\n<p>Use this endpoint to export a list of segments, each of which will include its name, Segment API identifier, and whether it has analytics tracking enabled. </p>\n</blockquote>\n<p>The segments are returned in groups of 100 sorted by time of creation (oldest to newest by default). Archived segments are not included.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/basics#rest-api-key/\">API key</a> with the <code>segments.list</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n    \"message\": (required, string) the status of the export, returns 'success' when completed without errors,\n    \"segments\" : [\n        {\n            \"id\" : (string) Segment API Identifier,\n            \"name\" : (string) segment name,\n            \"analytics_tracking_enabled\" : (boolean) whether the segment has analytics tracking enabled,\n            \"tags\" : (array) tag names associated with the segment\n        },\n        ...\n    ]\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["segments","list"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Optional) Integer</p>\n<p>The page of segments to return, defaults to 0 (returns the first set of up to 100).</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>(Optional) String</p>\n<ul>\n<li>Sort creation time from newest to oldest: pass in the value <code>desc</code>.</li>\n<li>Sort creation time from oldest to newest: pass in the value <code>asc</code>.</li>\n</ul>\n<p>If <code>sort_direction</code> is not included, the default order is oldest to newest.</p>\n","type":"text/plain"},"key":"sort_direction","value":"desc"}],"variable":[]}},"response":[],"_postman_id":"1349e6f4-3ce7-4e60-b3e9-951c99c0993f"},{"name":"Export segment analytics","id":"62d9d142-cdec-4aea-a287-c13efea7415e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/segments/data_series?segment_id={{segment_identifier}}&length=14&ending_at=2018-06-27T23:59:59-5:00","description":"<blockquote>\n<p>Use this endpoint to retrieve a daily series of the estimated size of a segment over time. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/basics#rest-api-key/\">API key</a> with the <code>segments.data_series</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n    \"message\": (required, string) the status of the export, returns 'success' when completed without errors,\n    \"data\" : [\n        {\n            \"time\" : (string) date as ISO 8601 date,\n            \"size\" : (int) size of the segment on that date\n        },\n        ...\n    ]\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["segments","data_series"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) String</p>\n<p>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">Segment API identifier</a>.</p>\n<p>The <code>segment_id</code> for a given segment can be found on the <a href=\"https://www.braze.com/docs/user_guide/administrative/app_settings/api_settings_tab/\">API Keys</a> page within your Braze account or you can use the <a href=\"https://www.braze.com/docs/api/endpoints/export/get_segment/\">Export segment list endpoint</a>.</p>\n","type":"text/plain"},"key":"segment_id","value":"{{segment_identifier}}"},{"description":{"content":"<p>(Required) Integer</p>\n<p>Max number of days before <code>ending_at</code> to include in the returned series - must be between 1 and 100 (inclusive).</p>\n","type":"text/plain"},"key":"length","value":"14"},{"description":{"content":"<p>(Optional) Datetime (<a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> string)</p>\n<p>Date on which the data series should end. Defaults to time of the request.</p>\n","type":"text/plain"},"key":"ending_at","value":"2018-06-27T23:59:59-5:00"}],"variable":[]}},"response":[],"_postman_id":"62d9d142-cdec-4aea-a287-c13efea7415e"},{"name":"Export segment details","id":"aab56ed9-0a28-476a-8b57-b79786dbb9c1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/segments/details?segment_id={{segment_identifier}}","description":"<blockquote>\n<p>Use this endpoint to retrieve relevant information on a segment, which can be identified by the <code>segment_id</code>. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/basics#rest-api-key/\">API key</a> with the <code>segments.details</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n      \"message\": (required, string) the status of the export, returns 'success' when completed without errors,\n      \"created_at\" : (string) the date created as ISO 8601 date,\n      \"updated_at\" : (string) the date last updated as ISO 8601 date,\n      \"name\" : (string) the segment name,\n      \"description\" : (string) a human-readable description of filters,\n      \"text_description\" : (string) the segment description, \n      \"tags\" : (array) the tag names associated with the segment formatted as strings,\n      \"teams\" : (array) the names of the Teams associated with the campaign\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["segments","details"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) String</p>\n<p>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">Segment API identifier</a>.</p>\n<p>The <code>segment_id</code> for a given segment can be found on the <a href=\"https://www.braze.com/docs/user_guide/administrative/app_settings/api_settings_tab/\">API Keys</a> page within your Braze account or you can use the <a href=\"https://www.braze.com/docs/api/endpoints/export/get_segment/\">Export segment list endpoint</a>.</p>\n","type":"text/plain"},"key":"segment_id","value":"{{segment_identifier}}"}],"variable":[]}},"response":[],"_postman_id":"aab56ed9-0a28-476a-8b57-b79786dbb9c1"}],"id":"dd3a7eea-35bc-4329-8d53-45f7c2b321bc","_postman_id":"dd3a7eea-35bc-4329-8d53-45f7c2b321bc","description":""},{"name":"Session Analytics","item":[{"name":"Export app sessions by time","id":"79efb6a9-62ec-4b8a-bf4a-e96313aa4be1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/sessions/data_series?length=14&unit=day&ending_at=2018-06-28T23:59:59-5:00&app_id={{app_identifier}}&segment_id={{segment_identifier}}","description":"<blockquote>\n<p>Use this endpoint to retrieve a series of the number of sessions for your app over a designated time period. </p>\n</blockquote>\n<p>Note: If you are using our <a href=\"https://www.braze.com/docs/navigation\">older navigation</a>, <code>segment_id</code> can be found at <strong>Developer Console &gt; API Settings</strong>.</p>\n<p>To use this endpoint, you’ll need to generate an API key with the <code>sessions.data_series</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n    \"message\": (required, string) the status of the export, returns 'success' when completed without errors,\n    \"data\" : [\n        {\n            \"time\" : (string) point in time - as ISO 8601 extended when unit is \"hour\" and as ISO 8601 date when unit is \"day\",\n            \"sessions\" : (int)\n        },\n        ...\n    ]\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["sessions","data_series"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) Integer</p>\n<p>Max number of days before <code>ending_at</code> to include in the returned series - must be between 1 and 100 (inclusive).</p>\n","type":"text/plain"},"key":"length","value":"14"},{"description":{"content":"<p>(Optional) String</p>\n<p>Unit of time between data points. Can be <code>day</code> or <code>hour</code>, defaults to <code>day</code>. </p>\n","type":"text/plain"},"key":"unit","value":"day"},{"description":{"content":"<p>(Optional) Datetime (ISO 8601 string)</p>\n<p>Date on which the data series should end. Defaults to time of the request.</p>\n","type":"text/plain"},"key":"ending_at","value":"2018-06-28T23:59:59-5:00"},{"description":{"content":"<p>(Optional) String</p>\n<p>App API identifier retrieved from the <a href=\"https://www.braze.com/docs/user_guide/administrative/app_settings/api_settings_tab/\">API Keys</a> page to limit analytics to a specific app.</p>\n","type":"text/plain"},"key":"app_id","value":"{{app_identifier}}"},{"description":{"content":"<p>(Required) String</p>\n<p>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">Segment API identifier</a>. Segment ID indicating the analytics-enabled segment for which sessions should be returned.</p>\n","type":"text/plain"},"key":"segment_id","value":"{{segment_identifier}}"}],"variable":[]}},"response":[],"_postman_id":"79efb6a9-62ec-4b8a-bf4a-e96313aa4be1"}],"id":"3e300d1e-2e15-4609-84bf-91f6651fb19a","_postman_id":"3e300d1e-2e15-4609-84bf-91f6651fb19a","description":""},{"name":"User Data","item":[{"name":"Export user profile by identifier","id":"b9750447-9d94-4263-967f-f816f0c76577","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"external_ids\": [\"user_identifier1\", \"user_identifier2\"],\n  \"user_aliases\": [\n    {\n      \"alias_name\": \"example_alias\",\n      \"alias_label\": \"example_label\"\n    }\n  ],\n  \"device_id\": \"1234567\",\n  \"braze_id\": \"braze_identifier\",\n  \"email_address\": \"example@braze.com\",\n  \"phone\": \"+11112223333\",\n  \"fields_to_export\": [\"first_name\", \"email\", \"purchases\"]\n}"},"url":"https://{{instance_url}}/users/export/ids","description":"<blockquote>\n<p>Use this endpoint to export data from any user profile by specifying a user identifier. </p>\n</blockquote>\n<p>Up to 50 <code>external_ids</code> or <code>user_aliases</code> can be included in a single request. Should you want to specify <code>device_id</code>, <code>email_address</code> , or <code>phone</code>, only one of any identifier can be included per request.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/basics#rest-api-key/\">API key</a> with the <code>users.export.ids</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>For customers who onboarded with Braze on or after August 16, 2021, we apply a rate limit of 2,500 requests per minute to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>external_ids</code></td>\n<td>Optional</td>\n<td>Array of strings</td>\n<td>External identifiers for users you wish export.</td>\n</tr>\n<tr>\n<td><code>user_aliases</code></td>\n<td>Optional</td>\n<td>Array of user alias object</td>\n<td><a href=\"https://www.braze.com/docs/api/objects_filters/user_alias_object/\">User aliases</a> for users to export.</td>\n</tr>\n<tr>\n<td><code>device_id</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>Device identifier, as returned by various SDK methods such as <code>getDeviceId</code>.</td>\n</tr>\n<tr>\n<td><code>braze_id</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>Braze identifier for a particular user.</td>\n</tr>\n<tr>\n<td><code>email_address</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>Email address of user.</td>\n</tr>\n<tr>\n<td><code>phone</code></td>\n<td>Optional</td>\n<td>String in <a href=\"https://en.wikipedia.org/wiki/E.164\">E.164</a> format</td>\n<td>Phone number of user.</td>\n</tr>\n<tr>\n<td><code>fields_to_export</code></td>\n<td>Optional</td>\n<td>Array of strings</td>\n<td>Name of user data fields to export. Defaults to all if not provided.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"fields-to-export\">Fields to export</h2>\n<p>The following is a list of valid <code>fields_to_export</code>. Using <code>fields_to_export</code> to minimize the data returned can improve response time of this API endpoint:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field to export</th>\n<th>Data type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>apps</code></td>\n<td>Array</td>\n<td>Apps this user has logged sessions for, which includes the fields:  <br />  <br />- <code>name</code>: app name  <br />- <code>platform</code>: app platform, such as iOS, Android, or Web  <br />- <code>version</code>: app version number or name  <br />- <code>sessions</code>: total number of sessions for this app  <br />- <code>first_used</code>: date of first session  <br />- <code>last_used</code>: date of last session  <br />  <br />All fields are strings.</td>\n</tr>\n<tr>\n<td><code>attributed_campaign</code></td>\n<td>String</td>\n<td>Data from <a href=\"https:/www.braze.com/docs/partners/message_orchestration/attribution\">attribution integrations</a>, if set up. Identifier for a particular ad campaign.</td>\n</tr>\n<tr>\n<td><code>attributed_source</code></td>\n<td>String</td>\n<td>Data from <a href=\"https:/www.braze.com/docs/partners/message_orchestration/attribution\">attribution integrations</a>, if set up. Identifier for the platform the ad was on.</td>\n</tr>\n<tr>\n<td><code>attributed_adgroup</code></td>\n<td>String</td>\n<td>Data from <a href=\"https:/www.braze.com/docs/partners/message_orchestration/attribution\">attribution integrations</a>, if set up. Identifier for an optional sub-grouping below campaign.</td>\n</tr>\n<tr>\n<td><code>attributed_ad</code></td>\n<td>String</td>\n<td>Data from <a href=\"https:/www.braze.com/docs/partners/message_orchestration/attribution\">attribution integrations</a>, if set up. Identifier for an optional sub-grouping below campaign and adgroup.</td>\n</tr>\n<tr>\n<td><code>braze_id</code></td>\n<td>String</td>\n<td>Device-specific unique user identifier set by Braze for this user.</td>\n</tr>\n<tr>\n<td><code>country</code></td>\n<td>String</td>\n<td>User's country using <a href=\"https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\">ISO 3166-1 alpha-2</a> standard.</td>\n</tr>\n<tr>\n<td><code>created_at</code></td>\n<td>String</td>\n<td>Date and time for when the user profile was created, in ISO 8601 format.</td>\n</tr>\n<tr>\n<td><code>custom_attributes</code></td>\n<td>Object</td>\n<td>Custom attribute key-value pairs for this user.</td>\n</tr>\n<tr>\n<td><code>custom_events</code></td>\n<td>Array</td>\n<td>Custom events attributed to this user in the last 90 days.</td>\n</tr>\n<tr>\n<td><code>devices</code></td>\n<td>Array</td>\n<td>Information about the user's device, which could include the following depending on platform:  <br />  <br />- <code>model</code>: Device's model name  <br />- <code>os</code>: Device's operating system  <br />- <code>carrier</code>: Device's service carrier, if available  <br />- <code>idfv</code>: (iOS) Braze's device identifier, the Apple Identifier for Vendor, if exists  <br />- <code>idfa</code>: (iOS) Identifier for Advertising, if exists  <br />- <code>device_id</code>: (Android) Braze's device identifier  <br />- <code>google_ad_id</code>: (Android) Google Play Advertising Identifier, if exists  <br />- <code>roku_ad_id</code>: (Roku) Roku Advertising Identifier  <br />- <code>ad_tracking_enabled</code>: If ad tracking is enabled on the device, can be true or false</td>\n</tr>\n<tr>\n<td><code>dob</code></td>\n<td>String</td>\n<td>User's date of birth in the format <code>YYYY-MM-DD</code>.</td>\n</tr>\n<tr>\n<td><code>email</code></td>\n<td>String</td>\n<td>User's email address.</td>\n</tr>\n<tr>\n<td><code>external_id</code></td>\n<td>String</td>\n<td>Unique user identifier for identified users.</td>\n</tr>\n<tr>\n<td><code>first_name</code></td>\n<td>String</td>\n<td>User's first name.</td>\n</tr>\n<tr>\n<td><code>gender</code></td>\n<td>String</td>\n<td>User's gender. Possible values are:  <br />  <br />- <code>M</code>: male  <br />- <code>F</code>: female  <br />- <code>O</code>: other  <br />- <code>N</code>: not applicable  <br />- <code>P</code>: prefer not to say  <br />- <code>nil</code>: unknown</td>\n</tr>\n<tr>\n<td><code>home_city</code></td>\n<td>String</td>\n<td>User's home city.</td>\n</tr>\n<tr>\n<td><code>language</code></td>\n<td>String</td>\n<td>User's language in ISO-639-1 standard.</td>\n</tr>\n<tr>\n<td><code>last_coordinates</code></td>\n<td>Array of floats</td>\n<td>User's most recent device location, formatted as <code>[longitude, latitude]</code>.</td>\n</tr>\n<tr>\n<td><code>last_name</code></td>\n<td>String</td>\n<td>User's last name.</td>\n</tr>\n<tr>\n<td><code>phone</code></td>\n<td>String</td>\n<td>User's telephone number in E.164 format.</td>\n</tr>\n<tr>\n<td><code>purchase</code>s</td>\n<td>Array</td>\n<td>Purchases this user has made in the last 90 days.</td>\n</tr>\n<tr>\n<td><code>random_bucket</code></td>\n<td>Integer</td>\n<td>User's <a href=\"https:/www.braze.com/docs/user_guide/data_and_analytics/braze_currents/event_glossary/customer_behavior_events#random-bucket-number-event\">random bucket number</a>, used to create uniformly distributed segments of random users.</td>\n</tr>\n<tr>\n<td><code>time_zone</code></td>\n<td>String</td>\n<td>User's time zone in the same format as the IANA Time Zone Database.</td>\n</tr>\n<tr>\n<td><code>total_revenue</code></td>\n<td>Float</td>\n<td>Total revenue attributed to this user. Total revenue is calculated based on purchases the user made during conversion windows for the campaigns and Canvases they received.</td>\n</tr>\n<tr>\n<td><code>uninstalled_at</code></td>\n<td>Timestamp</td>\n<td>Date and time the user uninstalls the app. Omitted if the app has not been uninstalled.</td>\n</tr>\n<tr>\n<td><code>user_aliases</code></td>\n<td>Object</td>\n<td><a href=\"https:/www.braze.com/docs/api/objects_filters/user_alias_object#user-alias-object-specification\">User aliases object</a> containing the <code>alias_name</code> and <code>alias_label</code>, if exists.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Be aware that the <code>/users/export/ids</code> endpoint will pull together the entire user profile for this user, including data such as all campaigns and Canvases received, all custom events performed, all purchases made, and all custom attributes. As a result, this endpoint is slower than other REST API endpoints.</p>\n<p>Depending on the data requested, this API endpoint may not be sufficient to meet your needs due to the 2,500 requests per minute rate limit. If you anticipate using this endpoint regularly to export users, instead consider exporting users by segment, which is asynchronous and more optimized for larger data pulls.</p>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n    \"message\": (required, string) the status of the export, returns 'success' when completed without errors,\n    \"users\" : (array of object) the data for each of the exported users, may be empty if no users are found,\n    \"invalid_user_ids\" : (optional, array of string) each of the identifiers provided in the request that did not correspond to a known user\n}\n\n</code></pre>\n<p>For an example of the data that is accessible via this endpoint see the following example.</p>\n<h3 id=\"example-user-export-file-output\">Example user export file output</h3>\n<p>User export object (we will include the least data possible - if a field is missing from the object it should be assumed to be null, false, or empty):</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"created_at\": (string),\n    \"external_id\" : (string),\n    \"user_aliases\" : [\n      {\n        \"alias_name\" : (string),\n        \"alias_label\" : (string)\n      }\n    ],\n    \"braze_id\": (string),\n    \"first_name\" : (string),\n    \"last_name\" : (string),\n    \"email\" : (string),\n    \"dob\" : (string) date for the user's date of birth,\n    \"home_city\" : (string),\n    \"country\" : (string) ISO-3166-1 alpha-2 standard,\n    \"phone\" : (string),\n    \"language\" : (string) ISO-639-1 standard,\n    \"time_zone\" : (string),\n    \"last_coordinates\" : (array of float) [lon, lat],\n    \"gender\" : (string) \"M\" | \"F\",\n    \"total_revenue\" : (float),\n    \"attributed_campaign\" : (string),\n    \"attributed_source\" : (string),\n    \"attributed_adgroup\" : (string),\n    \"attributed_ad\" : (string),\n    \"push_subscribe\" : (string) \"opted_in\" | \"subscribed\" | \"unsubscribed\",\n    \"email_subscribe\" : (string) \"opted_in\" | \"subscribed\" | \"unsubscribed\",\n    \"custom_attributes\" : (object) custom attribute key-value pairs,\n    \"custom_events\" : [\n      {\n        \"name\" : (string),\n        \"first\" : (string) date,\n        \"last\" : (string) date,\n        \"count\" : (int)\n      },\n      ...\n    ],\n    \"purchases\" : [\n      {\n        \"name\" : (string),\n        \"first\" : (string) date,\n        \"last\" : (string) date,\n        \"count\" : (int)\n      },\n      ...\n    ],\n    \"devices\" : [\n      {\n        \"model\" : (string),\n        \"os\" : (string),\n        \"carrier\" : (string),\n        \"idfv\" : (string) only included for iOS devices when IDFV collection is enabled,\n        \"idfa\" : (string) only included for iOS devices when IDFA collection is enabled,\n        \"google_ad_id\" : (string) only included for Android devices when Google Play Advertising Identifier collection is enabled,\n        \"roku_ad_id\" : (string) only included for Roku devices,\n        \"ad_tracking_enabled\" : (bool)\n      },\n      ...\n    ],\n    \"push_tokens\" : [\n      {\n        \"app\" : (string) app name,\n        \"platform\" : (string),\n        \"token\" : (string)\n      },\n      ...\n    ],\n    \"apps\" : [\n      {\n        \"name\" : (string),\n        \"platform\" : (string),\n        \"version\" : (string),\n        \"sessions\" : (integer),\n        \"first_used\" : (string) date,\n        \"last_used\" : (string) date\n      },\n      ...\n    ],\n    \"campaigns_received\" : [\n      {\n        \"name\" : (string),\n        \"last_received\" : (string) date,\n        \"engaged\" : \n         {\n           \"opened_email\" : (bool),\n           \"opened_push\" : (bool),\n           \"clicked_email\" : (bool),\n           \"clicked_triggered_in_app_message\" : (bool)\n          },\n          \"converted\" : (bool),\n          \"api_campaign_id\" : (string),\n          \"variation_name\" : (optional, string) exists only if it is a multivariate campaign,\n          \"variation_api_id\" : (optional, string) exists only if it is a multivariate campaign,\n          \"in_control\" : (optional, bool) exists only if it is a multivariate campaign\n        },\n      ...\n    ],\n    \"canvases_received\": [\n      {\n        \"name\": (string),\n        \"api_canvas_id\": (string),\n        \"last_received_message\": (string) date,\n        \"last_entered\": (string) date,\n        \"variation_name\": (string),\n        \"in_control\": (bool),\n        \"last_exited\": (string) date,\n        \"steps_received\": [\n          {\n            \"name\": (string),\n            \"api_canvas_step_id\": (string),\n            \"last_received\": (string) date\n          },\n          {\n            \"name\": (string),\n            \"api_canvas_step_id\": (string),\n            \"last_received\": (string) date\n          },\n          {\n            \"name\": (string),\n            \"api_canvas_step_id\": (string),\n            \"last_received\": (string) date\n          }\n        ]\n      },\n      ...\n    ],\n    \"cards_clicked\" : [\n      {\n        \"name\" : (string)\n      },\n      ...\n    ]\n}\n\n</code></pre>\n<h4 id=\"sample-output\">Sample output</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"created_at\" : \"2020-07-10 15:00:00.000 UTC\",\n    \"external_id\" : \"A8i3mkd99\",\n    \"user_aliases\" : [\n      {\n        \"alias_name\" : \"user_123\",\n        \"alias_label\" : \"amplitude_id\"\n      }\n    ],\n    \"braze_id\": \"5fbd99bac125ca40511f2cb1\",\n    \"random_bucket\" : 2365,\n    \"first_name\" : \"Jane\",\n    \"last_name\" : \"Doe\",\n    \"email\" : \"example@braze.com\",\n    \"dob\" : \"1980-12-21\",\n    \"home_city\" : \"Chicago\",\n    \"country\" : \"US\",\n    \"phone\" : \"+442071838750\",\n    \"language\" : \"en\",\n    \"time_zone\" : \"Eastern Time (US &amp; Canada)\",\n    \"last_coordinates\" : [41.84157636433568, -87.83520818508256],\n    \"gender\" : \"F\",\n    \"total_revenue\" : 65,\n    \"attributed_campaign\" : \"braze_test_campaign_072219\",\n    \"attributed_source\" : \"braze_test_source_072219\",\n    \"attributed_adgroup\" : \"braze_test_adgroup_072219\",\n    \"attributed_ad\" : \"braze_test_ad_072219\",\n    \"push_subscribe\" : \"opted_in\", \n    \"push_opted_in_at\": \"2020-01-26T22:45:53.953Z\",\n    \"email_subscribe\" : \"subscribed\",\n    \"custom_attributes\": \n    {\n      \"loyaltyId\": \"37c98b9d-9a7f-4b2f-a125-d873c5152856\",\n      \"loyaltyPoints\": \"321\",\n       \"loyaltyPointsNumber\": 107\n    },\n    \"custom_events\": [\n      {\n        \"name\": \"Loyalty Acknowledgement\",\n        \"first\": \"2021-06-28T17:02:43.032Z\",\n        \"last\": \"2021-06-28T17:02:43.032Z\",\n        \"count\": 1\n      },\n      ...\n    ],\n    \"purchases\": [\n      {\n        \"name\": \"item_40834\",\n        \"first\": \"2021-09-05T03:45:50.540Z\",\n        \"last\": \"2022-06-03T17:30:41.201Z\",\n        \"count\": 10\n      },\n      ...\n    ],\n    \"devices\": [\n      {\n        \"model\": \"Pixel XL\",\n        \"os\": \"Android (Q)\",\n        \"carrier\": null,\n        \"device_id\": \"312ef2c1-83db-4789-967-554545a1bf7a\",\n        \"ad_tracking_enabled\": true\n      },\n      ...\n    ],\n    \"push_tokens\": [\n      {\n        \"app\": \"MovieCanon\",\n        \"platform\": \"Android\",\n        \"token\": \"12345abcd\",\n        \"device_id\": \"312ef2c1-83db-4789-967-554545a1bf7a\",\n        \"notifications_enabled\": true\n      },\n      ...\n    ],\n    \"apps\": [\n      {\n        \"name\": \"MovieCannon\",\n        \"platform\": \"Android\",\n        \"version\": \"3.29.0\",\n        \"sessions\": 1129,\n        \"first_used\": \"2020-02-02T19:56:19.142Z\",\n        \"last_used\": \"2021-11-11T00:25:19.201Z\"\n      },\n      ...\n    ],\n    \"campaigns_received\": [\n      {\n        \"name\": \"Email Unsubscribe\",\n        \"api_campaign_id\": \"d72fdc84-ddda-44f1-a0d5-0e79f47ef942\",\n        \"last_received\": \"2022-06-02T03:07:38.105Z\",\n        \"engaged\": \n        {\n           \"opened_email\": true\n        },\n        \"converted\": true,\n        \"multiple_converted\": \n        {\n          \"Primary Conversion Event - A\": true\n        },\n        \"in_control\": false,\n        \"variation_name\": \"Variant 1\",\n        \"variation_api_id\": \"1bddc73a-a134-4784-9134-5b5574a9e0b8\"\n      },\n      ...\n    ],\n    \"canvases_received\": [\n      {\n        \"name\": \"Non Global  Holdout Group 4/21/21\",\n        \"api_canvas_id\": \"46972a9d-dc81-473f-aa03-e3473b4ed781\",\n        \"last_received_message\": \"2021-07-07T20:46:24.136Z\",\n        \"last_entered\": \"2021-07-07T20:45:24.000+00:00\",\n        \"variation_name\": \"Variant 1\",\n        \"in_control\": false,\n        \"last_entered_control_at\": null,\n        \"last_exited\": \"2021-07-07T20:46:24.136Z\",\n        \"steps_received\": [\n          {\n            \"name\": \"Step\",\n            \"api_canvas_step_id\": \"43d1a349-c3c8-4be1-9fbe-ce708e4d1c39\",\n            \"last_received\": \"2021-07-07T20:46:24.136Z\"\n          },\n          ...\n        ]\n      }\n      ...\n    ],    \n    \"cards_clicked\" : [\n      {\n        \"name\" : \"Loyalty Promo\"\n      },\n      ...\n    ]\n}\n\n</code></pre>\n<blockquote>\n<p><strong>Tip:</strong> For help with CSV and API exports, visit <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/export_braze_data/export_troubleshooting/\">Export troubleshooting</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["users","export","ids"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"b9750447-9d94-4263-967f-f816f0c76577"},{"name":"Export user profile by segment","id":"cfa6fa98-632c-4f25-8789-6c3f220b9457","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","type":"text","value":"Bearer {{api_key}}"}],"body":{"mode":"raw","raw":"{\n  \"segment_id\" : \"segment_identifier\",\n  \"callback_endpoint\" : \"example_endpoint\",\n  \"fields_to_export\" : [\"first_name\", \"email\", \"purchases\"],\n  \"output_format\" : \"zip\"\n}"},"url":"https://{{instance_url}}/users/export/segment","description":"<blockquote>\n<p>Use this endpoint to export all the users within a segment. </p>\n</blockquote>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Important</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Beginning December 2021, the following changed for this API:  <br />  <br />1. The fields_to_export field in this API request is required. The option to default to all fields has been removed.  <br />2. The fields for custom_events, purchases, campaigns_received, and canvases_received only contain data from the last 90 days.</td>\n</tr>\n</tbody>\n</table>\n</div><p>User data is exported as multiple files of user JSON objects separated by new lines (such as one JSON object per line). Data is exported to an automatically generated URL, or to an S3 bucket if this integration is already set up. This endpoint is currently not supported by Google Cloud Storage.</p>\n<p>A company may run at most one export per segment using this endpoint at a given time. Wait for your export to complete before retrying.</p>\n<p>Note: If you are using our <a href=\"https://www.braze.com/docs/navigation\">older navigation</a>, <code>segment_id</code> can be found at <strong>Developer Console &gt; API Settings</strong>.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an API key with the <code>users.export.segment</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"credential-based-response-details\">Credential-based response details</h2>\n<p>If you have added your <a href=\"https://www.braze.com/docs/partners/data_and_infrastructure_agility/cloud_storage/amazon_s3\">S3</a>, <a href=\"https://www.braze.com/docs/partners/data_and_infrastructure_agility/cloud_storage/microsoft_azure_blob_storage_for_currents/\">Azure</a>, or <a href=\"https://www.braze.com/docs/partners/data_and_infrastructure_agility/cloud_storage/google_cloud_storage_for_currents/\">Google Cloud Storage</a> credentials to Braze, then each file will be uploaded in your bucket as a ZIP file with the key format that looks like <code>segment-export/SEGMENT_ID/YYYY-MM-dd/RANDOM_UUID-TIMESTAMP_WHEN_EXPORT_STARTED/filename.zip</code>. If using Azure, make sure that you have the <strong>Make this the default data export destination</strong> box checked in the Azure partner overview page in Braze. Generally, we will create 1 file per 5,000 users to optimize processing. Exporting smaller segments within a large workspace may result in multiple files. You can then extract the files and concatenate all of the <code>json</code> files to a single file if needed. If you specify an <code>output_format</code> of <code>gzip</code>, then the file extension will be <code>.gz</code> instead of <code>.zip</code>.</p>\n<p>We strongly suggest setting up your own S3 or Azure credentials when using this endpoint to enforce your own bucket policies on the export. If you do not have your cloud storage credentials, the response to the request provides the URL where a ZIP file containing all the user files can be downloaded. The URL will only become a valid location after the export is ready.</p>\n<h4 id=\"export-pathing-breakdown-for-zip\"><strong>Export pathing breakdown for ZIP</strong></h4>\n<p><strong>ZIP format:</strong> <code>bucket-name/segment-export/SEGMENT_ID/YYYY-MM-dd/RANDOM_UUID-TIMESTAMP_WHEN_EXPORT_STARTED/filename.zip</code></p>\n<p><strong>Example ZIP:</strong> <code>braze.docs.bucket/segment-export/abc56c0c-rd4a-pb0a-870pdf4db07q/2019-04-25/d9696570-dfb7-45ae-baa2-25e302r2da27-1556044807/114f0226319130e1a4770f2602b5639a.zip</code></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Property</th>\n<th>Details</th>\n<th>Shown in Example as</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>bucket-name</code></td>\n<td><code>Fixed based on your bucket name.</code></td>\n<td><code>braze.docs.bucket</code></td>\n</tr>\n<tr>\n<td><code>segment-export</code></td>\n<td><code>Fixed.</code></td>\n<td><code>segment-export</code></td>\n</tr>\n<tr>\n<td><code>SEGMENT_ID</code></td>\n<td><code>Included in the export request.</code></td>\n<td><code>abc56c0c-rd4a-pb0a-870pdf4db07q</code></td>\n</tr>\n<tr>\n<td><code>YYYY-MM-dd</code></td>\n<td><code>The date the successful callback is received.</code></td>\n<td><code>2019-04-25</code></td>\n</tr>\n<tr>\n<td><code>RANDOM_UUID</code></td>\n<td><code>A random UUID generated by Braze at the time of the request.</code></td>\n<td><code>d9696570-dfb7-45ae-baa2-25e302r2da27</code></td>\n</tr>\n<tr>\n<td><code>TIMESTAMP_WHEN_EXPORT_STARTED</code></td>\n<td><code>Unix time (seconds since 2017-01-01:00:00:00Z) that the export was requested in UTC.</code></td>\n<td><code>1556044807</code></td>\n</tr>\n<tr>\n<td><code>filename</code></td>\n<td><code>Random per file.</code></td>\n<td><code>114f0226319130e1a4770f2602b5639a</code></td>\n</tr>\n</tbody>\n</table>\n</div><p>Be aware that if you do not provide your cloud storage credentials, there is a limitation on the amount of data you can export from this endpoint. Depending on the fields you’re exporting and the number of users, the file transfer may fail if it is too large. A best practice is to specify which fields you want to export using <code>fields_to_export</code> and specify only the fields you need to keep the size of the transfer lower. If you are getting errors generating the file, consider breaking your user base into more segments based on a random bucket number (for example, create a segment where a random bucket number is less than 1,000 or between 1,000 and 2,000).</p>\n<p>In either scenario, you may optionally provide a <code>callback_endpoint</code> to be notified when the export is ready. If the <code>callback_endpoint</code> is provided, we will make a post request to the provided address when the download is ready. The body of the post will be “success”:true. If you have not added S3 credentials to Braze, then the body of the post will additionally have the attribute <code>url</code> with the download URL as the value.</p>\n<p>Larger user bases will result in longer export times. For example, an app with 20 million users could take an hour or more.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>segment_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Identifier for the segment to be exported. See <a href=\"https://www.braze.com/docs/api/identifier_types/\">segment identifier</a>.  <br />  <br />The <code>segment_id</code> for a given segment can be found on the <a href=\"https://www.braze.com/docs/user_guide/administrative/app_settings/api_settings_tab/\">API Keys</a> page within your Braze account or you can use the <a href=\"https://www.braze.com/docs/api/endpoints/export/segments/get_segment/\">Segment List Endpoint</a>.</td>\n</tr>\n<tr>\n<td><code>callback_endpoint</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>Endpoint to post a download URL to when the export is available.</td>\n</tr>\n<tr>\n<td><code>fields_to_export</code></td>\n<td>Required*</td>\n<td>Array of strings</td>\n<td>Name of user data fields to export, you may also export custom attributes.  <br />  <br /><em>*Beginning April 2021, new accounts must specify specific fields to export.</em></td>\n</tr>\n<tr>\n<td><code>custom_attributes_to_export</code></td>\n<td>Optional</td>\n<td>Array of strings</td>\n<td>Name of specific custom attribute to export. Up to 500 custom attributes can be exported. To create and manage custom attributes in the dashboard, go to <strong>Data Settings</strong> &gt; <strong>Custom Attributes</strong>.</td>\n</tr>\n<tr>\n<td><code>output_format</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>When using your own S3 bucket, allows you to specify file format as <code>zip</code> or <code>gzip</code>. Defaults to ZIP file format.</td>\n</tr>\n</tbody>\n</table>\n</div><p>If <code>custom_attributes</code> is included in the <code>fields_to_export</code> parameter, all custom attributes are exported regardless of what is in <code>custom_attributes_to_export</code>. If your goal is to export specific attributes, <code>custom_attributes</code> should not be included in the <code>fields_to_export</code> parameter. Instead, use the <code>custom_attributes_to_export</code> parameter.</p>\n<h3 id=\"fields-to-export\">Fields to export</h3>\n<p>The following is a list of valid <code>fields_to_export</code>. Using <code>fields_to_export</code> to minimize the data returned can improve the response time of this API endpoint:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field to export</th>\n<th>Data type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>apps</code></td>\n<td>Array</td>\n<td>Apps this user has logged sessions for, which includes the fields:  <br />  <br />- <code>name</code>: app name  <br />- <code>platform</code>: app platform, such as iOS, Android, or Web  <br />- <code>version</code>: app version number or name  <br />- <code>sessions</code>: total number of sessions for this app  <br />- <code>first_used</code>: date of first session  <br />- <code>last_used</code>: date of last session  <br />  <br />All fields are strings.</td>\n</tr>\n<tr>\n<td><code>attributed_campaign</code></td>\n<td>String</td>\n<td>Data from <a href=\"https:/www.braze.com/docs/partners/message_orchestration/attribution\">attribution integrations</a>, if set up. Identifier for a particular ad campaign.</td>\n</tr>\n<tr>\n<td><code>attributed_source</code></td>\n<td>String</td>\n<td>Data from <a href=\"https:/www.braze.com/docs/partners/message_orchestration/attribution\">attribution integrations</a>, if set up. Identifier for the platform the ad was on.</td>\n</tr>\n<tr>\n<td><code>attributed_adgroup</code></td>\n<td>String</td>\n<td>Data from <a href=\"https:/www.braze.com/docs/partners/message_orchestration/attribution\">attribution integrations</a>, if set up. Identifier for an optional sub-grouping below campaign.</td>\n</tr>\n<tr>\n<td><code>attributed_ad</code></td>\n<td>String</td>\n<td>Data from <a href=\"https:/www.braze.com/docs/partners/message_orchestration/attribution\">attribution integrations</a>, if set up. Identifier for an optional sub-grouping below campaign and adgroup.</td>\n</tr>\n<tr>\n<td><code>braze_id</code></td>\n<td>String</td>\n<td>Device-specific unique user identifier set by Braze for this user.</td>\n</tr>\n<tr>\n<td><code>country</code></td>\n<td>String</td>\n<td>User's country using <a href=\"https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\">ISO 3166-1 alpha-2</a> standard.</td>\n</tr>\n<tr>\n<td><code>created_at</code></td>\n<td>String</td>\n<td>Date and time for when the user profile was created, in ISO 8601 format.</td>\n</tr>\n<tr>\n<td><code>custom_attributes</code></td>\n<td>Object</td>\n<td>Custom attribute key-value pairs for this user.</td>\n</tr>\n<tr>\n<td><code>custom_events</code></td>\n<td>Array</td>\n<td>Custom events attributed to this user in the last 90 days.</td>\n</tr>\n<tr>\n<td><code>devices</code></td>\n<td>Array</td>\n<td>Information about the user's device, which could include the following depending on platform:  <br />  <br />- <code>model</code>: Device's model name  <br />- <code>os</code>: Device's operating system  <br />- <code>carrier</code>: Device's service carrier, if available  <br />- <code>idfv</code>: (iOS) Braze's device identifier, the Apple Identifier for Vendor, if exists  <br />- <code>idfa</code>: (iOS) Identifier for Advertising, if exists  <br />- <code>device_id</code>: (Android) Braze's device identifier  <br />- <code>google_ad_id</code>: (Android) Google Play Advertising Identifier, if exists  <br />- <code>roku_ad_id</code>: (Roku) Roku Advertising Identifier  <br />- <code>ad_tracking_enabled</code>: If ad tracking is enabled on the device, can be true or false</td>\n</tr>\n<tr>\n<td><code>dob</code></td>\n<td>String</td>\n<td>User's date of birth in the format <code>YYYY-MM-DD</code>.</td>\n</tr>\n<tr>\n<td><code>email</code></td>\n<td>String</td>\n<td>User's email address.</td>\n</tr>\n<tr>\n<td><code>external_id</code></td>\n<td>String</td>\n<td>Unique user identifier for identified users.</td>\n</tr>\n<tr>\n<td><code>first_name</code></td>\n<td>String</td>\n<td>User's first name.</td>\n</tr>\n<tr>\n<td><code>gender</code></td>\n<td>String</td>\n<td>User's gender. Possible values are:  <br />  <br />- <code>M</code>: male  <br />- <code>F</code>: female  <br />- <code>O</code>: other  <br />- <code>N</code>: not applicable  <br />- <code>P</code>: prefer not to say  <br />- <code>nil</code>: unknown</td>\n</tr>\n<tr>\n<td><code>home_city</code></td>\n<td>String</td>\n<td>User's home city.</td>\n</tr>\n<tr>\n<td><code>language</code></td>\n<td>String</td>\n<td>User's language in ISO-639-1 standard.</td>\n</tr>\n<tr>\n<td><code>last_coordinates</code></td>\n<td>Array of floats</td>\n<td>User's most recent device location, formatted as <code>[longitude, latitude]</code>.</td>\n</tr>\n<tr>\n<td><code>last_name</code></td>\n<td>String</td>\n<td>User's last name.</td>\n</tr>\n<tr>\n<td><code>phone</code></td>\n<td>String</td>\n<td>User's telephone number in E.164 format.</td>\n</tr>\n<tr>\n<td><code>purchases</code></td>\n<td>Array</td>\n<td>Purchases this user has made in the last 90 days.</td>\n</tr>\n<tr>\n<td><code>random_bucket</code></td>\n<td>Integer</td>\n<td>User's <a href=\"https:/www.braze.com/docs/user_guide/data_and_analytics/braze_currents/event_glossary/customer_behavior_events#random-bucket-number-event\">random bucket number</a>, used to create uniformly distributed segments of random users.</td>\n</tr>\n<tr>\n<td><code>time_zone</code></td>\n<td>String</td>\n<td>User's time zone in the same format as the IANA Time Zone Database.</td>\n</tr>\n<tr>\n<td><code>total_revenue</code></td>\n<td>Float</td>\n<td>Total revenue attributed to this user. Total revenue is calculated based on purchases the user made during conversion windows for the campaigns and Canvases they received.</td>\n</tr>\n<tr>\n<td><code>uninstalled_at</code></td>\n<td>Timestamp</td>\n<td>Date and time the user uninstalls the app. Omitted if the app has not been uninstalled.</td>\n</tr>\n<tr>\n<td><code>user_aliases</code></td>\n<td>Object</td>\n<td><a href=\"https:/www.braze.com/docs/api/objects_filters/user_alias_object#user-alias-object-specification\">User aliases object</a> containing the <code>alias_name</code> and <code>alias_label</code>, if exists.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"important-reminders\">Important reminders</h3>\n<ul>\n<li><p>The fields for <code>custom_events</code>, <code>purchases</code>, <code>campaigns_received</code>, and <code>canvases_received</code> will contain only contain data from the last 90 days.</p>\n</li>\n<li><p>Both <code>custom_events</code> and <code>purchases</code> contain fields for <code>first</code> and <code>count</code>. Both of these fields will reflect information from all time, and will not be limited to just data from the last 90 days. For example, if a particular user first did the event prior to 90 days ago, this will be accurately reflected in the <code>first</code> field, and the <code>count</code> field will take into account events that occurred prior to the last 90 days as well.</p>\n</li>\n<li><p>The number of concurrent segment exports a company can run at the endpoint level is capped at 100. Attempts that surpass this limit will result in an error.</p>\n</li>\n<li><p>Attempting to export a segment a second time while the first export job is still running will result in a 429 error.</p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n    \"message\": (required, string) the status of the export, returns 'success' when completed without errors,\n    \"object_prefix\": (required, string) the filename prefix that will be used for the JSON file produced by this export, e.g. 'bb8e2a91-c4aa-478b-b3f2-a4ee91731ad1-1464728599',\n    \"url\" : (optional, string) the URL where the segment export data can be downloaded if you do not have your own S3 credentials\n}\n\n</code></pre>\n<p>Once made available, the URL will only be valid for a few hours. As such, we highly recommend that you add your own S3 credentials to Braze.</p>\n<h3 id=\"example-user-export-file-output\">Example user export file output</h3>\n<p>User export object (we will include the least data possible - if a field is missing from the object it should be assumed to be null, false, or empty):</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"external_id\" : (string),\n    \"user_aliases\" : [\n      {\n        \"alias_name\" : (string),\n        \"alias_label\" : (string)\n      }\n    ],\n    \"braze_id\": (string),\n    \"first_name\" : (string),\n    \"last_name\" : (string),\n    \"email\" : (string),\n    \"dob\" : (string) date for the user's date of birth,\n    \"home_city\" : (string),\n    \"country\" : (string),\n    \"phone\" : (string),\n    \"language\" : (string) ISO-639 two letter code,\n    \"time_zone\" : (string),\n    \"last_coordinates\" : (array of float) [lon, lat],\n    \"gender\" : (string) \"M\" | \"F\",\n    \"total_revenue\" : (float),\n    \"attributed_campaign\" : (string),\n    \"attributed_source\" : (string),\n    \"attributed_adgroup\" : (string),\n    \"attributed_ad\" : (string),\n    \"push_subscribe\" : (string) \"opted_in\" | \"subscribed\" | \"unsubscribed\",\n    \"email_subscribe\" : (string) \"opted_in\" | \"subscribed\" | \"unsubscribed\",\n    \"custom_attributes\" : (object) custom attribute key value pairs,\n    \"custom_events\" : [\n        {\n            \"name\" : (string),\n            \"first\" : (string) date,\n            \"last\" : (string) date,\n            \"count\" : (int)\n        },\n        ...\n    ],\n    \"purchases\" : [\n        {\n            \"name\" : (string),\n            \"first\" : (string) date,\n            \"last\" : (string) date,\n            \"count\" : (int)\n        },\n        ...\n    ],\n    \"devices\" : [\n        {\n            \"model\" : (string),\n            \"os\" : (string),\n            \"carrier\" : (string),\n            \"idfv\" : (string) only included for iOS devices,\n            \"idfa\" : (string) only included for iOS devices when IDFA collection is enabled,\n            \"google_ad_id\" : (string) only included for Android devices when Google Play Advertising Identifier collection is enabled,\n            \"roku_ad_id\" : (string) only included for Roku devices,\n            \"windows_ad_id\" : (string) only included for Windows devices,\n            \"ad_tracking_enabled\" : (bool)\n        },\n        ...\n    ],\n    \"push_tokens\" : [\n        {\n            \"app\" : (string) app name,\n            \"platform\" : (string),\n            \"token\" : (string)\n        },\n        ...\n    ],\n    \"apps\" : [\n        {\n            \"name\" : (string),\n            \"platform\" : (string),\n            \"version\" : (string),\n            \"sessions\" : (string),\n            \"first_used\" : (string) date,\n            \"last_used\" : (string) date\n        },\n        ...\n    ],\n    \"campaigns_received\" : [\n        {\n            \"name\" : (string),\n            \"last_received\" : (string) date,\n            \"engaged\" : {\n                \"opened_email\" : (bool),\n                \"opened_push\" : (bool),\n                \"clicked_email\" : (bool),\n                \"clicked_in_app_message\" : (bool)\n            },\n            \"converted\" : (bool),\n            \"api_campaign_id\" : (string),\n            \"variation_name\" : (optional, string) exists only if it is a multivariate campaign,\n            \"variation_api_id\" : (optional, string) exists only if it is a multivariate campaign,\n            \"in_control\" : (optional, bool) exists only if it is a multivariate campaign\n        },\n        ...\n    ],\n    \"canvases_received\": [\n        {\n            \"name\": (string),\n            \"api_canvas_id\": (string),\n            \"last_received_message\": (string) date,\n            \"last_entered\": (string) date,\n            \"variation_name\": (string),\n            \"in_control\": (bool),\n            \"last_exited\": (string) date,\n            \"steps_received\": [\n                {\n                    \"name\": (string),\n                    \"api_canvas_step_id\": (string),\n                    \"last_received\": (string) date\n                },\n                {\n                    \"name\": (string),\n                    \"api_canvas_step_id\": (string),\n                    \"last_received\": (string) date\n                },\n                {\n                    \"name\": (string),\n                    \"api_canvas_step_id\": (string),\n                    \"last_received\": (string) date\n                }\n            ]\n        },\n        ...\n    ],\n    \"cards_clicked\" : [\n        {\n            \"name\" : (string)\n        },\n        ...\n    ]\n}\n\n</code></pre>\n<h4 id=\"sample-output\"><strong>Sample output</strong></h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"created_at\" : \"2020-07-10 15:00:00.000 UTC\",\n    \"external_id\" : \"A8i3mkd99\",\n    \"user_aliases\" : [\n      {\n        \"alias_name\" : \"user_123\",\n        \"alias_label\" : \"amplitude_id\"\n      }\n    ],\n    \"braze_id\": \"5fbd99bac125ca40511f2cb1\",\n    \"random_bucket\" : 2365,\n    \"first_name\" : \"Jane\",\n    \"last_name\" : \"Doe\",\n    \"email\" : \"example@braze.com\",\n    \"dob\" : \"1980-12-21\",\n    \"home_city\" : \"Chicago\",\n    \"country\" : \"US\",\n    \"phone\" : \"+442071838750\",\n    \"language\" : \"en\",\n    \"time_zone\" : \"Eastern Time (US &amp; Canada)\",\n    \"last_coordinates\" : [41.84157636433568, -87.83520818508256],\n    \"gender\" : \"F\",\n    \"total_revenue\" : 65,\n    \"attributed_campaign\" : \"braze_test_campaign_072219\",\n    \"attributed_source\" : \"braze_test_source_072219\",\n    \"attributed_adgroup\" : \"braze_test_adgroup_072219\",\n    \"attributed_ad\" : \"braze_test_ad_072219\",\n    \"push_subscribe\" : \"opted_in\",\n    \"push_opted_in_at\": \"2020-01-26T22:45:53.953Z\",\n    \"email_subscribe\" : \"subscribed\",\n    \"custom_attributes\":\n    {\n      \"loyaltyId\": \"37c98b9d-9a7f-4b2f-a125-d873c5152856\",\n      \"loyaltyPoints\": \"321\",\n       \"loyaltyPointsNumber\": 107\n    },\n    \"custom_events\": [\n      {\n        \"name\": \"Loyalty Acknowledgement\",\n        \"first\": \"2021-06-28T17:02:43.032Z\",\n        \"last\": \"2021-06-28T17:02:43.032Z\",\n        \"count\": 1\n      },\n      ...\n    ],\n    \"purchases\": [\n      {\n        \"name\": \"item_40834\",\n        \"first\": \"2021-09-05T03:45:50.540Z\",\n        \"last\": \"2022-06-03T17:30:41.201Z\",\n        \"count\": 10\n      },\n      ...\n    ],\n    \"devices\": [\n      {\n        \"model\": \"Pixel XL\",\n        \"os\": \"Android (Q)\",\n        \"carrier\": null,\n        \"device_id\": \"312ef2c1-83db-4789-967-554545a1bf7a\",\n        \"ad_tracking_enabled\": true\n      },\n      ...\n    ],\n    \"push_tokens\": [\n      {\n        \"app\": \"MovieCanon\",\n        \"platform\": \"Android\",\n        \"token\": \"12345abcd\",\n        \"device_id\": \"312ef2c1-83db-4789-967-554545a1bf7a\",\n        \"notifications_enabled\": true\n      },\n      ...\n    ],\n    \"apps\": [\n      {\n        \"name\": \"MovieCannon\",\n        \"platform\": \"Android\",\n        \"version\": \"3.29.0\",\n        \"sessions\": 1129,\n        \"first_used\": \"2020-02-02T19:56:19.142Z\",\n        \"last_used\": \"2021-11-11T00:25:19.201Z\"\n      },\n      ...\n    ],\n    \"campaigns_received\": [\n      {\n        \"name\": \"Email Unsubscribe\",\n        \"api_campaign_id\": \"d72fdc84-ddda-44f1-a0d5-0e79f47ef942\",\n        \"last_received\": \"2022-06-02T03:07:38.105Z\",\n        \"engaged\":\n        {\n           \"opened_email\": true\n        },\n        \"converted\": true,\n        \"multiple_converted\":\n        {\n          \"Primary Conversion Event - A\": true\n        },\n        \"in_control\": false,\n        \"variation_name\": \"Variant 1\",\n        \"variation_api_id\": \"1bddc73a-a134-4784-9134-5b5574a9e0b8\"\n      },\n      ...\n    ],\n    \"canvases_received\": [\n      {\n        \"name\": \"Non Global  Holdout Group 4/21/21\",\n        \"api_canvas_id\": \"46972a9d-dc81-473f-aa03-e3473b4ed781\",\n        \"last_received_message\": \"2021-07-07T20:46:24.136Z\",\n        \"last_entered\": \"2021-07-07T20:45:24.000+00:00\",\n        \"variation_name\": \"Variant 1\",\n        \"in_control\": false,\n        \"last_entered_control_at\": null,\n        \"last_exited\": \"2021-07-07T20:46:24.136Z\",\n        \"steps_received\": [\n          {\n            \"name\": \"Step\",\n            \"api_canvas_step_id\": \"43d1a349-c3c8-4be1-9fbe-ce708e4d1c39\",\n            \"last_received\": \"2021-07-07T20:46:24.136Z\"\n          },\n          ...\n        ]\n      }\n      ...\n    ],\n    \"cards_clicked\" : [\n      {\n        \"name\" : \"Loyalty Promo\"\n      },\n      ...\n    ]\n}\n\n</code></pre>\n<blockquote>\n<p>Tip: For help with CSV and API exports, visit Export troubleshooting.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["users","export","segment"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"cfa6fa98-632c-4f25-8789-6c3f220b9457"},{"name":"Export user profile by Global Control Group","id":"aa3d8b90-d984-48f0-9287-57aa30469de2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"callback_endpoint\" : \"\",\n  \"fields_to_export\" : [\"email\", \"braze_id\"],\n  \"output_format\" : \"zip\"\n}"},"url":"https://{{instance_url}}/users/export/global_control_group","description":"<blockquote>\n<p>Use this endpoint to export all users within a Global Control Group. </p>\n</blockquote>\n<p>User data is exported as multiple files of user JSON objects separated by new lines (such as one JSON object per line).</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Warning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Individual custom attributes cannot be exported. However, all custom attributes can be exported by including <code>custom_attributes</code> in the <code>fields_to_export</code> array (for example, <code>[‘first_name’, ‘email’, ‘custom_attributes’]</code>).</td>\n</tr>\n</tbody>\n</table>\n</div><p>To use this endpoint, you’ll need to generate an API key with the <code>users.export.global_control_group</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"http://localhost:4000/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"credential-based-response-details\">Credential-based response details</h2>\n<p>For information regarding credentials-based response details, visit this <a href=\"https://www.braze.com/docs/api/endpoints/export/user_data/post_users_global_control_group/#credentials-based-response-details\">section</a> in the Braze API docs.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>callback_endpoint</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>Endpoint to post a download URL to when the export is available.</td>\n</tr>\n<tr>\n<td><code>fields_to_export</code></td>\n<td>Required*</td>\n<td>Array of strings</td>\n<td>Name of user data fields to export, you may also export custom attributes.  <br />  <br /><em>*Beginning April 2021, new accounts must specify specific fields to export.</em></td>\n</tr>\n<tr>\n<td><code>output_format</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>When using your own S3 bucket, allows to specify file format as <code>zip</code> or <code>gzip</code>. Defaults to ZIP file format.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"fields-to-export\">Fields to export</h2>\n<p>The following is a list of valid <code>fields_to_export</code>. Using <code>fields_to_export</code> to minimize the data returned can improve response time of this API endpoint:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field to export</th>\n<th>Data type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>apps</code></td>\n<td>Array</td>\n<td>Apps this user has logged sessions for, which includes the fields:  <br />  <br />- <code>name</code>: app name  <br />- <code>platform</code>: app platform, such as iOS, Android, or Web  <br />- <code>version</code>: app version number or name  <br />- <code>sessions</code>: total number of sessions for this app  <br />- <code>first_used</code>: date of first session  <br />- <code>last_used</code>: date of last session  <br />  <br />All fields are strings.</td>\n</tr>\n<tr>\n<td><code>attributed_campaign</code></td>\n<td>String</td>\n<td>Data from <a href=\"https:/www.braze.com/docs/partners/message_orchestration/attribution\">attribution integrations</a>, if set up. Identifier for a particular ad campaign.</td>\n</tr>\n<tr>\n<td><code>attributed_source</code></td>\n<td>String</td>\n<td>Data from <a href=\"https:/www.braze.com/docs/partners/message_orchestration/attribution\">attribution integrations</a>, if set up. Identifier for the platform the ad was on.</td>\n</tr>\n<tr>\n<td><code>attributed_adgroup</code></td>\n<td>String</td>\n<td>Data from <a href=\"https:/www.braze.com/docs/partners/message_orchestration/attribution\">attribution integrations</a>, if set up. Identifier for an optional sub-grouping below campaign.</td>\n</tr>\n<tr>\n<td><code>attributed_ad</code></td>\n<td>String</td>\n<td>Data from <a href=\"https:/www.braze.com/docs/partners/message_orchestration/attribution\">attribution integrations</a>, if set up. Identifier for an optional sub-grouping below campaign and adgroup.</td>\n</tr>\n<tr>\n<td><code>braze_id</code></td>\n<td>String</td>\n<td>Device-specific unique user identifier set by Braze for this user.</td>\n</tr>\n<tr>\n<td><code>country</code></td>\n<td>String</td>\n<td>User's country using <a href=\"https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\">ISO 3166-1 alpha-2</a> standard.</td>\n</tr>\n<tr>\n<td><code>created_at</code></td>\n<td>String</td>\n<td>Date and time for when the user profile was created, in ISO 8601 format.</td>\n</tr>\n<tr>\n<td><code>custom_attributes</code></td>\n<td>Object</td>\n<td>Custom attribute key-value pairs for this user.</td>\n</tr>\n<tr>\n<td><code>custom_events</code></td>\n<td>Array</td>\n<td>Custom events attributed to this user in the last 90 days.</td>\n</tr>\n<tr>\n<td><code>devices</code></td>\n<td>Array</td>\n<td>Information about the user's device, which could include the following depending on platform:  <br />  <br />- <code>model</code>: Device's model name  <br />- <code>os</code>: Device's operating system  <br />- <code>carrier</code>: Device's service carrier, if available  <br />- <code>idfv</code>: (iOS) Braze's device identifier, the Apple Identifier for Vendor, if exists  <br />- <code>idfa</code>: (iOS) Identifier for Advertising, if exists  <br />- <code>device_id</code>: (Android) Braze's device identifier  <br />- <code>google_ad_id</code>: (Android) Google Play Advertising Identifier, if exists  <br />- <code>roku_ad_id</code>: (Roku) Roku Advertising Identifier  <br />- <code>ad_tracking_enabled</code>: If ad tracking is enabled on the device, can be true or false</td>\n</tr>\n<tr>\n<td><code>dob</code></td>\n<td>String</td>\n<td>User's date of birth in the format <code>YYYY-MM-DD</code>.</td>\n</tr>\n<tr>\n<td><code>email</code></td>\n<td>String</td>\n<td>User's email address.</td>\n</tr>\n<tr>\n<td><code>external_id</code></td>\n<td>String</td>\n<td>Unique user identifier for identified users.</td>\n</tr>\n<tr>\n<td><code>first_name</code></td>\n<td>String</td>\n<td>User's first name.</td>\n</tr>\n<tr>\n<td><code>gender</code></td>\n<td>String</td>\n<td>User's gender. Possible values are:  <br />  <br />- <code>M</code>: male  <br />- <code>F</code>: female  <br />- <code>O</code>: other  <br />- <code>N</code>: not applicable  <br />- <code>P</code>: prefer not to say  <br />- <code>nil</code>: unknown</td>\n</tr>\n<tr>\n<td><code>home_city</code></td>\n<td>String</td>\n<td>User's home city.</td>\n</tr>\n<tr>\n<td><code>language</code></td>\n<td>String</td>\n<td>User's language in ISO-639-1 standard.</td>\n</tr>\n<tr>\n<td><code>last_coordinates</code></td>\n<td>Array of floats</td>\n<td>User's most recent device location, formatted as <code>[longitude, latitude]</code>.</td>\n</tr>\n<tr>\n<td><code>last_name</code></td>\n<td>String</td>\n<td>User's last name.</td>\n</tr>\n<tr>\n<td><code>phone</code></td>\n<td>String</td>\n<td>User's telephone number in E.164 format.</td>\n</tr>\n<tr>\n<td><code>purchase</code>s</td>\n<td>Array</td>\n<td>Purchases this user has made in the last 90 days.</td>\n</tr>\n<tr>\n<td><code>random_bucket</code></td>\n<td>Integer</td>\n<td>User's <a href=\"https:/www.braze.com/docs/user_guide/data_and_analytics/braze_currents/event_glossary/customer_behavior_events#random-bucket-number-event\">random bucket number</a>, used to create uniformly distributed segments of random users.</td>\n</tr>\n<tr>\n<td><code>time_zone</code></td>\n<td>String</td>\n<td>User's time zone in the same format as the IANA Time Zone Database.</td>\n</tr>\n<tr>\n<td><code>total_revenue</code></td>\n<td>Float</td>\n<td>Total revenue attributed to this user. Total revenue is calculated based on purchases the user made during conversion windows for the campaigns and Canvases they received.</td>\n</tr>\n<tr>\n<td><code>uninstalled_at</code></td>\n<td>Timestamp</td>\n<td>Date and time the user uninstalls the app. Omitted if the app has not been uninstalled.</td>\n</tr>\n<tr>\n<td><code>user_aliases</code></td>\n<td>Object</td>\n<td><a href=\"https:/www.braze.com/docs/api/objects_filters/user_alias_object#user-alias-object-specification\">User aliases object</a> containing the <code>alias_name</code> and <code>alias_label</code>, if exists.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n    \"message\": (required, string) the status of the export, returns 'success' when completed without errors,\n    \"object_prefix\": (required, string) the filename prefix that will be used for the JSON file produced by this export, e.g.,'bb8e2a91-c4aa-478b-b3f2-a4ee91731ad1-1464728599',\n    \"url\" : (optional, string) the URL where the segment export data can be downloaded if you do not have your own S3 credentials\n}\n\n</code></pre><p>Once made available, the URL will only be valid for a few hours. As such, we highly recommend that you add your own S3 credentials to Braze.</p>\n<h3 id=\"sample-user-export-file-output\">Sample user export file output</h3>\n<p>User export object (we will include the least data possible - if a field is missing from the object it should be assumed to be null, false, or empty):</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"created_at\" : (string),\n    \"external_id\" : (string),\n    \"user_aliases\" : [\n      {\n        \"alias_name\" : (string),\n        \"alias_label\" : (string)\n      }\n    ],\n    \"braze_id\": (string),\n    \"first_name\" : (string),\n    \"last_name\" : (string),\n    \"email\" : (string),\n    \"dob\" : (string) date for the user's date of birth,\n    \"home_city\" : (string),\n    \"country\" : (string) ISO-3166-1 alpha-2 standard,\n    \"phone\" : (string),\n    \"language\" : (string) ISO-639-1 standard,\n    \"time_zone\" : (string),\n    \"last_coordinates\" : (array of float) [lon, lat],\n    \"gender\" : (string) \"M\" | \"F\",\n    \"total_revenue\" : (float),\n    \"attributed_campaign\" : (string),\n    \"attributed_source\" : (string),\n    \"attributed_adgroup\" : (string),\n    \"attributed_ad\" : (string),\n    \"custom_attributes\" : (object) custom attribute key-value pairs,\n    \"custom_events\" : [\n      {\n        \"name\" : (string),\n        \"first\" : (string) date,\n        \"last\" : (string) date,\n        \"count\" : (int)\n      },\n      ...\n    ],\n    \"purchases\" : [\n      {\n        \"name\" : (string),\n        \"first\" : (string) date,\n        \"last\" : (string) date,\n         \"count\" : (int)\n      },\n      ...\n    ],\n    \"devices\" : [\n      {\n        \"model\" : (string),\n        \"os\" : (string),\n        \"carrier\" : (string),\n        \"idfv\" : (string) only included for iOS devices when IDFV collection is enabled,\n        \"idfa\" : (string) only included for iOS devices when IDFA collection is enabled,\n        \"google_ad_id\" : (string) only included for Android devices when Google Play Advertising Identifier collection is enabled,\n        \"roku_ad_id\" : (string) only included for Roku devices,\n        \"ad_tracking_enabled\" : (bool)\n      },\n      ...\n    ],\n    \"apps\" : [\n      {\n        \"name\" : (string),\n        \"platform\" : (string),\n        \"version\" : (string),\n        \"sessions\" : (string),\n        \"first_used\" : (string) date,\n        \"last_used\" : (string) date\n      },\n      ...\n    ],\n}\n\n</code></pre>\n<h3 id=\"sample-output\">Sample output</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n{\n    \"created_at\" : \"2020-07-10 15:00:00.000 UTC\",\n    \"external_id\" : \"A8i3mkd99\",\n    \"user_aliases\" : [\n      {\n        \"alias_name\" : \"user_123\",\n        \"alias_label\" : \"amplitude_id\"\n      }\n    ],\n    \"braze_id\": \"5fbd99bac125ca40511f2cb1\",\n    \"random_bucket\" : 2365,\n    \"first_name\" : \"Jane\",\n    \"last_name\" : \"Doe\",\n    \"email\" : \"example@braze.com\",\n    \"dob\" : \"1980-12-21\",\n    \"home_city\" : \"Chicago\",\n    \"country\" : \"US\",\n    \"phone\" : \"+442071838750\",\n    \"language\" : \"en\",\n    \"time_zone\" : \"Eastern Time (US &amp; Canada)\",\n    \"last_coordinates\" : [41.84157636433568, -87.83520818508256],\n    \"gender\" : \"F\",\n    \"total_revenue\" : 65,\n    \"attributed_campaign\" : \"braze_test_campaign_072219\",\n    \"attributed_source\" : \"braze_test_source_072219\",\n    \"attributed_adgroup\" : \"braze_test_adgroup_072219\",\n    \"attributed_ad\" : \"braze_test_ad_072219\",\n    \"custom_attributes\": \n      {\n        \"loyaltyId\": \"37c98b9d-9a7f-4b2f-a125-d873c5152856\",\n        \"loyaltyPoints\": \"321\",\n        \"loyaltyPointsNumber\": 107\n      },\n    \"custom_events\": [\n      {\n          \"name\": \"Loyalty Acknowledgement\",\n          \"first\": \"2021-06-28T17:02:43.032Z\",\n          \"last\": \"2021-06-28T17:02:43.032Z\",\n          \"count\": 1\n      },\n      ...\n    ],\n    \"purchases\": [\n      {\n        \"name\": \"item_40834\",\n        \"first\": \"2021-09-05T03:45:50.540Z\",\n        \"last\": \"2022-06-03T17:30:41.201Z\",\n        \"count\": 10\n      },\n      ...\n    ],\n    \"devices\": [\n      {\n        \"model\": \"Pixel XL\",\n        \"os\": \"Android (Q)\",\n        \"carrier\": null,\n        \"device_id\": \"312ef2c1-83db-4789-967-554545a1bf7a\",\n        \"ad_tracking_enabled\": true\n      },\n      ...\n    ],\n    \"apps\": [\n      {\n        \"name\": \"MovieCannon\",\n        \"platform\": \"Android\",\n        \"version\": \"3.29.0\",\n        \"sessions\": 1129,\n        \"first_used\": \"2020-02-02T19:56:19.142Z\",\n        \"last_used\": \"2021-11-11T00:25:19.201Z\"\n      },\n      ...\n    ],\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["users","export","global_control_group"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"aa3d8b90-d984-48f0-9287-57aa30469de2"}],"id":"386c0555-e433-4937-8637-f06fbc82b4d2","_postman_id":"386c0555-e433-4937-8637-f06fbc82b4d2","description":""}],"id":"ab13bde6-e353-4682-889f-48da9af2a136","description":"<p>With this collection of endpoints, you can access and export various levels of details on your KPIs, News Feed cards, app sessions, users, segments, campaigns, and Canvases.  </p>\n<p>Make sure you know your <a href=\"https://www.braze.com/docs/user_guide/administrative/access_braze/braze_instances/\">Braze instance</a>, <a href=\"https://www.braze.com/docs/api/api_key/\">API key</a>, and <a href=\"https://www.braze.com/docs/api/identifier_types/\">API identifier</a> when building out your parameters and request bodies.</p>\n","event":[{"listen":"prerequest","script":{"id":"83eafd8c-742a-49ca-98e5-9ec576024e11","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"79beea13-2613-4cfc-ba5f-4f679fc60508","type":"text/javascript","exec":[""]}}],"_postman_id":"ab13bde6-e353-4682-889f-48da9af2a136"},{"name":"Messages","item":[{"name":"Live Activities","item":[{"name":"Update Live Activity","id":"2300226e-f26a-4154-9bcc-5883f1f294cd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"app_id\": \"{YOUR-APP-API-IDENTIFIER}\",\n    \"activity_id\": \"live-activity-1\",\n    \"content_state\": {\n        \"teamOneScore\": 2,\n        \"teamTwoScore\": 4\n    },\n    \"end_activity\": false,\n    \"dismissal_date\": \"2023-02-28T00:00:00+0000\",\n    \"stale_date\": \"2023-02-27T16:55:49+0000\",\n    \"notification\": {\n        \"alert\": {\n            \"body\": \"It's halftime! Let's look at the scores\",\n            \"title\": \"Halftime\"\n        }\n    }\n}"},"url":"https://{{instance_url}}/messages/live_activity/update","description":"<blockquote>\n<p>Use this endpoint to update and end <a href=\"https://www.braze.com/docs/developer_guide/platform_integration_guides/swift/live_activities/live_activities/\">Live Activities</a> displayed by your iOS app. This endpoint requires additional setup. </p>\n</blockquote>\n<p>After you register a Live Activity, you can pass a JSON payload to update your Apple Push Notification service (APNs). See Apple’s documentation on <a href=\"https://developer.apple.com/documentation/activitykit/updating-and-ending-your-live-activity-with-activitykit-push-notifications\">updating your Live Activity with push notification payloads</a> for more information.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need to complete the following:</p>\n<ul>\n<li><p>Generate an API key with the <code>messages.live_activity.update</code> permission.</p>\n</li>\n<li><p>Register a Live Activity <a href=\"https://www.braze.com/docs/developer_guide/platform_integration_guides/swift/live_activities/live_activities/?tab=remote#step-2-start-the-activity\">remotely</a> or <a href=\"https://www.braze.com/docs/developer_guide/platform_integration_guides/swift/live_activities/live_activities/?tab=local#step-2-start-the-activity\">locally</a> using the Braze Swift SDK.</p>\n</li>\n</ul>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>app_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>App <a href=\"https://www.braze.com/docs/api/identifier_types/#the-app-identifier\">API identifier</a> retrieved from the <a href=\"https://www.braze.com/docs/user_guide/administrative/app_settings/api_settings_tab/\">API Keys</a> page.</td>\n</tr>\n<tr>\n<td><code>activity_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>When you register your Live Activity using <a href=\"https://braze-inc.github.io/braze-swift-sdk/documentation/brazekit/braze/liveactivities-swift.class\"><code>launchActivity</code></a>, you use the <code>pushTokenTag</code> parameter to name the Activity's push token to a custom string.  <br />  <br />Set <code>activity_id</code> to this custom string to define which Live Activity you want to update.</td>\n</tr>\n<tr>\n<td><code>content_state</code></td>\n<td>Required</td>\n<td>Object</td>\n<td>You define the <code>ContentState</code> parameters when you create your Live Activity. Pass the updated values for your <code>ContentState</code> using this object.  <br />  <br />The format of this request must match the shape you initially defined.</td>\n</tr>\n<tr>\n<td><code>end_activity</code></td>\n<td>Optional</td>\n<td>Boolean</td>\n<td>If <code>true</code>, this request ends the Live Activity.</td>\n</tr>\n<tr>\n<td><code>dismissal_date</code></td>\n<td>Optional</td>\n<td>Datetime  <br />(<a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO-8601</a> string)</td>\n<td>This parameter defines the time to remove the Live Activity from the user's UI. If this time is in the past, the Live Activity will be removed immediately.</td>\n</tr>\n<tr>\n<td><code>stale_date</code></td>\n<td>Optional</td>\n<td>Datetime  <br />(<a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO-8601</a> string)</td>\n<td>This parameter tells the system when the Live Activity content is marked as outdated in the user's UI.</td>\n</tr>\n<tr>\n<td><code>notification</code></td>\n<td>Optional</td>\n<td>Object</td>\n<td>Include an <a href=\"https://www.braze.com/docs/api/objects_filters/messaging/apple_object/\"><code>apple_push</code></a> object to define a push notification. This behavior of this push notification depends on if the user is active or if the user is using a proxy device. {::nomarkdown}  <br />  <br />  <br />  <br />  <br />  <br />- If a <code>notification</code> is included and the user is active on their iPhone when the update is delivered, the updated Live Activity UI will slide down and display like a push notification.  <br />- If a <code>notification</code> is included and the user is not active on their iPhone, their screen will light up to display the updated Live Activity UI on their lock screen.  <br />- The <code>notification alert</code> will not display as a standard push notification. Additionally, if a user has a proxy device, like an Apple Watch, the <code>alert</code> will be displayed there.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\">Response</h2>\n<p>There are two status code responses for this endpoint: <code>201</code> and <code>4XX</code>.</p>\n<h3 id=\"example-success-response\">Example success response</h3>\n<p>A <code>201</code> status code is returned if the request was formatted correctly and we received the request. The status code <code>201</code> could return the following response body.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"success\"\n}\n\n</code></pre>\n<h3 id=\"example-error-response\">Example error response</h3>\n<p>The <code>4XX</code> class of status code indicates a client error. Refer to the <a href=\"https://www.braze.com/docs/api/errors/\">API errors and responses article</a> for more information about errors you may encounter.</p>\n<p>The status code <code>400</code> could return the following response body.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"error\": \"\\nProblem:\\n  message body does not match declared format\\nResolution:\\n  when specifying application/json as content-type, you must pass valid application/json in the request's 'body' \"\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["messages","live_activity","update"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"2300226e-f26a-4154-9bcc-5883f1f294cd"}],"id":"c5c9e387-6919-43d3-8cc3-a8c38a2f7863","_postman_id":"c5c9e387-6919-43d3-8cc3-a8c38a2f7863","description":""},{"name":"Schedule Mesages","item":[{"name":"List upcoming scheduled campaigns and Canvases","id":"6f623cc3-383b-4bf7-b14d-7c56fc5562f5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/messages/scheduled_broadcasts?end_time=2018-09-01T00:00:00-04:00","description":"<blockquote>\n<p>Use this endpoint to return a JSON list of information about scheduled campaigns and entry Canvases between now and a designated <code>end_time</code> specified in the request. </p>\n</blockquote>\n<p>Daily, recurring messages will only appear once with their next occurrence. Results returned in this endpoint include campaigns and Canvases created and scheduled in the Braze dashboard.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an API key with the <code>messages.schedule_broadcasts</code> permission.</p>\n<h3 id=\"rate-limit\">Rate limit</h3>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n  \"scheduled_broadcasts\": [\n    {\n      \"name\" (string) the name of the scheduled broadcast,\n      \"id\" (stings) the Canvas or campaign identifier,\n      \"type\" (string) the broadcast type either Canvas or Campaign,\n      \"tags\" (array) an array of tag names formatted as strings,\n      \"next_send_time\" (string) The next send time formatted in ISO 8601, may also include time zone if not local/intelligent delivery,\n      \"schedule_type\" (string) The schedule type, either local_time_zones, intelligent_delivery or the name of your company's time zone,\n    },\n  ]\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["messages","scheduled_broadcasts"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) String in <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> format</p>\n<p>End date of the range to retrieve upcoming scheduled Campaigns and Canvases. This is treated as midnight in UTC time by the API.</p>\n","type":"text/plain"},"key":"end_time","value":"2018-09-01T00:00:00-04:00"}],"variable":[]}},"response":[],"_postman_id":"6f623cc3-383b-4bf7-b14d-7c56fc5562f5"},{"name":"Delete scheduled messages","id":"5e89355c-0a5d-4d8b-8d89-2fd99bac36b0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","name":"Content-Type","type":"text","value":"application/json"},{"key":"Authorization","type":"text","value":"Bearer {{api_key}}"}],"body":{"mode":"raw","raw":"{\n  \"schedule_id\": \"schedule_identifier\"\n}"},"url":"https://{{instance_url}}/messages/schedule/delete","description":"<blockquote>\n<p>Use this endpoint to cancel a message that you previously scheduled before it has been sent. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an API key with the <code>messages.schedule.delete</code> permission.</p>\n<h3 id=\"rate-limit\">Rate limit</h3>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h3 id=\"request-parameters\">Request parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>schedule_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The schedule_id to delete (obtained from the response to create schedule).</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["messages","schedule","delete"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"5e89355c-0a5d-4d8b-8d89-2fd99bac36b0"},{"name":"Delete scheduled API-triggered Canvases","id":"5f655193-ecd4-495a-93cf-40ab1700efd0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"canvas_id\": \"canvas_identifier\",\n  \"schedule_id\": \"schedule_identifier\"\n}","options":{"raw":{"language":"json"}}},"url":"https://{{instance_url}}/canvas/trigger/schedule/delete","description":"<blockquote>\n<p>Use this endpoint to cancel a Canvas message that you previously scheduled via API-triggered before it has been sent. </p>\n</blockquote>\n<p>Scheduled messages or triggers that are deleted very close to or during the time they were supposed to be sent will be updated with best efforts, so last-second deletions could be applied to all, some, or none of your targeted users.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an API key with the <code>canvas.trigger.schedule.delete</code> permission.</p>\n<h3 id=\"rate-limit\">Rate limit</h3>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>canvas_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>See <a href=\"https://braze.com/docs/api/identifier_types/\">Canvas identifier</a>.</td>\n</tr>\n<tr>\n<td><code>schedule_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The <code>schedule_id</code> to delete (obtained from the response to create schedule).</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["canvas","trigger","schedule","delete"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"5f655193-ecd4-495a-93cf-40ab1700efd0"},{"name":"Delete scheduled API-triggered campaigns","id":"7d34037f-4bf2-4fab-bc9c-c972988051a7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","name":"Content-Type","type":"text","value":"application/json"},{"key":"Authorization","type":"text","value":"Bearer {{api_key}}"}],"body":{"mode":"raw","raw":"{\n  \"campaign_id\": \"campaign_identifier\",\n  \"schedule_id\": \"schedule_identifier\"\n}"},"url":"https://{{instance_url}}/campaigns/trigger/schedule/delete","description":"<blockquote>\n<p>The delete schedule endpoint allows you to cancel a message that you previously scheduled API-triggered Canvases before it has been sent. </p>\n</blockquote>\n<p>Scheduled messages or triggers that are deleted very close to or during the time they were supposed to be sent will be updated with best efforts, so last-second deletions could be applied to all, some, or none of your targeted users.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need to generate an API key with the <code>campaigns.trigger.schedule.delete</code> permission.</p>\n<h3 id=\"rate-limit\">Rate limit</h3>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h3 id=\"request-parameters\">Request parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>campaign_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">campaign identifier</a>.</td>\n</tr>\n<tr>\n<td><code>schedule_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The <code>schedule_id</code> to delete (obtained from the response to create schedule).</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["campaigns","trigger","schedule","delete"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"7d34037f-4bf2-4fab-bc9c-c972988051a7"},{"name":"Create scheduled messages","id":"25272fb8-bc39-41df-9a41-07ecfd76cb1d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"broadcast\": \"false\",\n  \"external_user_ids\": \"external_user_identifiers\",\n  \"user_aliases\": {\n    \"alias_name\" : \"example_name\",\n    \"alias_label\" : \"example_label\"\n  },\n  \"segment_id\": \"segment_identifiers\",\n  \"audience\": {\n    \"AND\": [\n      {\n        \"custom_attribute\": {\n          \"custom_attribute_name\": \"eye_color\",\n          \"comparison\": \"equals\",\n          \"value\": \"blue\"\n        }\n      },\n      {\n        \"custom_attribute\": {\n          \"custom_attribute_name\": \"favorite_foods\",\n          \"comparison\": \"includes_value\",\n          \"value\": \"pizza\"\n        }\n      },\n      {\n        \"OR\": [\n          {\n            \"custom_attribute\": {\n              \"custom_attribute_name\": \"last_purchase_time\",\n              \"comparison\": \"less_than_x_days_ago\",\n              \"value\": 2\n            }\n          },\n          {\n            \"push_subscription_status\": {\n              \"comparison\": \"is\",\n              \"value\": \"opted_in\"\n            }\n          }\n        ]\n      },\n      {\n        \"email_subscription_status\": {\n          \"comparison\": \"is_not\",\n          \"value\": \"subscribed\"\n        }\n      },\n      {\n        \"last_used_app\": {\n          \"comparison\": \"after\",\n          \"value\": \"2019-07-22T13:17:55+0000\"\n        }\n      }\n    ]\n  },\n  \"campaign_id\": \"campaign_identifier\",\n  \"send_id\": \"send_identifier\",\n  \"override_messaging_limits\": false,\n  \"recipient_subscription_state\": \"subscribed\",\n  \"schedule\": {\n    \"time\": \"\",\n    \"in_local_time\": true,\n    \"at_optimal_time\": true\n  },\n  \"messages\": {\n    \"apple_push\": (optional, Apple Push Object),\n    \"android_push\": (optional, Android Push Object),\n    \"windows_push\": (optional, Windows Phone 8 Push Object),\n    \"windows8_push\": (optional, Windows Universal Push Object),\n    \"kindle_push\": (optional, Kindle/FireOS Push Object),\n    \"web_push\": (optional, Web Push Object),\n    \"email\": (optional, Email object)\n    \"webhook\": (optional, Webhook object)\n    \"content_card\": (optional, Content Card Object)\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://{{instance_url}}/messages/schedule/create","description":"<blockquote>\n<p>Use this endpoint to schedule a campaign, Canvas, or other message to be sent at a designated time and provides you with an identifier to reference that message for updates. </p>\n</blockquote>\n<p>If you are targeting a segment, a record of your request will be stored in the <a href=\"https://dashboard.braze.com/app_settings/developer_console/activitylog/\">Developer Console</a> after all scheduled messages have been sent.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an API key with the <code>messages.schedule.create</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<p>Braze endpoints support <a href=\"https://www.braze.com/docs/api/api_limits/#batching-api-requests\">batching API requests</a>. A single request to the messaging endpoints can reach any of the following:</p>\n<ul>\n<li>Up to 50 specific external_ids, each with individual message parameters</li>\n<li>A segment of any size created in the Braze dashboard, specified by its <code>segment_id</code></li>\n<li>An ad-hoc audience segment of any size, defined in the request as a <a href=\"https://www.braze.com/docs/api/objects_filters/connected_audience/\">Connected Audience</a> object</li>\n</ul>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>broadcast</code></td>\n<td>Optional</td>\n<td>Boolean</td>\n<td>See <a href=\"https://www.braze.com/docs/api/parameters/#broadcast\">broadcast</a>. This parameter defaults to false (as of August 31, 2017).  <br />  <br />If <code>recipients</code> is omitted, <code>broadcast</code> must be set to true. However, use caution when setting <code>broadcast: true</code>, as unintentionally setting this flag may cause you to send your message to a larger than expected audience.</td>\n</tr>\n<tr>\n<td><code>external_user_ids</code></td>\n<td>Optional</td>\n<td>Array of strings</td>\n<td>See <a href=\"https://www.braze.com/docs/api/parameters/#external-user-id\">external user identifier</a>.</td>\n</tr>\n<tr>\n<td><code>user_aliases</code></td>\n<td>Optional</td>\n<td>Array of user alias objects</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/user_alias_object/\">user alias object</a>.</td>\n</tr>\n<tr>\n<td><code>audience</code></td>\n<td>Optional</td>\n<td>Connected audience object</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/connected_audience/\">connected audience</a>.</td>\n</tr>\n<tr>\n<td><code>segment_id</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">segment identifier</a>.</td>\n</tr>\n<tr>\n<td><code>campaign_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">campaign identifier</a>.</td>\n</tr>\n<tr>\n<td><code>recipients</code></td>\n<td>Optional</td>\n<td>Array of recipients objects</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/recipient_object/\">recipients object</a>.</td>\n</tr>\n<tr>\n<td><code>send_id</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">send identifier</a>.</td>\n</tr>\n<tr>\n<td><code>override_messaging_limits</code></td>\n<td>Optional</td>\n<td>Boolean</td>\n<td>Ignore global rate limits for campaigns, defaults to false</td>\n</tr>\n<tr>\n<td><code>recipient_subscription_state</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>Use this to send messages to only users who have opted in (<code>opted_in</code>), only users who have subscribed or are opted in (<code>subscribed</code>) or to all users, including unsubscribed users (<code>all</code>).  <br />  <br />Using <code>all</code> users is useful for transactional email messaging. Defaults to <code>subscribed</code>.</td>\n</tr>\n<tr>\n<td><code>schedule</code></td>\n<td>Required</td>\n<td>Schedule object</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/schedule_object/\">schedule object</a></td>\n</tr>\n<tr>\n<td><code>messages</code></td>\n<td>Optional</td>\n<td>Messaging object</td>\n<td>See available <a href=\"https://www.braze.com/docs/api/objects_filters/#messaging-objects\">messaging objects</a>.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\">Response</h2>\n<h3 id=\"example-success-response\">Example success response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"dispatch_id\": (string) the dispatch identifier,\n    \"schedule_id\": (string) the schedule identifier,\n    \"message\": \"success\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["messages","schedule","create"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"25272fb8-bc39-41df-9a41-07ecfd76cb1d"},{"name":"Schedule API-triggered campaigns","id":"b7e61de7-f2c2-49c9-9e46-b85a0aa01bba","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"campaign_id\": \"campaign_identifier\",\n  \"send_id\": \"send_identifier\",\n  \"recipients\": [\n    {\n      \"user_alias\": \"example_alias\",\n      \"external_user_id\": \"external_user_identifier\",\n      \"trigger_properties\": {}\n    }\n  ],\n  \"audience\": {\n    \"AND\": [\n      {\n        \"custom_attribute\": {\n          \"custom_attribute_name\": \"eye_color\",\n          \"comparison\": \"equals\",\n          \"value\": \"blue\"\n        }\n      },\n      {\n        \"custom_attribute\": {\n          \"custom_attribute_name\": \"favorite_foods\",\n          \"comparison\": \"includes_value\",\n          \"value\": \"pizza\"\n        }\n      },\n      {\n        \"OR\": [\n          {\n            \"custom_attribute\": {\n              \"custom_attribute_name\": \"last_purchase_time\",\n              \"comparison\": \"less_than_x_days_ago\",\n              \"value\": 2\n            }\n          },\n          {\n            \"push_subscription_status\": {\n              \"comparison\": \"is\",\n              \"value\": \"opted_in\"\n            }\n          }\n        ]\n      },\n      {\n        \"email_subscription_status\": {\n          \"comparison\": \"is_not\",\n          \"value\": \"subscribed\"\n        }\n      },\n      {\n        \"last_used_app\": {\n          \"comparison\": \"after\",\n          \"value\": \"2019-07-22T13:17:55+0000\"\n        }\n      }\n    ]\n  },\n  \"broadcast\": false,\n  \"trigger_properties\": {},\n  \"schedule\": {\n    \"time\": \"\",\n    \"in_local_time\": false,\n    \"at_optimal_time\": false\n  }\n}"},"url":"https://{{instance_url}}/campaigns/trigger/schedule/create","description":"<blockquote>\n<p>Use this endpoint to send dashboard created campaign messages via API-triggered delivery, allowing you to decide what action should trigger the message to be sent. </p>\n</blockquote>\n<p>You can pass in <code>trigger_properties</code> that will be templated into the message itself.</p>\n<p>Note that to send messages with this endpoint, you must have a <a href=\"https://www.braze.com/docs/api/identifier_types/\">Campaign ID</a>, created when you build an <a href=\"https://www.braze.com/docs/api/api_campaigns/\">API-Triggered Campaign</a>.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an API key with the <code>campaigns.trigger.schedule.create</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<p>Braze endpoints support <a href=\"https://www.braze.com/docs/api/api_limits/#batching-api-requests\">batching API requests</a>. A single request to the messaging endpoints can reach any of the following:</p>\n<ul>\n<li>Up to 50 specific external_ids, each with individual message parameters</li>\n<li>A segment of any size created in the Braze dashboard, specified by its <code>segment_id</code></li>\n<li>An ad-hoc audience segment of any size, defined in the request as a <a href=\"https://www.braze.com/docs/api/objects_filters/connected_audience/\">Connected Audience</a> object</li>\n</ul>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>campaign_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">campaign identifier</a></td>\n</tr>\n<tr>\n<td><code>send_id</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">send identifier</a>.</td>\n</tr>\n<tr>\n<td><code>recipients</code></td>\n<td>Optional</td>\n<td>Array of recipient objects</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/recipient_object/\">recipients object</a>.</td>\n</tr>\n<tr>\n<td><code>audience</code></td>\n<td>Optional</td>\n<td>Connected audience object</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/connected_audience/\">connected audience</a>.</td>\n</tr>\n<tr>\n<td><code>broadcast</code></td>\n<td>Optional</td>\n<td>Boolean</td>\n<td>See <a href=\"https://www.braze.com/docs/api/parameters/#broadcast\">broadcast</a>. This parameter defaults to false (as of August 31, 2017).  <br />  <br />If <code>recipients</code> is omitted, <code>broadcast</code> must be set to true. However, use caution when setting <code>broadcast: true</code>, as unintentionally setting this flag may cause you to send your message to a larger than expected audience.</td>\n</tr>\n<tr>\n<td><code>trigger_properties</code></td>\n<td>Optional</td>\n<td>Object</td>\n<td>Personalization key-value pairs for all users in this send. See <a href=\"https://www.braze.com/docs/api/objects_filters/trigger_properties_object/\">trigger properties</a>.</td>\n</tr>\n<tr>\n<td><code>schedule</code></td>\n<td>Required</td>\n<td>Schedule object</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/schedule_object/\">schedule object</a>.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\">Response</h2>\n<h3 id=\"example-success-response\">Example success response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-API-KEY-HERE\n{\n{\n    \"dispatch_id\": \"dispatch_identifier\",\n    \"schedule_id\": \"schedule_identifier\",\n    \"message\": \"success\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["campaigns","trigger","schedule","create"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"b7e61de7-f2c2-49c9-9e46-b85a0aa01bba"},{"name":"Schedule API-triggered Canvases","id":"4bc75890-b807-405d-b226-5aca284e6b7d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"canvas_id\": \"canvas_identifier\",\n  \"recipients\": [\n    {\n      \"user_alias\": \"example_alias\",\n      \"external_user_id\": \"external_user_identifier\",\n      \"trigger_properties\": \"\",\n      \"canvas_entry_properties\": {}\n    }\n  ],\n  \"audience\": {\n    \"AND\": [\n      {\n        \"custom_attribute\": {\n          \"custom_attribute_name\": \"eye_color\",\n          \"comparison\": \"equals\",\n          \"value\": \"blue\"\n        }\n      },\n      {\n        \"custom_attribute\": {\n          \"custom_attribute_name\": \"favorite_foods\",\n          \"comparison\": \"includes_value\",\n          \"value\": \"pizza\"\n        }\n      },\n      {\n        \"OR\": [\n          {\n            \"custom_attribute\": {\n              \"custom_attribute_name\": \"last_purchase_time\",\n              \"comparison\": \"less_than_x_days_ago\",\n              \"value\": 2\n            }\n          },\n          {\n            \"push_subscription_status\": {\n              \"comparison\": \"is\",\n              \"value\": \"opted_in\"\n            }\n          }\n        ]\n      },\n      {\n        \"email_subscription_status\": {\n          \"comparison\": \"is_not\",\n          \"value\": \"subscribed\"\n        }\n      },\n      {\n        \"last_used_app\": {\n          \"comparison\": \"after\",\n          \"value\": \"2019-07-22T13:17:55+0000\"\n        }\n      }\n    ]\n  },\n  \"broadcast\": false,\n  \"canvas_entry_properties\": {},\n  \"schedule\": {\n    \"time\": \"\",\n    \"in_local_time\": false,\n    \"at_optimal_time\": false\n  }\n}"},"url":"https://{{instance_url}}/canvas/trigger/schedule/create","description":"<blockquote>\n<p>Use this endpoint to schedule Canvas messages via API-triggered delivery, allowing you to decide what action should trigger the message to be sent. </p>\n</blockquote>\n<p>You can pass in <code>canvas_entry_properties</code> that will be templated into the messages sent by the first steps of the Canvas.</p>\n<p>Note that to send messages with this endpoint, you must have a <a href=\"https://www.braze.com/docs/api/identifier_types/#canvas-api-identifier\">Canvas ID</a> created when you build a Canvas.</p>\n<h3 id=\"prerequisites\">Prerequisites</h3>\n<p>To use this endpoint, you’ll need an API key with the <code>canvas.trigger.schedule.create</code> permission.</p>\n<h3 id=\"rate-limit\">Rate limit</h3>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<p>Braze endpoints support <a href=\"https://www.braze.com/docs/api/api_limits/#batching-api-requests\">batching API requests</a>. A single request to the messaging endpoints can reach any of the following:</p>\n<ul>\n<li>Up to 50 specific external_ids, each with individual message parameters</li>\n<li>A segment of any size created in the Braze dashboard, specified by its <code>segment_id</code></li>\n<li>An ad-hoc audience segment of any size, defined in the request as a <a href=\"https://www.braze.com/docs/api/objects_filters/connected_audience/\">Connected Audience</a> object</li>\n</ul>\n<h3 id=\"request-parameters\">Request parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>canvas_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">Canvas identifier</a>.</td>\n</tr>\n<tr>\n<td><code>send_id</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">send identifier</a>.</td>\n</tr>\n<tr>\n<td><code>recipients</code></td>\n<td>Optional</td>\n<td>Array of recipient objects</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/recipient_object/\">recipients object</a>.</td>\n</tr>\n<tr>\n<td><code>audience</code></td>\n<td>Optional</td>\n<td>Connected audience object</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/connected_audience/\">connected audience</a>.</td>\n</tr>\n<tr>\n<td><code>broadcast</code></td>\n<td>Optional</td>\n<td>Boolean</td>\n<td>See <a href=\"https://www.braze.com/docs/api/parameters/#broadcast\">broadcast</a>. This parameter defaults to false (as of August 31, 2017).  <br />  <br />If <code>recipients</code> is omitted, <code>broadcast</code> must be set to true. However, use caution when setting <code>broadcast: true</code>, as unintentionally setting this flag may cause you to send your message to a larger than expected audience.</td>\n</tr>\n<tr>\n<td><code>trigger_properties</code></td>\n<td>Optional</td>\n<td>Object</td>\n<td>Personalization key-value pairs for all users in this send. See <a href=\"https://www.braze.com/docs/api/objects_filters/trigger_properties_object/\">trigger properties</a>.</td>\n</tr>\n<tr>\n<td><code>schedule</code></td>\n<td>Required</td>\n<td>Schedule object</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/schedule_object/\">schedule object</a>.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["canvas","trigger","schedule","create"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"4bc75890-b807-405d-b226-5aca284e6b7d"},{"name":"Update scheduled messages","id":"f61edf74-4467-4551-b9c4-a4b8d188cd7a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","type":"text","value":"Bearer {{api_key}}"}],"body":{"mode":"raw","raw":"{\n  \"schedule_id\": \"schedule_identifier\",\n  \"schedule\": {\n    \"time\": \"2017-05-24T20:30:36Z\"\n   },\n  \"messages\": {\n    \"apple_push\": {\n      \"alert\": \"Updated Message!\",\n      \"badge\": 1\n    },\n    \"android_push\": {\n      \"title\": \"Updated title!\",\n      \"alert\": \"Updated message!\"\n    },\n    \"sms\": {  \n      \"subscription_group_id\": \"subscription_group_identifier\",\n      \"message_variation_id\": \"message_variation_identifier\",\n      \"body\": \"This is my SMS body.\",\n      \"app_id\": \"app_identifier\"\n    }\n  }\n}"},"url":"https://{{instance_url}}/messages/schedule/update","description":"<blockquote>\n<p>Use this endpoint to update scheduled messages. </p>\n</blockquote>\n<p>This endpoint accepts updates to either the <code>schedule</code> or <code>messages</code> parameter or both. Your request must contain at least one of those two keys.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an API key with the <code>messages.schedule.update</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>schedule_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The <code>schedule_id</code> to update (obtained from the response to create schedule).</td>\n</tr>\n<tr>\n<td><code>schedule</code></td>\n<td>Optional</td>\n<td>Object</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/schedule_object/\">schedule object</a>.</td>\n</tr>\n<tr>\n<td><code>messages</code></td>\n<td>Optional</td>\n<td>Object</td>\n<td>See available <a href=\"https://www.braze.com/docs/api/objects_filters/#messaging-objects\">message objects</a>.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location --request POST 'https://rest.iad-01.braze.com/messages/schedule/update' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY' \\\n--data-raw '{\n  \"schedule_id\": \"schedule_identifier\",\n  \"schedule\": {\n    \"time\": \"2017-05-24T20:30:36Z\"\n   },\n  \"messages\": {\n    \"apple_push\": {\n      \"alert\": \"Updated Message!\",\n      \"badge\": 1\n    },\n    \"android_push\": {\n      \"title\": \"Updated title!\",\n      \"alert\": \"Updated message!\"\n    },\n    \"sms\": {  \n      \"subscription_group_id\": \"subscription_group_identifier\",\n      \"message_variation_id\": \"message_variation_identifier\",\n      \"body\": \"This is my SMS body.\",\n      \"app_id\": \"app_identifier\"\n    }\n  }\n}'\n</code></pre>\n","urlObject":{"protocol":"https","path":["messages","schedule","update"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"f61edf74-4467-4551-b9c4-a4b8d188cd7a"},{"name":"Update scheduled API-triggered campaigns","id":"6d2a6e66-9d6f-4ae1-965a-79fa52b86b1d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","type":"text","value":"Bearer {{api_key}}"}],"body":{"mode":"raw","raw":"{\n  \"campaign_id\": \"campaign_identifier\",\n  \"schedule_id\": \"schedule_identifier\",\n  \"schedule\": {\n    \"time\": \"2017-05-24T21:30:00Z\",\n    \"in_local_time\": true\n  }\n}"},"url":"https://{{instance_url}}/campaigns/trigger/schedule/update","description":"<blockquote>\n<p>Use this endpoint to update scheduled API-triggered campaigns created in the dashboard, allowing you to decide what action should trigger the message to be sent. </p>\n</blockquote>\n<p>You can pass in <code>trigger_properties</code> that will be templated into the message itself.</p>\n<p>Note that to send messages with this endpoint, you must have a campaign ID, created when you build an <a href=\"https://www.braze.com/docs/api/api_campaigns/\">API-triggered campaign</a>.</p>\n<p>Any schedule will completely overwrite the one that you provided in the create schedule request or in previous update schedule requests. For example, if you originally provide <code>\"schedule\" : {\"time\" : \"2015-02-20T13:14:47\", \"in_local_time\" : true}</code> and then in your update you provide <code>\"schedule\" : {\"time\" : \"2015-02-20T14:14:47\"}</code>, your message will now be sent at the provided time in UTC, not in the user's local time. Scheduled triggers that are updated very close to or during the time they were supposed to be sent will be updated with best efforts, so last-second changes could be applied to all, some, or none of your targeted users.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an API key with the <code>campaigns.trigger.schedule.update</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>campaign_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">campaign identifier</a></td>\n</tr>\n<tr>\n<td><code>schedule_id</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>The <code>schedule_id</code> to update (obtained from the response to create schedule).</td>\n</tr>\n<tr>\n<td><code>schedule</code></td>\n<td>Required</td>\n<td>Object</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/schedule_object/\">schedule object</a>.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location --request POST 'https://rest.iad-01.braze.com/campaigns/trigger/schedule/update' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY' \\\n--data-raw '{\n  \"campaign_id\": \"campaign_identifier\",\n  \"schedule_id\": \"schedule_identifier\",\n  \"schedule\": {\n    \"time\": \"2017-05-24T21:30:00Z\",\n    \"in_local_time\": true\n  }\n}'\n</code></pre>\n","urlObject":{"protocol":"https","path":["campaigns","trigger","schedule","update"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"6d2a6e66-9d6f-4ae1-965a-79fa52b86b1d"},{"name":"Update scheduled API-triggered Canvases","id":"8fdf158b-ce20-41d8-80e4-a9300a6706d4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","name":"Content-Type","type":"text","value":"application/json"},{"key":"Authorization","type":"text","value":"Bearer {{api_key}}"}],"body":{"mode":"raw","raw":"{\n  \"canvas_id\": \"canvas_identifier\",\n  \"schedule_id\": \"schedule_identifier\",\n  \"schedule\": {\n    \"time\": \"2017-05-24T21:30:00Z\",\n    \"in_local_time\": true\n  }\n}"},"url":"https://{{instance_url}}/canvas/trigger/schedule/update","description":"<blockquote>\n<p>Use this endpoint to update scheduled API-triggered Canvases that were created in the dashboard. </p>\n</blockquote>\n<p>This allows you to decide what action should trigger the message to be sent. You can pass in <code>trigger_properties</code> that will be templated into the message itself.</p>\n<p>Note that to send messages with this endpoint, you must have a Canvas ID, created when you build a <a href=\"https://www.braze.com/docs/api/identifier_types/#canvas-api-identifier\">Canvas</a>.</p>\n<p>Any schedule will completely overwrite the one that you provided in the create schedule request or in previous update schedule requests. For example, if you originally provide <code>\"schedule\" : {\"time\" : \"2015-02-20T13:14:47\", \"in_local_time\" : true}</code> and then in your update you provide <code>\"schedule\" : {\"time\" : \"2015-02-20T14:14:47\"}</code>, your message will now be sent at the provided time in UTC, not in the user's local time. Scheduled triggers that are updated very close to or during the time they were supposed to be sent will be updated with best efforts, so last-second changes could be applied to all, some, or none of your targeted users.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an API key with the <code>canvas.trigger.schedule.update</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-body\">Request body</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n</code></pre>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"canvas_id\": (required, string) see Canvas identifier,\n  \"schedule_id\": (required, string) the `schedule_id` to update (obtained from the response to create schedule),\n  \"schedule\": {\n    // required, see create schedule documentation\n  }\n}\n</code></pre>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>canvas_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">Canvas identifier</a>.</td>\n</tr>\n<tr>\n<td><code>schedule_id</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>The <code>schedule_id</code> to update (obtained from the response to create schedule).</td>\n</tr>\n<tr>\n<td><code>schedule</code></td>\n<td>Required</td>\n<td>Object</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/schedule_object/\">schedule object</a>.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["canvas","trigger","schedule","update"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"8fdf158b-ce20-41d8-80e4-a9300a6706d4"}],"id":"bc3d171a-1e16-4698-aaab-ec0a82cb2157","_postman_id":"bc3d171a-1e16-4698-aaab-ec0a82cb2157","description":""},{"name":"Send Messages","item":[{"name":"Create send IDs","id":"74a04e53-659f-4473-abc5-0f6f735550ff","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","type":"text","value":"Bearer {{api_key}}"}],"body":{"mode":"raw","raw":"{\n  \"campaign_id\": \"campaign_identifier\",\n  \"send_id\": \"send_identifier\"\n}"},"url":"https://{{instance_url}}/sends/id/create","description":"<blockquote>\n<p>Use this endpoint to create send IDs that can be used to send messages and track message performance programatically, without campaign creation for each send.</p>\n</blockquote>\n<p>Using the send identifier to track and send messages is useful if you are planning to programmatically generate and send content.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you'll need to generate an API key with the <code>sends.id.create</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>The daily maximum number of custom send identifiers that can be created via this endpoint is 100 for a given app group. Each <code>send_id</code> and <code>campaign_id</code> combination that you create will count towards your daily limit. The response headers for any valid request include the current rate limit status, see <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a> for details.</p>\n<h3 id=\"request-parameters\">Request parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>campaign_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>See <a href=\"https://www.braze.com/api/identifier_types/\">campaign identifier</a>.</td>\n</tr>\n<tr>\n<td><code>send_id</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>See <a href=\"https://www.braze.com/api/identifier_types/\">send identifier</a>.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\">Response</h2>\n<h3 id=\"example-success-response\">Example success response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n  \"message\": \"success\",\n  \"send_id\" : (string) the send identifier\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["sends","id","create"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"74a04e53-659f-4473-abc5-0f6f735550ff"},{"name":"Send messages immediately using the API only","id":"946cb701-96e3-48d7-868c-f079785b6d24","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"broadcast\": \"false\",\n  \"external_user_ids\": \"external_user_identifiers\",\n  \"user_aliases\": {\n    \"alias_name\": \"example_name\",\n    \"alias_label\": \"example_label\"\n  },\n  \"segment_id\": \"segment_identifier\",\n  \"audience\": {\n    \"AND\": [\n      {\n        \"custom_attribute\": {\n          \"custom_attribute_name\": \"eye_color\",\n          \"comparison\": \"equals\",\n          \"value\": \"blue\"\n        }\n      },\n      {\n        \"custom_attribute\": {\n          \"custom_attribute_name\": \"favorite_foods\",\n          \"comparison\": \"includes_value\",\n          \"value\": \"pizza\"\n        }\n      },\n      {\n        \"OR\": [\n          {\n            \"custom_attribute\": {\n              \"custom_attribute_name\": \"last_purchase_time\",\n              \"comparison\": \"less_than_x_days_ago\",\n              \"value\": 2\n            }\n          },\n          {\n            \"push_subscription_status\": {\n              \"comparison\": \"is\",\n              \"value\": \"opted_in\"\n            }\n          }\n        ]\n      },\n      {\n        \"email_subscription_status\": {\n          \"comparison\": \"is_not\",\n          \"value\": \"subscribed\"\n        }\n      },\n      {\n        \"last_used_app\": {\n          \"comparison\": \"after\",\n          \"value\": \"2019-07-22T13:17:55+0000\"\n        }\n      }\n    ]\n  },\n  \"campaign_id\": \"campaign_identifier\",\n  \"send_id\": \"send_identifier\",\n  \"override_frequency_capping\": \"false\",\n  \"recipient_subscription_state\": \"all\",\n  \"messages\": {\n    \"android_push\": \"(optional, Android Push Object)\",\n    \"apple_push\": \"(optional, Apple Push Object)\",\n    \"content_card\": \"(optional, Content Card Object)\",\n    \"email\": \"(optional, Email Object)\",\n    \"kindle_push\": \"(optional, Kindle/FireOS Push Object)\",\n    \"web_push\": \"(optional, Web Push Object)\",\n    \"windows_phone8_push\": \"(optional, Windows Phone 8 Push Object)\",\n    \"windows_universal_push\": \"(optional, Windows Universal Push Object)\"\n  }\n}"},"url":"https://{{instance_url}}/messages/send","description":"<blockquote>\n<p>Use this endpoint to send immediate messages to designated users via the Braze API. </p>\n</blockquote>\n<p>Be sure to include Messaging Objects in your body to complete your requests.</p>\n<p>If you are targeting a segment, a record of your request will be stored in the <a href=\"https://dashboard.braze.com/app_settings/developer_console/activitylog/\">Developer Console</a>.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you'll need to generate an API key with the <code>messages.send</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>When specifying a segment or Connected Audience in your request, we apply a rate limit of 250 requests per minute to this endpoint. Otherwise, if specifying an <code>external_id</code>, this endpoint has a default rate limit of 250,000 requests per hour, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<p>Braze endpoints support <a href=\"https://www.braze.com/docs/api/api_limits/#batching-api-requests\">batching API requests</a>. A single request to the messaging endpoints can reach any of the following:</p>\n<ul>\n<li><p>Up to 50 specific <code>external_ids</code>, each with individual message parameters</p>\n</li>\n<li><p>A segment of any size created in the Braze dashboard, specified by its <code>segment_id</code></p>\n</li>\n<li><p>An ad-hoc audience segment of any size, defined in the request as a <a href=\"https://www.braze.com/docs/api/objects_filters/connected_audience/\">Connected Audience</a> object</p>\n</li>\n</ul>\n<h3 id=\"request-parameters\">Request parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>broadcast</code></td>\n<td>Optional</td>\n<td>Boolean</td>\n<td>See <a href=\"https://www.braze.com/docs/api/parameters/#broadcast\">broadcast</a>. This parameter defaults to false (as of August 31, 2017).  <br />  <br />If <code>recipients</code> is omitted, <code>broadcast</code> must be set to true. However, use caution when setting <code>broadcast: true</code>, as unintentionally setting this flag may cause you to send your messages to a larger than expected audience.</td>\n</tr>\n<tr>\n<td><code>external_user_ids</code></td>\n<td>Optional</td>\n<td>Array of strings</td>\n<td>See <a href=\"https://www.braze.com/docs/api/parameters/#external-user-id\">external user ID</a>.</td>\n</tr>\n<tr>\n<td><code>user_aliases</code></td>\n<td>Optional</td>\n<td>Array of user alias objects</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/user_alias_object/\">user alias object</a>.</td>\n</tr>\n<tr>\n<td><code>segment_id</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">segment identifier</a>.</td>\n</tr>\n<tr>\n<td><code>audience</code></td>\n<td>Optional</td>\n<td>Connected audience object</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/connected_audience/\">connected audience</a>.</td>\n</tr>\n<tr>\n<td><code>campaign_id</code></td>\n<td>Optional*</td>\n<td>String</td>\n<td>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">campaign identifier</a> for more information.  <br />  <br />*Required if you wish to track campaign stats (e.g. sends, clicks, bounces, etc) on the Braze dashboard.</td>\n</tr>\n<tr>\n<td><code>send_id</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">send identifier</a></td>\n</tr>\n<tr>\n<td><code>override_frequency_capping</code></td>\n<td>Optional</td>\n<td>Boolean</td>\n<td>Ignore `frequency_capping` for campaigns, defaults to false.</td>\n</tr>\n<tr>\n<td><code>recipient_subscription_state</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>Use this to send messages to only users who have opted in (<code>opted_in</code>), only users who have subscribed or are opted in (<code>subscribed</code>) or to all users, including unsubscribed users (<code>all</code>).  <br />  <br />Using <code>all</code> users is useful for transactional email messaging. Defaults to <code>subscribed</code>.</td>\n</tr>\n<tr>\n<td><code>messages</code></td>\n<td>Optional</td>\n<td>Messaging objects</td>\n<td>See available <a href=\"https://www.braze.com/docs/api/endpoints/messaging/send_messages/post_send_messages/#available-messaging-objects\">messaging objects</a>.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response-details\">Response details</h2>\n<p>Message sending endpoint responses will include the message’s <code>dispatch_id</code> for reference back to the dispatch of the message. The <code>dispatch_id</code> is the ID of the message dispatch, meaning the unique ID for each “transmission” sent from Braze. For more information, refer to <a href=\"https://www.braze.com/docs/help/help_articles/data/dispatch_id/\">Dispatch ID behavior</a>.</p>\n","urlObject":{"protocol":"https","path":["messages","send"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"946cb701-96e3-48d7-868c-f079785b6d24"},{"name":"Send Transactional Email using API-triggered delivery","id":"cec874e1-fa51-42a6-9a8d-7fc57d6a63bc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"external_send_id\" : YOUR_BASE64_COMPATIBLE_ID,\n    \"trigger_properties\": {\n        \"example_string_property\": YOUR_EXAMPLE_STRING,\n        \"example_integer_property\": YOUR_EXAMPLE_INTEGER\n    },\n    \"recipient\": {\n        \"external_user_id\": TARGETED_USER_ID_STRING\n    }\n}"},"url":"https://{{instance_url}}/transactional/v1/campaigns/{campaign_id}/send","description":"<blockquote>\n<p>Use this endpoint to send immediate, one-off transactional messages to a designated user. </p>\n</blockquote>\n<p>This endpoint is used alongside the creation of a Braze <a href=\"https://www.braze.com/docs/api/api_campaigns/transactional_campaigns\">Transactional Email campaign</a> and corresponding campaign ID.</p>\n<blockquote>\n<p><strong>Important:</strong> Transactional Email is currently available as part of select Braze packages. Reach out to your Braze customer success manager for more details. </p>\n</blockquote>\n<p>Similar to the <a href=\"https://www.braze.com/docs/api/endpoints/messaging/send_messages/post_send_triggered_campaigns/\">Send triggered campaign endpoint</a>, this campaign type allows you to house message content inside of the Braze dashboard while dictating when and to whom a message is sent via your API. Unlike the Send triggered campaign endpoint, which accepts an audience or segment to send messages to, a request to this endpoint must specify a single user either by <code>external_user_id</code> or <code>user_alias</code>, as this campaign type is purpose-built for 1:1 messaging of alerts like order confirmations or password resets.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you'll need to generate an API key with the <code>transactional.send</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>Braze Transactional Emails are not subject to a rate limit. Depending on your chosen package, a set number of transactional emails is covered per hour by SLA. Requests that exceed that rate will still send, but are not covered by SLA. 99.9% of emails will send in less than one minute.</p>\n<h2 id=\"path-parameters\">Path parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>campaign_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>ID of the campaign</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"request-parameters\">Request Parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>external_send_id</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>A Base64 compatible string. Validated against the following regex <code>/^[a-zA-Z0-9-_+\\/=]+$/</code>.  <br />  <br />This optional field allows you to pass an internal identifier for this particular send which will be included in events sent from the Transactional HTTP event postback. When passed, this identifier will also be used as a deduplication key, which Braze will store for 24 hours.  <br />  <br />Passing the same identifier in another request will not result in a new instance of a send by Braze for 24 hours.</td>\n</tr>\n<tr>\n<td><code>trigger_properties</code></td>\n<td>Optional</td>\n<td>Object</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/trigger_properties_object/\">trigger properties</a>. Personalization key-value pairs that will apply to the user in this request.</td>\n</tr>\n<tr>\n<td><code>recipients</code></td>\n<td>Required</td>\n<td>Object</td>\n<td>The user you are targeting this message to. Can contain <code>attributes</code> and a single <code>external_user_id</code> or <code>user_alias</code>.  <br />  <br />Note that if you provide an external user ID that doesn’t already exist in Braze, passing any fields to the <code>attributes</code> object will create this user profile in Braze and send this message to the newly created user.  <br />  <br />If you send multiple requests to the same user with different data in the <code>attributes</code> object, Braze will ensure that <code>first_name</code>, <code>last_name</code>, and <code>email</code> attributes will be updated synchronously and templated into your message. Custom attributes don’t have this same protection, so proceed with caution when updating a user through this API and passing different custom attribute values in quick succession.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\">Response</h2>\n<p>The send transactional email endpoint will respond with the message’s <code>dispatch_id</code> which represents the instance of this message send. This identifier can be used along with events from the Transactional HTTP event postback to trace the status of an individual email sent to a single user.</p>\n<h3 id=\"example-response\">Example response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"dispatch_id\": Out-of-the-box generated Unique ID of the instance of this send\n    \"status\": Current status of the message\n    \"metadata\": Object containing additional information about the send instance\n}\n\n</code></pre>\n<h2 id=\"troubleshooting\">Troubleshooting</h2>\n<p>The endpoint may also return an error code and a human-readable message in some cases, most of which are validation errors. Here are some common errors you may get when making invalid requests.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>The campaign is not a transactional campaign. Only transactional campaigns may use this endpoint</code></td>\n<td>The campaign ID provided is not for a transactional campaign.</td>\n</tr>\n<tr>\n<td><code>The external reference has been queued. Please retry to obtain send_id.</code></td>\n<td>The external_send_id has been created recently, try a new external_send_id if you are intending to send a new message.</td>\n</tr>\n<tr>\n<td><code>Campaign does not exist</code></td>\n<td>The campaign ID provided does not correspond to an existing campaign.</td>\n</tr>\n<tr>\n<td><code>The campaign is archived. Unarchive the campaign to ensure trigger requests will take effect.</code></td>\n<td>The campaign ID provided corresponds to an archived campaign.</td>\n</tr>\n<tr>\n<td><code>The campaign is paused. Resume the campaign to ensure trigger requests will take effect.</code></td>\n<td>The campaign ID provided corresponds to a paused campaign.</td>\n</tr>\n<tr>\n<td><code>campaign_id must be a string of the campaign api identifier</code></td>\n<td>The campaign ID provided is not a valid format.</td>\n</tr>\n<tr>\n<td><code>Error authenticating credentials</code></td>\n<td>The API key provided is invalid</td>\n</tr>\n<tr>\n<td><code>Invalid whitelisted IPs</code></td>\n<td>The IP address sending the request is not on the IP whitelist (if it is being utilized)</td>\n</tr>\n<tr>\n<td><code>You do not have permission to access this resource</code></td>\n<td>The API key used does not have permission to take this action</td>\n</tr>\n</tbody>\n</table>\n</div><p>Most endpoints at Braze have a rate limit implementation that will return a 429 response code if you have made too many requests. The transactional sending endpoint works differently -- if you exceed your allotted rate limit, our system will continue to ingest the API calls, return success codes, and send the messages, however those messages may not be subject to the contractual SLA for the feature. Please reach out if you need more information about this functionality.</p>\n<h2 id=\"transactional-http-event-postback\">Transactional HTTP Event Postback</h2>\n<p>All transactional emails are complemented with event status postbacks sent as an HTTP request back to your specified URL. This will allow you to evaluate the message status in real-time and take action to reach the user on another channel if the message goes undelivered, or fallback to an internal system if Braze is experiencing latency.</p>\n<p>In order to associate the incoming events to a particular instance of send, you can choose to either capture and store the Braze <code>dispatch_id</code> returned in the <a href=\"https://www.braze.com/docs/api/endpoints/messaging/send_messages/post_send_transactional_message/#example-response\">API response</a>, or pass your own identifier to the <code>external_send_id</code> field. An example of a value you may choose to pass to that field may be an order ID, where after completing order 1234, an order confirmation message is triggered to the user through Braze, and <code>external_send_id : 1234</code> is included in the request. All following event postbacks such as <code>Sent</code> and <code>Delivered</code> will include <code>external_send_id : 1234</code> in the payload allowing you to confirm that user successfully received their order confirmation email.</p>\n<p>To get started using the Transactional HTTP Event Postback, navigate to <strong>Settings</strong> &gt; <strong>Email Preferences</strong> in your Braze dashboard and locate the section <strong>Transactional Event Status Postback</strong>. Input your desired URL to receive postbacks.</p>\n<blockquote>\n<p><strong>Note:</strong> If you are using our <a href=\"https://www.braze.com/docs/navigation\">older navigation</a>, <strong>Email Preferences</strong> can be found at <strong><strong>Manage Settings</strong> &gt; <strong>Email Settings</strong></strong>. </p>\n</blockquote>\n<h3 id=\"postback-body\">Postback body</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">// Sent Event\n{\n    \"dispatch_id\": \"acf471119f7449d579e8089032003ded\",\n    \"status\": \"sent\",\n    \"metadata\": {\n      \"received_at\": \"2020-08-31T18:58:41.000+00:00\",\n      \"enqueued_at\": \"2020-08-31T18:58:41.000+00:00\",\n      \"executed_at\": \"2020-08-31T18:58:41.000+00:00\",\n      \"sent_at\": \"2020-08-31T18:58:42.000+00:00\",\n      \"campaign_api_id\": \"417220e4-5a2a-b634-7f7d-9ec891532368\",\n      \"external_send_id\" : \"34a2ceb3cf6184132f3d816e9984269a\"\n    }\n}\n// Processed Event\n{\n    \"dispatch_id\": \"acf471119f7449d579e8089032003ded\",\n    \"status\": \"processed\",\n    \"metadata\": {\n      \"processed_at\": \"2020-08-31T18:58:42.000+00:00\",\n      \"campaign_api_id\": \"417220e4-5a2a-b634-7f7d-9ec891532368\",\n      \"external_send_id\" : \"34a2ceb3cf6184132f3d816e9984269a\"\n    }\n}\n// Aborted\n{\n    \"dispatch_id\": \"acf471119f7449d579e8089032003ded\",\n    \"status\": \"aborted\",\n    \"metadata\": {\n      \"reason\": \"User not emailable\",\n      \"aborted_at\": \"2020-08-31T19:04:51.000+00:00\",\n      \"campaign_api_id\": \"417220e4-5a2a-b634-7f7d-9ec891532368\",\n      \"external_send_id\" : \"34a2ceb3cf6184132f3d816e9984269a\"\n    }\n}\n// Delivered Event\n{\n    \"dispatch_id\": \"acf471119f7449d579e8089032003ded\",\n    \"status\": \"delivered\",\n    \"metadata\": {\n      \"delivered_at\": \"2020-08-31T18:27:32.000+00:00\",\n      \"campaign_api_id\": \"417220e4-5a2a-b634-7f7d-9ec891532368\",\n      \"external_send_id\" : \"34a2ceb3cf6184132f3d816e9984269a\"\n    }\n}\n// Bounced Event\n{\n    \"dispatch_id\": \"acf471119f7449d579e8089032003ded\",\n    \"status\": \"bounced\",\n    \"metadata\": {\n      \"bounced_at\": \"2020-08-31T18:58:43.000+00:00\",\n      \"reason\": \"550 5.1.1 The email account that you tried to reach does not exist\",\n      \"campaign_api_id\": \"417220e4-5a2a-b634-7f7d-9ec891532368\",\n      \"external_send_id\" : \"34a2ceb3cf6184132f3d816e9984269a\"\n    }\n}\n\n</code></pre>\n<h4 id=\"message-status\">Message status</h4>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Status</strong></th>\n<th><strong>Description</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>sent</code></td>\n<td>Message successfully dispatched to Braze’s email sending partner</td>\n</tr>\n<tr>\n<td><code>processed</code></td>\n<td>Email sending partner has successfully received and prepared the message for sending to the user’s inbox provider</td>\n</tr>\n<tr>\n<td><code>aborted</code></td>\n<td>Braze was unable to successfully dispatch the message due to the user not having an emailable address, or Liquid abort logic was called in the message body. All aborted events include a reason field within the metadata object indicating why the message was aborted</td>\n</tr>\n<tr>\n<td><code>delivered</code></td>\n<td>Message was accepted by the user’s email inbox provider</td>\n</tr>\n<tr>\n<td><code>bounced</code></td>\n<td>Message was rejected by the user’s email inbox provider. All bounced events include a reason field within the metadata object reflecting the bounce error code provided by the inbox provider</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"example-postback\">Example postback</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">// Sent Event\n{\n    \"dispatch_id\": \"acf471119f7449d579e8089032003ded\",\n    \"status\": \"sent\",\n    \"metadata\": {\n      \"received_at\": \"2020-08-31T18:58:41.000+00:00\",\n      \"enqueued_at\": \"2020-08-31T18:58:41.000+00:00\",\n      \"executed_at\": \"2020-08-31T18:58:41.000+00:00\",\n      \"sent_at\": \"2020-08-31T18:58:42.000+00:00\",\n      \"campaign_api_id\": \"417220e4-5a2a-b634-7f7d-9ec891532368\",\n      \"external_send_id\" : \"34a2ceb3cf6184132f3d816e9984269a\"\n    }\n}\n// Processed Event\n{\n    \"dispatch_id\": \"acf471119f7449d579e8089032003ded\",\n    \"status\": \"processed\",\n    \"metadata\": {\n      \"processed_at\": \"2020-08-31T18:58:42.000+00:00\",\n      \"campaign_api_id\": \"417220e4-5a2a-b634-7f7d-9ec891532368\",\n      \"external_send_id\" : \"34a2ceb3cf6184132f3d816e9984269a\"\n    }\n}\n// Aborted\n{\n    \"dispatch_id\": \"acf471119f7449d579e8089032003ded\",\n    \"status\": \"aborted\",\n    \"metadata\": {\n      \"reason\": \"User not emailable\",\n      \"aborted_at\": \"2020-08-31T19:04:51.000+00:00\",\n      \"campaign_api_id\": \"417220e4-5a2a-b634-7f7d-9ec891532368\",\n      \"external_send_id\" : \"34a2ceb3cf6184132f3d816e9984269a\"\n    }\n}\n// Delivered Event\n{\n    \"dispatch_id\": \"acf471119f7449d579e8089032003ded\",\n    \"status\": \"delivered\",\n    \"metadata\": {\n      \"delivered_at\": \"2020-08-31T18:27:32.000+00:00\",\n      \"campaign_api_id\": \"417220e4-5a2a-b634-7f7d-9ec891532368\",\n      \"external_send_id\" : \"34a2ceb3cf6184132f3d816e9984269a\"\n    }\n}\n// Bounced Event\n{\n    \"dispatch_id\": \"acf471119f7449d579e8089032003ded\",\n    \"status\": \"bounced\",\n    \"metadata\": {\n      \"bounced_at\": \"2020-08-31T18:58:43.000+00:00\",\n      \"reason\": \"550 5.1.1 The email account that you tried to reach does not exist\",\n      \"campaign_api_id\": \"417220e4-5a2a-b634-7f7d-9ec891532368\",\n      \"external_send_id\" : \"34a2ceb3cf6184132f3d816e9984269a\"\n    }\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["transactional","v1","campaigns","{campaign_id}","send"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"cec874e1-fa51-42a6-9a8d-7fc57d6a63bc"},{"name":"Send campaigns using API-triggered delivery","id":"aef185ae-f591-452a-93a9-61d4bc023b05","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","type":"text","value":"Bearer {{api_key}}"}],"body":{"mode":"raw","raw":"{\n  \"campaign_id\": \"campaign_identifier\",\n  \"send_id\": \"send_identifier\",\n  \"trigger_properties\": \"\",\n  \"broadcast\": false,\n  \"audience\": {\n    \"AND\": [\n      {\n        \"custom_attribute\": {\n          \"custom_attribute_name\": \"eye_color\",\n          \"comparison\": \"equals\",\n          \"value\": \"blue\"\n        }\n      },\n      {\n        \"custom_attribute\": {\n          \"custom_attribute_name\": \"favorite_foods\",\n          \"comparison\": \"includes_value\",\n          \"value\": \"pizza\"\n        }\n      },\n      {\n        \"OR\": [\n          {\n            \"custom_attribute\": {\n              \"custom_attribute_name\": \"last_purchase_time\",\n              \"comparison\": \"less_than_x_days_ago\",\n              \"value\": 2\n            }\n          },\n          {\n            \"push_subscription_status\": {\n              \"comparison\": \"is\",\n              \"value\": \"opted_in\"\n            }\n          }\n        ]\n      },\n      {\n        \"email_subscription_status\": {\n          \"comparison\": \"is_not\",\n          \"value\": \"subscribed\"\n        }\n      },\n      {\n        \"last_used_app\": {\n          \"comparison\": \"after\",\n          \"value\": \"2019-07-22T13:17:55+0000\"\n        }\n      }\n    ]\n  },\n  \"recipients\": [\n    {\n      \"user_alias\": {\n        \"alias_name\" : \"example_name\",\n        \"alias_label\" : \"example_label\"\n      },\n      \"external_user_id\": \"external_user_identifier\",\n      \"trigger_properties\": \"\",\n      \"send_to_existing_only\": true,\n      \"attributes\": {\n        \"first_name\" : \"Alex\"\n      }\n    }\n  ]\n}\n"},"url":"https://{{instance_url}}/campaigns/trigger/send","description":"<blockquote>\n<p>Use this endpoint to send immediate, ad-hoc messages to designated users via API-triggered delivery.</p>\n</blockquote>\n<p>API-triggered delivery allows you to house message content inside of the Braze dashboard while dictating when a message is sent, and to whom via your API.</p>\n<p>If you are targeting a segment, a record of your request will be stored in the <a href=\"https://dashboard.braze.com/app_settings/developer_console/activitylog/\">Developer Console</a>. Note that to send messages with this endpoint, you must have a <a href=\"https://www.braze.com/docs/api/identifier_types/\">campaign ID</a> created when you build an <a href=\"https://www.braze.com/docs/api/api_campaigns/\">API-triggered campaign</a>.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you'll need to generate an API key with the <code>campaigns.trigger.send</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>When specifying a segment or Connected Audience in your request, we apply a rate limit of 250 requests per minute to this endpoint. Otherwise, if specifying an <code>external_id</code>, this endpoint has a default rate limit of 250,000 requests per hour, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<p>Braze endpoints support <a href=\"https://www.braze.com/docs/api/api_limits/#batching-api-requests\">batching API requests</a>. A single request to the messaging endpoints can reach any of the following:</p>\n<ul>\n<li>Up to 50 specific <code>external_ids</code>, each with individual message parameters</li>\n<li>A segment of any size created in the Braze dashboard, specified by its <code>segment_id</code></li>\n<li>An ad-hoc audience segment of any size, defined in the request as a <a href=\"https://www.braze.com/docs/api/objects_filters/connected_audience/\">Connected Audience</a> object</li>\n</ul>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>campaign_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">campaign identifier</a>.</td>\n</tr>\n<tr>\n<td><code>send_id</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">send identifier</a>.</td>\n</tr>\n<tr>\n<td><code>trigger_properties</code></td>\n<td>Optional</td>\n<td>Object</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/trigger_properties_object/\">trigger properties</a>. Personalization key-value pairs that will apply to all users in this request.</td>\n</tr>\n<tr>\n<td><code>broadcast</code></td>\n<td>Optional</td>\n<td>Boolean</td>\n<td>See <a href=\"https://www.braze.com/docs/api/parameters/#broadcast\">broadcast</a>. This parameter defaults to false (as of August 31, 2017).  <br />  <br />If <code>recipients</code> is omitted, <code>broadcast</code> must be set to true. However, use caution when setting <code>broadcast: true</code>, as unintentionally setting this flag may cause you to send your campaign to a larger than expected audience.</td>\n</tr>\n<tr>\n<td><code>audience</code></td>\n<td>Optional</td>\n<td>Connected audience object</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/connected_audience/\">connected audience</a>.</td>\n</tr>\n<tr>\n<td><code>recipients</code></td>\n<td>Optional</td>\n<td>Array</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/recipient_object/\">recipients object</a>. If not provided and <code>broadcast</code> is set to true, the message will send to the entire segment targeted by the campaign.</td>\n</tr>\n</tbody>\n</table>\n</div><p>The recipients array may contain up to 50 objects, with each object containing a single <code>external_user_id</code> string and <code>trigger_properties</code> object.</p>\n<p>When <code>send_to_existing_only</code> is <code>true</code>, Braze will only send the message to existing users. When <code>send_to_existing_only</code> is <code>false</code> and a user with the given <code>id</code> does not exist, Braze will create a user with that id and attributes before sending the message.</p>\n<blockquote>\n<p>Important: A user’s subscription group status can be updated via the inclusion of a subscription_groups parameter within the attributes object. This is currently in early access. Contact your Braze customer success manager if you’re interested in participating in the early access. More details can be found in the <a href=\"https://www.braze.com/docs/api/objects_filters/user_attributes_object\">User attributes object</a>. </p>\n</blockquote>\n<h2 id=\"response-details\">Response details</h2>\n<p>Message sending endpoint responses will include the message’s <code>dispatch_id</code> for reference back to the dispatch of the message. The <code>dispatch_id</code> is the ID of the message dispatch, a unique ID for each transmission sent from the Braze platform. When using this endpoint, you receive a single <code>dispatch_id</code> for an entire batched set of users. For more information on <code>dispatch_id</code> check out out our documentation on <a href=\"https://www.braze.com/docs/help/help_articles/data/dispatch_id/\">Dispatch ID Behavior</a>.</p>\n<h2 id=\"create-send-endpoint\">Create send endpoint</h2>\n<p><strong>Using the attributes object in campaigns</strong></p>\n<p>Braze has a Messaging Object called <code>Attributes</code> that will allow you to add, create, or update attributes and values for a user before you send them an API-triggered campaigns using the <code>campaign/trigger/send</code> endpoint as this API call will process the User Attributes object before it processes and sends the campaign. This helps minimize the risk of there being issues caused by <a href=\"https://www.braze.com/docs/help/best_practices/race_conditions/\">race conditions</a>.</p>\n<blockquote>\n<p><strong>Important:</strong> Looking for the Canvas version of this endpoint? Check out <a href=\"https://www.braze.com/docs/api/endpoints/messaging/send_messages/post_send_triggered_canvases/#create-send-endpoint\">Sending Canvas messages via API-triggered delivery</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["campaigns","trigger","send"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"aef185ae-f591-452a-93a9-61d4bc023b05"},{"name":"Send Canvases using API-triggered delivery","id":"c9a8a5fe-a101-4755-99f2-73aa8fc146fe","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","type":"text","value":"Bearer {{api_key}}"}],"body":{"mode":"raw","raw":"{\n  \"canvas_id\": \"canvas_identifier\",\n  \"canvas_entry_properties\": {\"product_name\" : \"shoes\", \"product_price\" : 79.99},\n  \"broadcast\": false,\n  \"audience\": {\n    \"AND\": [\n      {\n        \"custom_attribute\": {\n          \"custom_attribute_name\": \"eye_color\",\n          \"comparison\": \"equals\",\n          \"value\": \"blue\"\n        }\n      },\n      {\n        \"custom_attribute\": {\n          \"custom_attribute_name\": \"favorite_foods\",\n          \"comparison\": \"includes_value\",\n          \"value\": \"pizza\"\n        }\n      },\n      {\n        \"OR\": [\n          {\n            \"custom_attribute\": {\n              \"custom_attribute_name\": \"last_purchase_time\",\n              \"comparison\": \"less_than_x_days_ago\",\n              \"value\": 2\n            }\n          },\n          {\n            \"push_subscription_status\": {\n              \"comparison\": \"is\",\n              \"value\": \"opted_in\"\n            }\n          }\n        ]\n      },\n      {\n        \"email_subscription_status\": {\n          \"comparison\": \"is_not\",\n          \"value\": \"subscribed\"\n        }\n      },\n      {\n        \"last_used_app\": {\n          \"comparison\": \"after\",\n          \"value\": \"2019-07-22T13:17:55+0000\"\n        }\n      }\n    ]\n  },\n  \"recipients\": [\n    {\n      \"user_alias\": {\n        \"alias_name\" : \"example_name\",\n        \"alias_label\" : \"example_label\"\n      },\n      \"external_user_id\": \"user_identifier\",\n      \"trigger_properties\": \"\",\n      \"canvas_entry_properties\": \"\",\n      \"send_to_existing_only\": true,\n      \"attributes\": {\n          \"first_name\" : \"Alex\"\n      }\n    }\n  ]\n}"},"url":"https://{{instance_url}}/canvas/trigger/send","description":"<blockquote>\n<p>Use this endpoint to send Canvas messages via API-triggered delivery. </p>\n</blockquote>\n<p>To use this endpoint, you’ll need to generate an API key with the <code>canvas.trigger.send</code> permission.</p>\n<p>API-triggered delivery allows you to house message content inside of the Braze dashboard while dictating when a message is sent, and to whom via your API.</p>\n<p>Note that to send messages with this endpoint, you must have a <a href=\"https://www.braze.com/docs/api/identifier_types/#canvas-api-identifier\">Canvas ID</a> created when you build a Canvas.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>When specifying a segment or Connected Audience in your request, we apply a rate limit of 250 requests per minute to this endpoint. Otherwise, if specifying an <code>external_id</code>, this endpoint has a default rate limit of 250,000 requests per hour, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<p>Braze endpoints support <a href=\"https://www.braze.com/docs/api/api_limits/#batching-api-requests\">batching API requests</a>. A single request to the messaging endpoints can reach any of the following:</p>\n<ul>\n<li>Up to 50 specific <code>external_ids</code>, each with individual message parameters</li>\n<li>A segment of any size created in the Braze dashboard, specified by its <code>segment_id</code></li>\n<li>An ad-hoc audience segment of any size, defined in the request as a <a href=\"https://www.braze.com/docs/api/objects_filters/connected_audience/\">Connected Audience</a> object</li>\n</ul>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>canvas_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">Canvas identifier</a>.</td>\n</tr>\n<tr>\n<td><code>canvas_entry_properties</code></td>\n<td>Optional</td>\n<td>Object</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/canvas_entry_properties_object/\">Canvas entry properties</a>. Personalization key-value pairs that will apply to all users in this request. The Canvas entry properties object has a maximum size limit of 50 KB.</td>\n</tr>\n<tr>\n<td><code>broadcast</code></td>\n<td>Optional</td>\n<td>Boolean</td>\n<td>You must set <code>broadcast</code> to true when sending a message to an entire segment that a campaign or Canvas targets. This parameter defaults to false (as of August 31, 2017).  <br />  <br />If <code>broadcast</code> is set to true, a recipients list cannot be included. However, use caution when setting <code>broadcast: true</code>, as unintentionally setting this flag may cause you to send your message to a larger than expected audience.</td>\n</tr>\n<tr>\n<td><code>audience</code></td>\n<td>Optional</td>\n<td>Connected audience object</td>\n<td>See <a href=\"https://braze.com/docs/api/objects_filters/connected_audience/\">Connected audience</a>.</td>\n</tr>\n<tr>\n<td><code>recipients</code></td>\n<td>Optional</td>\n<td>Array</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/recipient_object/\">Recipients object</a>. If not provided and <code>broadcast</code> is set to true, the message will send to the entire segment targeted by the Canvas.  <br />  <br />The <code>recipients</code> array may contain up to 50 objects, with each object containing a single <code>external_user_id</code> string and <code>canvas_entry_properties</code> object. Either <code>external_user_id</code> or user_alias is required for this call. Requests must specify only one.  <br />  <br />When <code>send_to_existing_only</code> is true, Braze will only send the message to existing users—however this flag can’t be used with user aliases. When <code>send_to_existing_only</code> is <code>false</code> and a user with the given <code>id</code> does not exist, Braze will create a user with that ID and attributes before sending the message.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Customers using the API for server-to-server calls may need to whitelist the appropriate API URL if they’re behind a firewall.</p>\n<blockquote>\n<p><strong>Note:</strong> If you include both specific users in your API call and a target segment in the dashboard, the message will send to specifically the user profiles that are in the API call and qualify for the segment filters. </p>\n</blockquote>\n<h2 id=\"response-details\">Response details</h2>\n<p>Message sending endpoint responses will include the message’s <code>dispatch_id</code> for reference back to the dispatch of the message. The <code>dispatch_id</code> is the ID of the message dispatch (unique ID for each “transmission” sent from the Braze platform). Check out <a href=\"https://www.braze.com/docs/help/help_articles/data/dispatch_id/\">Dispatch ID behavior</a> for more information.</p>\n<h2 id=\"create-send-endpoint\">Create send endpoint</h2>\n<p><strong>Using the Attributes Object in Canvas</strong></p>\n<p>Braze has a Messaging Object called <code>Attributes</code> that allows you to add, create, or update attributes and values for a user before sending them an API-Triggered Canvas using the <code>canvas/trigger/send</code> endpoint as this API call will process the User Attributes object before it processes and sends the Canvas. This helps minimize the risk of there being issues caused by <a href=\"https://www.braze.com/docs/help/best_practices/race_conditions/\">race conditions</a>.</p>\n<blockquote>\n<p><strong>Important:</strong> Looking for the camaigns version of this endpoint? Check out <a href=\"https://www.braze.com/docs/api/endpoints/messaging/send_messages/post_send_triggered_campaigns/\">Sending campaign messages via API-triggered delivery</a>.</p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["canvas","trigger","send"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"c9a8a5fe-a101-4755-99f2-73aa8fc146fe"}],"id":"7babde92-7ddb-4053-87a5-ab0f6c264d2c","_postman_id":"7babde92-7ddb-4053-87a5-ab0f6c264d2c","description":""}],"id":"2caba516-ea27-47ed-b8d5-a64b211db7d0","description":"<p>The Braze Messaging API provides you with two distinct options for sending messages to your users. You can provide the message contents and configuration in the API request with the <code>/messages/send</code> and <code>/messages/schedule</code> endpoints. Alternatively, you can manage the details of your message with an API-triggered campaign in the Braze dashboard and just control when and to whom it is sent with the <code>/campaigns/trigger/send</code> and <code>/campaigns/trigger/schedule</code> endpoints. The following sections will detail the request specification for both methods.</p>\n<p>Similarly to other campaigns, you can limit the number of times a particular user can receive a messaging API campaign by configuring <a href=\"https://www.braze.com/docs/user_guide/engagement_tools/campaigns/building_campaigns/delivery_types/api_triggered_delivery/#re-eligibility-with-api-triggered-campaigns\">re-eligibility settings</a> in the Braze dashboard. Braze will not deliver API messages to users who haven’t become re-eligible for the campaign regardless of how many API requests are sent.</p>\n<p>The Send Message endpoints allow you to send immediate messages to designated users. If you are targeting a segment, a record of your request will be stored in the <strong>Message Activity Log</strong>. Use the Schedule Message endpoints to send messages at a designated time, and modify or cancel messages that you have already scheduled.</p>\n","_postman_id":"2caba516-ea27-47ed-b8d5-a64b211db7d0"},{"name":"Preference Center","item":[{"name":"Generate preference center URL","id":"0bc750ff-068e-4391-897e-6eddca2561cd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/preference_center/v1/{PreferenceCenterExternalID}/url/{UserID}?preference_center_api_id={{preference_center_api_id}}&external_id={{external_id}}","description":"<blockquote>\n<p>Use this endpoint to generate a URL for a preference center. </p>\n</blockquote>\n<p>Each preference center URL is unique to each user.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an API key with the <code>preference_center.user.get</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a rate limit of 1,000 requests per minute, per workspace.</p>\n<h2 id=\"path-parameters\">Path parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>preferenceCenterExternalID</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The ID for your preference center.</td>\n</tr>\n<tr>\n<td><code>userID</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The user ID.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Parameter</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Data Type</strong></th>\n<th><strong>Description</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>preference_center_api_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The ID for your preference center.</td>\n</tr>\n<tr>\n<td><code>external_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The external ID for a user.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request GET 'https://rest.iad-01.braze.com/preference_center/v1/$preference_center_external_id/url/$user_external_id' \\\n--header 'Authorization: Bearer YOUR-API-KEY-HERE'\n\n</code></pre><h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"preference_center_url\": \"https://www.example.com/preferences\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["preference_center","v1","{PreferenceCenterExternalID}","url","{UserID}"],"host":["{{instance_url}}"],"query":[{"key":"preference_center_api_id","value":"{{preference_center_api_id}}"},{"description":{"content":"<p>(Required) String</p>\n","type":"text/plain"},"key":"external_id","value":"{{external_id}}"}],"variable":[]}},"response":[],"_postman_id":"0bc750ff-068e-4391-897e-6eddca2561cd"},{"name":"List preference centers","id":"dd8f6667-5eba-4e19-a29e-ba74644c0b8e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/preference_center/v1/list","description":"<blockquote>\n<p>Use this endpoint to list your available preference centers. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an API key with the <code>preference_center.list</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a rate limit of 1,000 requests per minute, per workspace.</p>\n<h2 id=\"path-and-request-parameters\">Path and request parameters</h2>\n<p>There are no path or request parameters for this endpoint.</p>\n<h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location -g --request GET https://rest.iad-01.braze.com/preference_center/v1/list \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY'\n\n</code></pre><h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"preference_centers\": [\n    {\n      \"name\": \"My Preference Center 1\",\n      \"preference_center_api_id\": \"preference_center_api_id\",\n      \"created_at\": \"2022-08-17T15:46:10Z\",\n      \"updated_at\": \"2022-08-17T15:46:10Z\"\n    },\n    {\n      \"name\": \"My Preference Center 2\",\n      \"preference_center_api_id\": \"preference_center_api_id\",\n      \"created_at\": \"2022-08-19T11:13:06Z\",\n      \"updated_at\": \"2022-08-19T11:13:06Z\"\n    },\n    {\n      \"name\": \"My Preference Center 3\",\n      \"preference_center_api_id\": \"preference_center_api_id\",\n      \"created_at\": \"2022-08-19T11:30:50Z\",\n      \"updated_at\": \"2022-08-19T11:30:50Z\"\n    },\n    {\n      \"name\": \"My Preference Center 4\",\n      \"preference_center_api_id\": \"preference_center_api_id\",\n      \"created_at\": \"2022-09-13T20:41:34Z\",\n      \"updated_at\": \"2022-09-13T20:41:34Z\"\n    }\n  ]\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["preference_center","v1","list"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"dd8f6667-5eba-4e19-a29e-ba74644c0b8e"},{"name":"View details for preference center","id":"6a47fd7c-2997-4832-aedb-d101a2dd03a5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/preference_center/v1/{PreferenceCenterExternalID}","description":"<blockquote>\n<p>Use this endpoint to view the details for your preference centers, including when it was created and updated. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you'll need an API key with the <code>preference_center.get</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a rate limit of 1,000 requests per minute, per workspace.</p>\n<h2 id=\"path-parameters\">Path parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>preferenceCenterExternalID</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The ID for your preference center.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"request-parameters\">Request parameters</h2>\n<p>There are no request parameters for this endpoint.</p>\n<h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location -g --request GET https://rest.iad-01.braze.com/preference_center/v1/preference_center_external_id \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY'\n\n</code></pre><h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"name\": \"My Preference Center\",\n  \"preference_center_api_id\": \"preference_center_api_id\",\n  \"created_at\": \"example_time_created\",\n  \"updated_at\": \"example_time_updated\",\n  \"preference_center_title\": \"Example preference center title\",\n  \"preference_center_page_html\": \"HTML for preference center here\",\n  \"confirmation_page_html\": \"HTML for confirmation page here\",\n  \"redirect_page_html\": null,\n  \"preference_center_options\": {\n    \"meta-viewport-content\": \"width=device-width, initial-scale=2\"\n  },\n  \"state\": \"active\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["preference_center","v1","{PreferenceCenterExternalID}"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"6a47fd7c-2997-4832-aedb-d101a2dd03a5"},{"name":"Create preference center","id":"e15d7065-2cbc-4eb3-ae16-32efe43357a6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"string\",\n  \"preference_center_title\": \"string\",\n  \"preference_center_page_html\": \"string\",\n  \"confirmation_page_html\": \"string\",\n  \"state\": (optional) Choose `active` or `draft`. Defaults to `active` if not specified,\n  \"options\": {\n    \"meta-viewport-content\": \"string\", (optional) Only the `content` value of the meta tag\n  }\n}"},"url":"https://{{instance_url}}/preference_center/v1","description":"<blockquote>\n<p>Use this endpoint to create a preference center to allow users to manage their notification preferences for your email campaigns. </p>\n</blockquote>\n<p>Refer to <a href=\"https://www.braze.com/docs/user_guide/message_building_by_channel/email/preference_center/overview/#create-a-preference-center-via-api\">Create a preference center with API</a> for steps on how to build an API-generated preference center.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an API key with the <code>preference_center.update</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a rate limit of 10 requests per minute, per workspace.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>name</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The name of the preference center that meets the following requirements:  <br />- Only contains letters, numbers, hyphens, and underscores  <br />- Does not have spaces</td>\n</tr>\n<tr>\n<td><code>preference_center_title</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>The title for the preference center and confirmation pages. If a title is not specified, the title of the pages will default to \"Preference Center\".</td>\n</tr>\n<tr>\n<td><code>preference_center_page_html</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The HTML for the preference center page.</td>\n</tr>\n<tr>\n<td><code>confirmation_page_html</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The HTML for the confirmation page.</td>\n</tr>\n<tr>\n<td><code>state</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>Choose <code>active</code> or <code>draft</code>. Defaults to <code>active</code> if not specified.</td>\n</tr>\n<tr>\n<td><code>options</code></td>\n<td>Optional</td>\n<td>Object</td>\n<td>Attributes: <code>meta-viewport-content</code>. When present, a <code>viewport</code> meta tag will be added to the page with <code>content=</code> .</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>Note:</strong> The preference center name can't be edited after it's created. </p>\n</blockquote>\n<h3 id=\"liquid-tags\">Liquid tags</h3>\n<p>Refer to the following Liquid tags that can be included in your HTML to generate a user's subscription state on the preference center page.</p>\n<h4 id=\"user-subscription-state\">User subscription state</h4>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Liquid</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>{{subscribed_state.${email_global}}}</code></td>\n<td>Get the global email subscribed state for the user (such as \"opted_in\", \"subscribed\", or \"unsubscribed\").</td>\n</tr>\n<tr>\n<td><code>{{subscribed_state.${}}}</code></td>\n<td></td>\n</tr>\n</tbody>\n</table>\n</div><h4 id=\"form-inputs-and-action\">Form inputs and action</h4>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Liquid</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>{% form_field_name :email_global_state %}</code></td>\n<td>Indicates that a specific form input element corresponds to the user’s global email subscribed state. The user’s selection state should be “opted_in”, “subscribed”, or “unsubscribed” when the form is submitted with selection data for the global email subscribed state. If it’s a checkbox, the user will either be “opted_in” or “unsubscribed”. For a hidden input, the “subscribed” state will also be valid.</td>\n</tr>\n<tr>\n<td><code>{% form_field_name :subscription_group %}</code></td>\n<td>Indicates that a specific form input element corresponds to a given subscription group. The user's selection state should be either \"subscribed\" or \"unsubscribed\" when the form is submitted with selection data for a specific subscription group.</td>\n</tr>\n<tr>\n<td><code>{{preference_center_submit_url}}</code></td>\n<td>Generates URL for form submission.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-responses\">Example responses</h2>\n<h3 id=\"create-preference-center\">Create preference center</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"preference_center_api_id\": \"preference_center_api_id_example\",\n  \"liquid_tag\": \"{{preference_center.${MyPreferenceCenter2022-09-22}}}\",\n  \"created_at\": \"2022-09-22T18:28:07+00:00\",\n  \"message\": \"success\"\n}\n\n</code></pre><h3 id=\"html-with-form-inputs\">HTML with form inputs</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>%3C!doctype%20html%3E\n&lt;html lang=\"en\"&gt;\n  &lt;head&gt;\n    &lt;meta name=\"robots\" content=\"noindex\" /&gt;\n    &lt;title&gt;Email Preferences&lt;/title&gt;\n    &lt;script type=\"text/javascript\"&gt;\n%20%20%20%20%20%20window.onload%20%3D%20()%20%3D%3E%20%7B\n%20%20%20%20%20%20%20%20const%20globalUnsubscribed%20%3D%20%26%23x27%3B%7B%7Bsubscribed_state.%24%7Bemail_global%7D%7D%7D%26%23x27%3B%20%3D%3D%20%22unsubscribed%22%3B\n%20%20%20%20%20%20%20%20const%20globalSubscribedValue%20%3D%20%26%23x27%3B%7B%7Bsubscribed_state.%24%7Bemail_global%7D%7D%7D%26%23x27%3B%20%3D%3D%20%22opted_in%22%20%3F%20%22opted_in%22%20%3A%20%22subscribed%22%3B\n%20%20%20%20%20%20%20%20const%20idStates%20%3D%20%5B\n%20%20%20%20%20%20%20%20%20%20%2F%2F%20input%20format%3A%20%5BAPI_ID%2C%20%26%23x27%3B%7B%7Bsubscribed_state.%24%7BAPI_ID%7D%7D%7D%26%23x27%3B%20%3D%3D%20%22subscribed%22%5D%5B%5D\n%20%20%20%20%20%20%20%20%20%20%5B%26%23x27%3B3d2ae07a-f2ff-4318-bdff-e394f2d3a4ec%26%23x27%3B%2C%20%26%23x27%3B%7B%7Bsubscribed_state.%24%7B3d2ae07a-f2ff-4318-bdff-e394f2d3a4ec%7D%7D%7D%26%23x27%3B%20%3D%3D%20%26%23x27%3Bsubscribed%26%23x27%3B%5D%2C%5B%26%23x27%3B7d89bdc3-4aa1-4592-8b8a-4c8b7161c875%26%23x27%3B%2C%20%26%23x27%3B%7B%7Bsubscribed_state.%24%7B7d89bdc3-4aa1-4592-8b8a-4c8b7161c875%7D%7D%7D%26%23x27%3B%20%3D%3D%20%26%23x27%3Bsubscribed%26%23x27%3B%5D%2C%5B%26%23x27%3B5444d32e-2815-4258-964c-b9690d4ccb94%26%23x27%3B%2C%20%26%23x27%3B%7B%7Bsubscribed_state.%24%7B5444d32e-2815-4258-964c-b9690d4ccb94%7D%7D%7D%26%23x27%3B%20%3D%3D%20%26%23x27%3Bsubscribed%26%23x27%3B%5D\n%20%20%20%20%20%20%20%20%5D%3B\n%20%20%20%20%20%20%20%20const%20setState%20%3D%20(id%2C%20subscribed)%20%3D%3E%20%7B\n%20%20%20%20%20%20%20%20%20%20document.querySelector(%60%23checkbox-%24%7Bid%7D%60).checked%20%3D%20subscribed%3B\n%20%20%20%20%20%20%20%20%20%20document.querySelector(%60%23value-%24%7Bid%7D%60).value%20%3D%20subscribed%20%3F%20%22subscribed%22%20%3A%20%22unsubscribed%22%3B\n%20%20%20%20%20%20%20%20%7D%3B\n%20%20%20%20%20%20%20%20const%20setGlobal%20%3D%20(unsubscribed)%20%3D%3E%20%7B\n%20%20%20%20%20%20%20%20%20%20document.querySelector(%60%23checkbox-global%60).checked%20%3D%20unsubscribed%3B\n%20%20%20%20%20%20%20%20%20%20document.querySelector(%60%23value-global%60).value%20%3D%20unsubscribed%20%3F%20%22unsubscribed%22%20%3A%20globalSubscribedValue%3B\n%20%20%20%20%20%20%20%20%20%20idStates.forEach((%5Bid%5D)%20%3D%3E%20%7B\n%20%20%20%20%20%20%20%20%20%20%20%20document.querySelector(%60%23checkbox-%24%7Bid%7D%60).disabled%20%3D%20unsubscribed%3B\n%20%20%20%20%20%20%20%20%20%20%7D)%3B\n%20%20%20%20%20%20%20%20%7D%3B\n%20%20%20%20%20%20%20%20idStates.forEach((%5Bid%2C%20state%5D)%20%3D%3E%20%7B\n%20%20%20%20%20%20%20%20%20%20setState(id%2C%20state)%3B\n%20%20%20%20%20%20%20%20%20%20document.querySelector(%60%23checkbox-%24%7Bid%7D%60).onchange%20%3D%20((e)%20%3D%3E%20%7B\n%20%20%20%20%20%20%20%20%20%20%20%20setState(id%2C%20e.target.checked)%3B\n%20%20%20%20%20%20%20%20%20%20%7D)%3B\n%20%20%20%20%20%20%20%20%7D)%3B\n%20%20%20%20%20%20%20%20setGlobal(globalUnsubscribed)%3B\n%20%20%20%20%20%20%20%20document.querySelector(%60%23checkbox-global%60).onchange%20%3D%20((e)%20%3D%3E%20%7B\n%20%20%20%20%20%20%20%20%20%20setGlobal(e.target.checked)%3B\n%20%20%20%20%20%20%20%20%7D)%3B\n%20%20%20%20%20%20%7D%3B\n    &lt;/script&gt;\n    &lt;style&gt;\n%20%20%20%20%20%20body%20%7B\n%20%20%20%20%20%20%20%20background%3A%20%23fff%3B\n%20%20%20%20%20%20%20%20margin%3A%200%3B\n%20%20%20%20%20%20%7D\n%20%20%20%20%20%20%40media%20(max-width%3A%20600px)%20%7B\n%20%20%20%20%20%20%20%20.main-container%20%7B\n%20%20%20%20%20%20%20%20%20%20margin-top%3A%200%3B\n%20%20%20%20%20%20%20%20%20%20width%3A%20100%25%3B\n%20%20%20%20%20%20%20%20%7D\n%20%20%20%20%20%20%20%20.main-container%20.content%20.email-input%20%7B\n%20%20%20%20%20%20%20%20%20%20width%3A%20100%25%3B\n%20%20%20%20%20%20%20%20%7D\n%20%20%20%20%20%20%7D\n    &lt;/style&gt;\n  &lt;/head&gt;\n  &lt;body class=\"vsc-initialized\" style=\"margin: 0\" bgcolor=\"#fff\"&gt;\n%20%20%20%20%3Cdiv\n%20%20%20%20%20%20class%3D%22main-container%22\n%20%20%20%20%20%20style%3D%22\n%20%20%20%20%20%20%20%20background-color%3A%20%23fff%3B\n%20%20%20%20%20%20%20%20color%3A%20%23333335%3B\n%20%20%20%20%20%20%20%20font-family%3A\n%20%20%20%20%20%20%20%20%20%20Sailec%20W00%20Medium%2C\n%20%20%20%20%20%20%20%20%20%20helvetica%2C\n%20%20%20%20%20%20%20%20%20%20arial%2C\n%20%20%20%20%20%20%20%20%20%20sans-serif%3B\n%20%20%20%20%20%20%20%20margin-left%3A%20auto%3B\n%20%20%20%20%20%20%20%20margin-right%3A%20auto%3B\n%20%20%20%20%20%20%20%20margin-top%3A%2030px%3B\n%20%20%20%20%20%20%20%20width%3A%20600px%3B\n%20%20%20%20%20%20%20%20padding%3A%2015px%200%205px%3B\n%20%20%20%20%20%20%22\n%20%20%20%20%3E\n      &lt;div class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27; class=\"content\" style=\"margin-left: 20px; margin-right: 20px\"&gt;\n        &lt;div class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27;&gt;\n%20%20%20%20%20%20%20%20%20%20%3Ch1\n%20%20%20%20%20%20%20%20%20%20%20%20style%3D%22color%3A%20%233accdd%3B%20font-size%3A%2027px%3B%20font-weight%3A%20400%3B%20margin-bottom%3A%2040px%3B%20margin-top%3A%200%22\n%20%20%20%20%20%20%20%20%20%20%20%20align%3D%22center%22\n%20%20%20%20%20%20%20%20%20%20%3E\n%20%20%20%20%20%20%20%20%20%20%20%20Manage%20Email%20Preferences\n          &lt;/h1&gt;\n          &lt;p class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27; class=\"intro-text\" style=\"font-size: 14px; margin-bottom: 20px\" align=\"center\"&gt;\n%20%20%20%20%20%20%20%20%20%20%20%20Select%20the%20emails%20that%20you%20want%20to%20receive.\n          &lt;/p&gt;\n        &lt;/div&gt;\n        &lt;form action=\"{{ preference_center_submit_url }}\" method=\"post\" accept-charset=\"UTF-8\"&gt;\n          &lt;div class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27;&gt;\n            &lt;h3 class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27; style=\"font-size: 15px; margin-bottom: 15px; margin-left: 5px; margin-top: 40px\"&gt;\n              Email Address: &lt;span class=\"displayed-email\" style=\"font-weight: 400\"&gt;{{${email_address}}}&lt;/span&gt;\n            &lt;/h3&gt;\n          &lt;/div&gt;\n          &lt;div class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27; class=\"subscription-groups-holder\" style=\"margin-bottom: 20px\"&gt;&lt;div class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27; class=\"row\" style=\"border-top-width: 1px; border-top-color: #dddde2; border-top-style: solid; background-color: #fff; padding: 15px 10px 14px;border-bottom: 1px solid rgb(221, 221, 226);\"&gt;\n  &lt;label style=\"color: #27368f; cursor: pointer; font-size: 15px; font-weight: 700;\"&gt;\n    &lt;input type=\"checkbox\" id=\"checkbox-3d2ae07a-f2ff-4318-bdff-e394f2d3a4ec\" class=\"sub_group\" style=\"margin-right: 4px;\"&gt;\n    &lt;input type=\"hidden\" name=\"{% form_field_name :subscription_group 3d2ae07a-f2ff-4318-bdff-e394f2d3a4ec %}\" id=\"value-3d2ae07a-f2ff-4318-bdff-e394f2d3a4ec\" /&gt;\n%20%20%20%20Sub%20Group%201\n  &lt;/label&gt;\n  &lt;p class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27; class=\"subscription-group\" style=\"font-size: 13px; line-height: 1.4em; min-height: 20px; padding-right: 20px; margin: 0 0 3px 23px;\"&gt;\n  &lt;/p&gt;\n&lt;/div&gt;\n&lt;div class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27; class=\"row\" style=\"border-top-width: 1px; border-top-color: #dddde2; border-top-style: solid; background-color: #fff; padding: 15px 10px 14px;border-bottom: 1px solid rgb(221, 221, 226);\"&gt;\n  &lt;label style=\"color: #27368f; cursor: pointer; font-size: 15px; font-weight: 700;\"&gt;\n    &lt;input type=\"checkbox\" id=\"checkbox-7d89bdc3-4aa1-4592-8b8a-4c8b7161c875\" class=\"sub_group\" style=\"margin-right: 4px;\"&gt;\n    &lt;input type=\"hidden\" name=\"{% form_field_name :subscription_group 7d89bdc3-4aa1-4592-8b8a-4c8b7161c875 %}\" id=\"value-7d89bdc3-4aa1-4592-8b8a-4c8b7161c875\" /&gt;\n%20%20%20%20Sub%20Group%202\n  &lt;/label&gt;\n  &lt;p class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27; class=\"subscription-group\" style=\"font-size: 13px; line-height: 1.4em; min-height: 20px; padding-right: 20px; margin: 0 0 3px 23px;\"&gt;\n  &lt;/p&gt;\n&lt;/div&gt;\n&lt;div class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27; class=\"row\" style=\"border-top-width: 1px; border-top-color: #dddde2; border-top-style: solid; background-color: #fff; padding: 15px 10px 14px;border-bottom: 1px solid rgb(221, 221, 226);\"&gt;\n  &lt;label style=\"color: #27368f; cursor: pointer; font-size: 15px; font-weight: 700;\"&gt;\n    &lt;input type=\"checkbox\" id=\"checkbox-5444d32e-2815-4258-964c-b9690d4ccb94\" class=\"sub_group\" style=\"margin-right: 4px;\"&gt;\n    &lt;input type=\"hidden\" name=\"{% form_field_name :subscription_group 5444d32e-2815-4258-964c-b9690d4ccb94 %}\" id=\"value-5444d32e-2815-4258-964c-b9690d4ccb94\" /&gt;\n%20%20%20%20Sub%20Group%203\n  &lt;/label&gt;\n  &lt;p class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27; class=\"subscription-group\" style=\"font-size: 13px; line-height: 1.4em; min-height: 20px; padding-right: 20px; margin: 0 0 3px 23px;\"&gt;\n  &lt;/p&gt;\n&lt;/div&gt;\n&lt;/div&gt;\n          &lt;div class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27; class=\"unsub-all\" style=\"cursor: pointer; font-size: 13px; margin-bottom: 20px\" align=\"center\"&gt;\n            &lt;label&gt;\n              &lt;input type=\"checkbox\" id=\"checkbox-global\" /&gt;\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cinput\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3D%22hidden%22\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20id%3D%22value-global%22\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name%3D%22%7B%25%20form_field_name%20%3Aemail_global_state%20%25%7D%22\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%3E\n              &lt;i class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27;&gt; Unsubscribe from all of the above types of emails &lt;/i&gt;\n            &lt;/label&gt;\n          &lt;/div&gt;\n          &lt;div class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27;&gt;\n%20%20%20%20%20%20%20%20%20%20%20%20%3Cinput\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20class%3D%22save%22\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3D%22submit%22\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3D%22Save%22\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20style%3D%22\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20background-color%3A%20rgb(71%2C%20204%2C%20163)%3B\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20color%3A%20%23fff%3B\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cursor%3A%20pointer%3B\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20display%3A%20block%3B\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20font-size%3A%2016px%3B\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text-align%3A%20center%3B\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text-decoration%3A%20none%3B\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20width%3A%20200px%3B\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20margin%3A%200%20auto%2020px%3B\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20padding%3A%2012px%3B\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20border-style%3A%20none%3B\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22\n%20%20%20%20%20%20%20%20%20%20%20%20%2F%3E\n          &lt;/div&gt;\n        &lt;/form&gt;\n      &lt;/div&gt;\n    &lt;/div&gt;\n  &lt;/body&gt;\n&lt;/html&gt;\n\n</code></pre>","urlObject":{"protocol":"https","path":["preference_center","v1"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"e15d7065-2cbc-4eb3-ae16-32efe43357a6"},{"name":"Update preference center","id":"bf1b43db-3f1b-461f-ad9a-2fbe35b804d7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"preference_center_name\",\n  \"preference_center_title\": \"string\",\n  \"preference_center_page_html\": \"string\",\n  \"confirmation_page_html\": \"string\",\n  \"options\": {\n    \"meta-viewport-content\": \"string\", (optional) Only the `content` value of the meta tag\n  }\n}"},"url":"https://{{instance_url}}/preference_center/v1/{PreferenceCenterExternalID}","description":"<blockquote>\n<p>Use this endpoint to update a preference center. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/basics#rest-api-key/\">API key </a> with the <code>preference_center.update</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a rate limit of 10 requests per minute, per workspace.</p>\n<h2 id=\"path-parameters\">Path parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>preferenceCenterExternalID</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The ID for your preference center.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>preference_center_page_html</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The HTML for the preference center page.</td>\n</tr>\n<tr>\n<td><code>preference_center_title</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>The title for the preference center and confirmation pages. If a title is not specified, the title of the pages will default to \"Preference Center\".</td>\n</tr>\n<tr>\n<td><code>confirmation_page_html</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The HTML for the confirmation page.</td>\n</tr>\n<tr>\n<td><code>state</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>Choose <code>active</code> or <code>draft</code>.</td>\n</tr>\n<tr>\n<td><code>options</code></td>\n<td>Optional</td>\n<td>Object</td>\n<td>Attributes:  <br /><code>meta-viewport-content</code>: When present, a <code>viewport</code> meta tag will be added to the page with <code>content=</code>  <br />  <br /><code>link-tags</code>: Set a favicon for the page. When set, a  tag with a rel attribute is added to the page.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request POST 'https://rest.iad-01.braze.com/preference_center/v1/{preferenceCenterExternalId}' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-API-KEY-HERE' \\\n--data-raw '{\n  \"name\": \"Example\",\n  \"preference_center_title\": \"Example Preference Center Title\",\n  \"preference_center_page_html\": \"HTML for preference center here\",\n  \"confirmation_page_html\": \"HTML here with a message to users here\",\n  \"state\": \"active\"\n}\n'\n\n</code></pre><h2 id=\"example-response\">Example response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"preference_center_api_id\": \"8efc52aa-935e-42b7-bd6b-98f43bb9b0f1\",\n  \"created_at\": \"2022-09-22T18:28:07Z\",\n  \"updated_at\": \"2022-09-22T18:32:07Z\",\n  \"message\": \"success\"\n}\n\n</code></pre>","urlObject":{"protocol":"https","path":["preference_center","v1","{PreferenceCenterExternalID}"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"bf1b43db-3f1b-461f-ad9a-2fbe35b804d7"}],"id":"6d20ac1a-6788-4a60-afb9-0264ec928879","description":"<p>Use the endpoints in this section to build a preference center, which is a Braze-hosted website that can display your user’s subscription state and subscription group statuses. Using HTML and CSS, your developer team can build your preference center so that the styling of the page matches your brand guidelines.</p>\n<p>Check out <a href=\"https://www.braze.com/docs/user_guide/message_building_by_channel/email/preference_center/overview/\"> Preference center overview</a> for more details on how to create and customize your preference center.</p>\n","_postman_id":"6d20ac1a-6788-4a60-afb9-0264ec928879"},{"name":"SCIM","item":[{"name":"Remove dashboard user account","id":"9c7c71ea-afd6-414a-99d1-4eb1fe274f16","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"X-Request-Origin","value":"YOUR-REQUEST-ORIGIN-HERE","type":"text"},{"key":"Authorization","value":"Bearer YOUR-SCIM-TOKEN-HERE","type":"text"}],"url":"https://{{instance_url}}/scim/v2/Users/{id}","description":"<blockquote>\n<p>Use this endpoint to permanently delete an existing dashboard user by specifying the resource <code>id</code> returned by the SCIM <a href=\"https://www.braze.com/docs/scim/post_create_user_account/\">&lt;code&gt;POST&lt;/code&gt;</a> method. </p>\n</blockquote>\n<p>This is similar to deleting a user in the <strong>Manage Users</strong> section of the Braze dashboard.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you'll need a SCIM token. For more information, refer to <a href=\"https://www.braze.com/docs/scim/automated_user_provisioning/\">Automated user provisioning</a>.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a rate limit of 5000 requests per day, per company. This rate limit is shared with the <code>/scim/v2/Users/</code> PUT, GET, and POST endpoints as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"path-parameters\">Path parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The user’s resource ID. This parameter is returned by the <code>POST</code> <code>/scim/v2/Users/</code> or <code>GET</code> <code>/scim/v2/Users?filter=userName eq \"[user@test.com](mailto:user@test.com)\"</code> methods.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"request-parameters\">Request parameters</h2>\n<p>There is no request body for this endpoint.</p>\n<h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location --request DELETE 'https://rest.iad-01.braze.com/scim/v2/Users/dfa245b7-24195aec-887bb3ad-602b3340' \\\n--header 'Content-Type: application/json' \\\n--header 'X-Request-Origin: YOUR-REQUEST-ORIGIN-HERE' \\\n--header 'Authorization: Bearer YOUR-SCIM-TOKEN-HERE' \\\n\n</code></pre>\n<h2 id=\"response\">Response</h2>\n<h3 id=\"example-error-response\">Example error response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">HTTP/1.1 204 Not Found\nContent-Type: text/html; charset=UTF-8\n\n</code></pre>\n<p>If a developer with this ID doesn’t exist in Braze, the endpoint will respond with:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">HTTP/1.1 404 Not Found Content-Type: text/html; charset=UTF-8\n{ \"schemas\": [\"urn:ietf:params:scim:api:messages:2.0:Error\"], \"detail\": \"User not found\", \"status\": 404 }\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["scim","v2","Users","{id}"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"9c7c71ea-afd6-414a-99d1-4eb1fe274f16"},{"name":"Search existing dashboard user by email","id":"5037d810-b822-4c54-bb51-f30470a42a95","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"X-Request-Origin","value":"YOUR-REQUEST-ORIGIN-HERE","type":"text"},{"key":"Authorization","value":"Bearer YOUR-SCIM-TOKEN-HERE","type":"text"}],"url":"https://{{instance_url}}/scim/v2/Users?filter={userName@example.com}","description":"<blockquote>\n<p>Use this endpoint to look up an existing dashboard user account by specifying their email in the filter query parameter. </p>\n</blockquote>\n<p>Note that when the query parameter is URL encoded it will read like this: <code>/scim/v2/Users?filter=userName eq \"user@test.com\"</code></p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you'll need a SCIM token. For more information, refer to <a href=\"https://www.braze.com/docs/scim/automated_user_provisioning/\">Automated user provisioning</a>.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a rate limit of 5000 requests per day, per company. This rate limit is shared with the <code>/scim/v2/Users/</code> PUT, GET, DELETE, and POST endpoints as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"path-parameters\">Path parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>userName@example.com</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The user's email.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"request-parameters\">Request parameters</h2>\n<p>There is no request body for this endpoint.</p>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nX-Request-Origin: YOUR-REQUEST-ORIGIN-HERE\nAuthorization: Bearer YOUR-SCIM-TOKEN-HERE\n{\n    \"schemas\": [\"urn:ietf:params:scim:api:messages:2.0:ListResponse\"],\n    \"totalResults\": 1,\n    \"Resources\": [\n        {\n            \"userName\": \"user@test.com\",\n            \"id\": \"dfa245b7-24195aec-887bb3ad-602b3340\",\n            \"name\": {\n                \"givenName\": \"Test\",\n                \"familyName\": \"User\"\n            },\n            \"department\": \"finance\",\n            \"lastSignInAt\": \"Thursday, January 1, 1970 12:00:00 AM\",\n            \"permissions\": {\n                \"companyPermissions\": [\"manage_company_settings\"],\n                \"appGroup\": [\n                    {\n                        \"appGroupId\": \"241adcd25789fabcded\",\n                        \"appGroupName\": \"Test Workspace\",\n                        \"appGroupPermissions\": [\"basic_access\",\"send_campaigns_canvases\"],\n                        \"team\": [\n                            {\n                                \"teamId\": \"241adcd25789fabcded\",\n                                \"teamName\": \"Test Team\",                  \n                                \"teamPermissions\": [\"admin\"]\n                            }\n                        ]\n                    } \n                ]\n            }\n        }\n    ]\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["scim","v2","Users"],"host":["{{instance_url}}"],"query":[{"key":"filter","value":"{userName@example.com}"}],"variable":[]}},"response":[],"_postman_id":"5037d810-b822-4c54-bb51-f30470a42a95"},{"name":"Look up an existing dashboard user account","id":"3df40764-8f74-4532-aed3-ab8a6cb92122","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"X-Request-Origin","value":"YOUR-REQUEST-ORIGIN-HERE","type":"text"},{"key":"Authorization","value":"Bearer YOUR-SCIM-TOKEN-HERE","type":"text"}],"url":"https://{{instance_url}}/scim/v2/Users/{id}","description":"<blockquote>\n<p>Use this endpoint to look up an existing dashboard user account by specifying the resource <code>id</code> returned by the SCIM <a href=\"https://www.braze.com/docs/scim/post_create_user_account/\">&lt;code&gt;POST&lt;/code&gt;</a> method. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you'll need a SCIM token. For more information, refer to <a href=\"https://www.braze.com/docs/scim/automated_user_provisioning/\">Automated user provisioning</a>.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a rate limit of 5000 requests per day, per company. This rate limit is shared with the <code>/scim/v2/Users/</code> PUT, GET, DELETE, and POST endpoints as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"path-parameters\">Path parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The user's resource ID. This parameter is returned by the <code>POST</code> <code>/scim/v2/Users/</code> or <code>GET</code> <code>/scim/v2/Users?filter=userName eq \"user@test.com\"</code> methods.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"request-parameters\">Request parameters</h2>\n<p>There is no request body for this endpoint.</p>\n<h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location --request GET 'https://rest.iad-01.braze.com/scim/v2/Users/dfa245b7-24195aec-887bb3ad-602b3340' \\\n--header 'Content-Type: application/json' \\\n--header 'X-Request-Origin: YOUR-REQUEST-ORIGIN-HERE' \\\n--header 'Authorization: Bearer YOUR-API-KEY-HERE' \\\n\n</code></pre>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"schemas\": [\"urn:ietf:params:scim:schemas:core:2.0:User\"],\n    \"id\": \"dfa245b7-24195aec-887bb3ad-602b3340\",\n    \"userName\": \"user@test.com\",\n    \"name\": {\n        \"givenName\": \"Test\",\n        \"familyName\": \"User\"\n    },\n    \"department\": \"finance\",\n    \"lastSignInAt\": \"Thursday, January 1, 1970 12:00:00 AM\",\n    \"createdAt\": \"Thursday, January 1, 1970 12:00:00 AM\",\n    \"permissions\": {\n        \"companyPermissions\": [\"manage_company_settings\"],\n        \"roles\": [\n            {\n                \"roleName\": \"Another Test Role\",\n                \"roleId\": \"23125dad23dfaae7,\n                \"appGroup\": [\n                    {\n                        \"appGroupId\": \"241adcd25adfabcded\",\n                        \"appGroupName\": \"Production Workspace\",\n                        \"appGroupPermissionSets\": [\n                            {\n                                \"appGroupPermissionSetName\": \"A Permission Set\",\n                                \"appGroupPermissionSetId\": \"dfa385109bc38\",\n                                \"permissions\": [\"basic_access\",\"publish_cards\"]\n                            }\n                        ]\n                    } \n                ]\n            }\n        ],\n        \"appGroup\": [\n            {\n                \"appGroupId\": \"241adcd25789fabcded\",\n                \"appGroupName\": \"Test Workspace\",\n                \"appGroupPermissions\": [\"basic_access\",\"send_campaigns_canvases\"],\n                \"team\": [\n                    {\n                         \"teamId\": \"241adcd25789fabcded\",\n                         \"teamName\": \"Test Team\",                  \n                         \"teamPermissions\": [\"admin\"]\n                    }\n                ]\n            } \n        ]\n    }\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["scim","v2","Users","{id}"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"3df40764-8f74-4532-aed3-ab8a6cb92122"},{"name":"Create new dashboard user account","id":"768a3c9d-ce1d-44fc-a0e4-d556b09f7aa3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"X-Request-Origin","value":"YOUR-REQUEST-ORIGIN-HERE","type":"text"},{"key":"Authorization","value":"Bearer YOUR-SCIM-TOKEN-HERE","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"schemas\": [\"urn:ietf:params:scim:schemas:core:2.0:User\"],\n    \"userName\": \"user@test.com\",\n    \"name\": {\n        \"givenName\": \"Test\",\n        \"familyName\": \"User\"\n    },\n    \"department\": \"finance\",\n    \"permissions\": {\n        \"companyPermissions\": [\"manage_company_settings\"],\n        \"appGroup\": [\n            {\n                \"appGroupName\": \"Test App Group\",\n                \"appGroupPermissions\": [\"basic_access\",\"send_campaigns_canvases\"],\n                \"team\": [\n                    {\n                         \"teamName\": \"Test Team\",                  \n                         \"teamPermissions\": [\"basic_access\",\"export_user_data\"]\n                    }\n                ]\n            } \n        ]\n    }\n}"},"url":"https://{{instance_url}}/scim/v2/Users","description":"<blockquote>\n<p>Use this endpoint to create a new dashboard user account by specifying email, given and family names, permissions (for setting permissions at the company, app group, and team level). </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you'll need a SCIM token. For more information, refer to <a href=\"https://www.braze.com/docs/scim/automated_user_provisioning/\">Automated user provisioning</a>.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a rate limit of 5000 requests per day, per company. This rate limit is shared with the <code>/scim/v2/Users/</code> PUT, GET, and DELETE endpoints as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>schemas</code></td>\n<td>Required</td>\n<td>Array of strings</td>\n<td>Expected SCIM 2.0 schema name for user object.</td>\n</tr>\n<tr>\n<td><code>userName</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The user’s email address.</td>\n</tr>\n<tr>\n<td><code>name</code></td>\n<td>Required</td>\n<td>JSON object</td>\n<td>This object contains the user's given name and family name.</td>\n</tr>\n<tr>\n<td><code>department</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Valid department string from the <a href=\"https://%7B%7Bsite.baseurl%7D%7D/scim_api_appendix/#department-strings\">department string documentation</a>.</td>\n</tr>\n<tr>\n<td><code>permissions</code></td>\n<td>Required</td>\n<td>JSON object</td>\n<td>Permissions object as described in the <a href=\"https://%7B%7Bsite.baseurl%7D%7D/scim_api_appendix/#permissions-object\">permissions object documentation</a>.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"schemas\": [\"urn:ietf:params:scim:schemas:core:2.0:User\"],\n    \"id\": \"dfa245b7-24195aec-887bb3ad-602b3340\",\n    \"userName\": \"user@test.com\",\n    \"name\": {\n        \"givenName\": \"Test\",\n        \"familyName\": \"User\"\n    },\n    \"department\": \"finance\",\n    \"lastSignInAt\": \"Thursday, January 1, 1970 12:00:00 AM\",\n    \"permissions\": {\n        \"companyPermissions\": [\"manage_company_settings\"],\n        \"appGroup\": [\n            {\n                \"appGroupId\": \"241adcd25789fabcded\",\n                \"appGroupName\": \"Test App Group\",\n                \"appGroupPermissions\": [\"basic_access\",\"send_campaigns_canvases\"],\n                \"team\": [\n                    {\n                         \"teamId\": \"2519dafcdba238ae7\",\n                         \"teamName\": \"Test Team\",                  \n                         \"teamPermissions\": [\"basic_access\",\"export_user_data\"]\n                    }\n                ]\n            } \n        ]\n    }\n}\n\n</code></pre>\n<h3 id=\"error-states\">Error states</h3>\n<p>If a user with this email address already exists in Braze, the endpoint will respond with:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">HTTP/1.1 409 Conflict\nDate: Tue, 10 Sep 2019 02:22:30 GMT\nContent-Type: text/json;charset=UTF-8\n{\n  \"schemas\": [\"urn:ietf:params:scim:api:messages:2.0:Error\"],\n  \"detail\": \"User already exists in the database.\",\n  \"status\": 409\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["scim","v2","Users"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"768a3c9d-ce1d-44fc-a0e4-d556b09f7aa3"},{"name":"Update dashboard user account","id":"5f9a1642-988e-4011-8fb8-db4340ea1ac7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"X-Request-Origin","value":"YOUR-REQUEST-ORIGIN-HERE","type":"text"},{"key":"Authorization","value":"Bearer YOUR-SCIM-TOKEN-HERE","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"schemas\": [\"urn:ietf:params:scim:schemas:core:2.0:User\"],\n    \"name\": {\n        \"givenName\": \"Test\",\n        \"familyName\": \"User\"\n    },\n    \"department\": \"finance\",\n    \"permissions\": {\n        \"companyPermissions\": [\"manage_company_settings\"],\n        \"appGroup\": [\n            {\n                \"appGroupName\": \"Test App Group\",\n                \"appGroupPermissions\": [\"basic_access\",\"send_campaigns_canvases\"],\n                \"team\": [\n                    {\n                         \"teamName\": \"Test Team\",\n                         \"teamPermissions\": [\"admin\"]\n                    } \n                ]\n            } \n        ]\n   }\n}"},"url":"https://{{instance_url}}/scim/v2/Users/{id}","description":"<blockquote>\n<p>Use this endpoint to update an existing dashboard user account by specifying the resource <code>id</code> returned by the SCIM <a href=\"https://www.braze.com/docs/scim/post_create_user_account/\">&lt;code&gt;POST&lt;/code&gt;</a> method. </p>\n</blockquote>\n<p>It allows you to update of given and family names, permissions (for setting permissions at the company, app group, and team level) and department.</p>\n<p>For security reasons, <code>userName</code> (email address) cannot be updated through this endpoint. If you would like to change the <code>userName</code> (email address) for a user, contact <a href=\"https://www.braze.com/docs/support_contact/\">Support</a>.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you'll need a SCIM token. For more information, refer to <a href=\"https://www.braze.com/docs/scim/automated_user_provisioning/\">Automated user provisioning</a>.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a rate limit of 5000 requests per day, per company. This rate limit is shared with the <code>/scim/v2/Users/</code> GET, DELETE, and POST endpoints as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"path-parameters\">Path parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The user's resource ID. This parameter is returned by the <code>POST</code> <code>/scim/v2/Users/</code> or <code>GET</code> <code>/scim/v2/Users?filter=userName eq \"user@test.com\"</code> methods.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>schemas</code></td>\n<td>Required</td>\n<td>Array of strings</td>\n<td>Expected SCIM 2.0 schema name for user object.</td>\n</tr>\n<tr>\n<td><code>name</code></td>\n<td>Required</td>\n<td>JSON object</td>\n<td>This object contains the user's given name and family name.</td>\n</tr>\n<tr>\n<td><code>department</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Valid department string from the <a href=\"https://%7B%7Bsite.baseurl%7D%7D/scim_api_appendix/#department-strings\">department string documentation</a>.</td>\n</tr>\n<tr>\n<td><code>permissions</code></td>\n<td>Required</td>\n<td>JSON object</td>\n<td>Permissions object as described in the <a href=\"https://%7B%7Bsite.baseurl%7D%7D/scim_api_appendix/#permissions-object\">permissions object documentation</a>.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"schemas\": [\"urn:ietf:params:scim:schemas:core:2.0:User\"],\n    \"id\": \"dfa245b7-24195aec-887bb3ad-602b3340\",\n    \"userName\": \"user@test.com\",\n    \"name\": {\n        \"givenName\": \"Test\",\n        \"familyName\": \"User\"\n    },\n    \"department\": \"finance\",\n    \"lastSignInAt\": \"Thursday, January 1, 1970 12:00:00 AM\",\n    \"permissions\": {\n        \"companyPermissions\": [\"manage_company_settings\"],\n        \"appGroup\": [\n            {\n                \"appGroupId\": \"241adcd25789fabcded\",\n                \"appGroupName\": \"Test App Group\",\n                \"appGroupPermissions\": [\"basic_access\",\"send_campaigns_canvases\"],\n                \"team\": [\n                    {\n                         \"teamId\": \"2519dafcdba238ae7\",\n                         \"teamName\": \"Test Team\",                  \n                         \"teamPermissions\": [\"admin\"]\n                    }\n                ]\n            } \n        ]\n    }\n}\n\n</code></pre>\n<h3 id=\"error-states\">Error states</h3>\n<p>If a user with this ID doesn’t exist in Braze, the endpoint will respond with:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">HTTP/1.1 404 Not Found\nContent-Type: text/html; charset=UTF-8\n{\n    \"schemas\": [\"urn:ietf:params:scim:api:messages:2.0:Error\"],\n    \"detail\": \"User not found\",\n    \"status\": 404\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["scim","v2","Users","{id}"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"5f9a1642-988e-4011-8fb8-db4340ea1ac7"}],"id":"d66cf93b-b3ac-473b-b878-cc1ab9c4956a","description":"<p>The <a href=\"http://www.simplecloud.info/\">System for Cross-domain Identity Management (SCIM)</a>  specification is designed to make managing user identities in cloud-based applications and services easier by providing a defined schema for representing users and groups. Use the Braze SCIM endpoints to manage automated user provisioning.</p>\n","_postman_id":"d66cf93b-b3ac-473b-b878-cc1ab9c4956a"},{"name":"SMS","item":[{"name":"Query invalid phone numbers","id":"81ceae19-15d1-4ac1-ad22-a6b86a92456d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/sms/invalid_phone_numbers?start_date=2018-09-01&end_date=2018-09-01&limit=100&offset=1&phone_numbers=12345678901&reason=provider_error","description":"<blockquote>\n<p>Use this endpoint to pull a list of phone numbers that have been deemed “invalid” within a certain time frame. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/basics#rest-api-key/\">API key</a> with the <code>sms.invalid_phone_numbers</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th></th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>start_date</code></td>\n<td>Optional  <br />(see note)</td>\n<td>String in YYYY-MM-DD format</td>\n<td>Start date of the range to retrieve invalid phone numbers, must be earlier than <code>end_date</code>. This is treated as midnight in UTC time by the API.</td>\n</tr>\n<tr>\n<td><code>end_date</code></td>\n<td>Optional  <br />(see note)</td>\n<td>String in YYYY-MM-DD format</td>\n<td>End date of the range to retrieve invalid phone numbers. This is treated as midnight in UTC time by the API.</td>\n</tr>\n<tr>\n<td><code>limit</code></td>\n<td>Optional</td>\n<td>Integer</td>\n<td>Optional field to limit the number of results returned. Defaults to 100, maximum is 500.</td>\n</tr>\n<tr>\n<td><code>offset</code></td>\n<td>Optional</td>\n<td>Integer</td>\n<td>Optional beginning point in the list to retrieve from.</td>\n</tr>\n<tr>\n<td><code>phone_numbers</code></td>\n<td>Optional  <br />(see note)</td>\n<td>Array of Strings in e.164 format</td>\n<td>If provided, we will return the phone number if it has been found to be invalid.</td>\n</tr>\n<tr>\n<td><code>reason</code></td>\n<td>Optional  <br />(see note)</td>\n<td>String</td>\n<td>Available values are “provider_error” (provider error indicates phone cannot receive SMS) or “deactivated” (phone number has been deactivated). If omitted, all reasons are returned.</td>\n</tr>\n</tbody>\n</table>\n</div><ul>\n<li><p>You must provide either a <code>start_date</code> and an <code>end_date</code> OR <code>phone_numbers</code>. If you provide all three, <code>start_date</code>, <code>end_date</code>, and <code>phone_numbers</code>, we prioritize the given phone numbers and disregard the date range.</p>\n</li>\n<li><p>If your date range has more than the <code>limit</code> number of invalid phone numbers, you will need to make multiple API calls with increasing the <code>offset</code> each time until a call returns either fewer than <code>limit</code> or zero results.</p>\n</li>\n</ul>\n<h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location --request GET 'https://rest.iad-01.braze.com/sms/invalid_phone_numbers?start_date=2019-01-01&amp;end_date=2019-02-01&amp;limit=100&amp;offset=1&amp;phone_numbers[]=12345678901' \\\n--header 'Authorization: Bearer YOUR-API-KEY-HERE'\n\n</code></pre>\n<h2 id=\"response\">Response</h2>\n<p>Entries are listed in descending order.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n  \"sms\": [\n    {\n      \"phone\": (string) phone number in e.164 format,\n      \"invalid_detected_at\": (string) the time the invalid number was detected in ISO 8601\n      \"reason\" : \"provider_error\"\n    },\n    {\n      \"phone\": (string) phone number in e.164 format,\n      \"invalid_detected_at\": (string) the time the invalid number was detected in ISO 8601\n      \"reason\" : \"deactivated\"\n    },\n    {\n      \"phone\": (string) phone number in e.164 format,\n      \"invalid_detected_at\": (string) the time the invalid number was detected in ISO 8601\n      \"reason\" : \"provider_error\"\n    }\n  ],\n  \"message\": \"success\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["sms","invalid_phone_numbers"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Optional*) String in YYYY-MM-DD format </p>\n<p>Start date of the range to retrieve invalid phone numbers, must be earlier than <code>end_date</code>. This is treated as midnight in UTC time by the API.</p>\n","type":"text/plain"},"key":"start_date","value":"2018-09-01"},{"description":{"content":"<p>(Optional*) String in YYYY-MM-DD format </p>\n<p>End date of the range to retrieve invalid phone numbers. This is treated as midnight in UTC time by the API.</p>\n","type":"text/plain"},"key":"end_date","value":"2018-09-01"},{"description":{"content":"<p>(Optional) Integer</p>\n<p>Optional field to limit the number of results returned. Defaults to 100, maximum is 500.</p>\n","type":"text/plain"},"key":"limit","value":"100"},{"description":{"content":"<p>(Optional) Integer</p>\n<p>Optional beginning point in the list to retrieve from.</p>\n","type":"text/plain"},"key":"offset","value":"1"},{"description":{"content":"<p>(Optional*) Array of Strings in e.164 format</p>\n<p>If provided, we will return the phone number if it has been found to be invalid.</p>\n","type":"text/plain"},"key":"phone_numbers","value":"12345678901"},{"description":{"content":"<p>(Optional) String</p>\n<p>Available values are “provider_error” (provider error indicates phone cannot receive SMS) or “deactivated” (phone number has been deactivated). If omitted, all reasons are returned.</p>\n","type":"text/plain"},"key":"reason","value":"provider_error"}],"variable":[]}},"response":[],"_postman_id":"81ceae19-15d1-4ac1-ad22-a6b86a92456d"},{"name":"Remove invalid phone numbers","id":"76495aac-8c2d-4e1a-8cac-12e3856ab1d3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"phone_numbers\": (required, array of string in e.164 format)\n}"},"url":"https://{{instance_url}}/sms/invalid_phone_numbers/remove","description":"<blockquote>\n<p>Use this endpoint to remove “invalid” phone numbers from Braze’s invalid list. </p>\n</blockquote>\n<p>This can be used to re-validate phone numbers after they have been marked as invalid.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/basics#rest-api-key/\">API key</a> with the <code>sms.invalid_phone_numbers.remove</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>phone_number</code></td>\n<td>Required</td>\n<td>Array of strings in e.164 format</td>\n<td>An array of up to 50 phone numbers to modify.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location --request POST 'https://rest.iad-01.braze.com/sms/invalid_phone_numbers/remove' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY' \\\n--data-raw '{\n  \"phone_numbers\" : [\"12183095514\",\"14255551212\"]\n}'\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["sms","invalid_phone_numbers","remove"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"76495aac-8c2d-4e1a-8cac-12e3856ab1d3"}],"id":"61a7002c-d047-4913-ac81-9217d8843fd8","description":"<p>Use the Braze SMS Endpoints to manage your users’ phone numbers in your subscription groups.</p>\n","_postman_id":"61a7002c-d047-4913-ac81-9217d8843fd8"},{"name":"Subscription Groups","item":[{"name":"Email","item":[{"name":"List user's  subscription group status","id":"488c8923-fa44-4124-9245-036d13c615f2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/subscription/status/get?subscription_group_id={{subscription_group_id}}&external_id={{external_identifier}}&email=example@braze.com","description":"<blockquote>\n<p>Use this endpoint to get the subscription state of a user in a subscription group. </p>\n</blockquote>\n<p>To use this endpoint, you’ll need to generate an API key with the <code>subscription.status.get</code> permission.</p>\n<p>These groups will be available on the <strong>Subscription Group</strong> page. The response from this endpoint will include the external ID and either subscribed, unsubscribed, or unknown for the specific subscription group requested in the API call. This can be used to update the subscription group state in subsequent API calls or to be displayed on a hosted web page.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/basics#rest-api-key/\">API key</a> with the <code>subscription.status.get</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"https://www.braze.com/docs/api/identifier_types/?tab=subscription%20group%20ids\"><code>subscription_group_id</code></a></td>\n<td>Required</td>\n<td>String</td>\n<td>The <code>id</code> of your subscription group.</td>\n</tr>\n<tr>\n<td><code>external_id</code></td>\n<td>Required*</td>\n<td>String</td>\n<td>The <code>external_id</code> of the user (must include at least one and at most 50 <code>external_ids</code>).  <br />  <br />When both an <code>external_id</code> and <code>email</code>/<code>phone</code> are submitted, only the <code>external_id</code>(s) provided will be applied to the result query.</td>\n</tr>\n<tr>\n<td><code>email</code></td>\n<td>Required*</td>\n<td>String</td>\n<td>The email address of the user. It can be passed as an array of strings with a maximum of 50.  <br />  <br />Submitting both an email address and phone number (with no <code>external_id</code>) will result in an error.</td>\n</tr>\n</tbody>\n</table>\n</div><p>One of <code>external_id</code> or <code>email</code> or <code>phone</code> is required for each user.</p>\n<ul>\n<li>For email subscription groups, either <code>external_id</code> or <code>email</code> is required. When both are submitted, only the <code>external_id</code> is used for the query and the email address is applied to that user.</li>\n</ul>\n<h2 id=\"example-request\">Example request</h2>\n<h3 id=\"multiple-users\">Multiple users</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">1\nhttps://rest.iad-03.braze.com/subscription/status/get?subscription_group_id={{subscription_group_id}}&amp;external_id[]=1&amp;external_id[]=2\n\n</code></pre>\n<h3 id=\"email\">Email</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location -g --request GET 'https://rest.iad-01.braze.com/subscription/status/get?subscription_group_id={{subscription_group_id}}&amp;email=example@braze.com' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY'\n\n</code></pre>\n<h2 id=\"response\">Response</h2>\n<p>All successful responses will return <code>Subscribed</code>, <code>Unsubscribed</code>, or <code>Unknown</code> depending on status and user history with the subscription group.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR-REST-API-KEY\n{\n  \"status\": {\n    \"1\": \"Unsubscribed\",\n    \"2\": \"Subscribed\"\n  },\n  \"message\": \"success\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["subscription","status","get"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) String</p>\n<p>The <code>id</code> of your subscription group.</p>\n","type":"text/plain"},"key":"subscription_group_id","value":"{{subscription_group_id}}"},{"description":{"content":"<p>(Required*) String</p>\n<p>The <code>external_id</code> of the user (must include at least one and at most 50 <code>external_ids</code>).</p>\n<p>When both an <code>external_id</code> and <code>email</code>/<code>phone</code> are submitted, only the <code>external_id</code>(s) provided will be applied to the result query.</p>\n","type":"text/plain"},"key":"external_id","value":"{{external_identifier}}"},{"description":{"content":"<p>(Required* ) String</p>\n<p>The email address of the user. It can be passed as an array of strings with a maximum of 50.</p>\n<p>Submitting both an email address and phone number (with no <code>external_id</code>) will result in an error.</p>\n","type":"text/plain"},"key":"email","value":"example@braze.com"}],"variable":[]}},"response":[],"_postman_id":"488c8923-fa44-4124-9245-036d13c615f2"},{"name":"List user's subscription group","id":"d1c3b617-22f1-47bf-9ee8-499526824470","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"graphql","graphql":{"query":"","variables":""}},"url":"https://{{instance_url}}/subscription/user/status?external_id={{external_id}}&email=example@braze.com&limit=100&offset=0","description":"<blockquote>\n<p>Use this endpoint to list and get the subscription groups of a certain user. </p>\n</blockquote>\n<h2 id=\"prequisites\">Prequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/basics#rest-api-key/\">API key</a> with the <code>subscription.groups.get</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"example-request\">Example request</h2>\n<h3 id=\"multiple-users\">Multiple users</h3>\n<p><code>https://rest.iad-03.braze.com/subscription/user/status?external_id[]=1&amp;external_id[]=2</code></p>\n<h3 id=\"email\">Email</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location -g --request GET 'https://rest.iad-01.braze.com/subscription/user/status?external_id={{external_id}}&amp;email=example@braze.com&amp;limit=100&amp;offset=0' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY'\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["subscription","user","status"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) String</p>\n<p>The <code>external_id</code> of the user. Must include at least one and at most 50 <code>external_ids</code>.</p>\n<p>If there are multiple users (multiple <code>external_ids</code>) who share the same email address, all users will be returned as a separate user (even if they have the same email address or subscription group).</p>\n","type":"text/plain"},"key":"external_id","value":"{{external_id}}"},{"description":{"content":"<p>(Required) String</p>\n<p>The email address of the user, can be passed as an array of strings. Must include at least one email address (with a maximum of 50).</p>\n","type":"text/plain"},"key":"email","value":"example@braze.com"},{"description":{"content":"<p>(Optional) Integer</p>\n<p>The limit on the maximum number of results returned. Default (and maximum) limit is 100.</p>\n","type":"text/plain"},"key":"limit","value":"100"},{"description":{"content":"<p>(Optional) Integer</p>\n<p>Number of templates to skip before returning the rest of the templates that fit the search criteria.</p>\n","type":"text/plain"},"key":"offset","value":"0"}],"variable":[]}},"response":[],"_postman_id":"d1c3b617-22f1-47bf-9ee8-499526824470"},{"name":"Update user's subscription group status (V2)","id":"b1b9a0e0-6329-4df2-a465-53347f410662","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"\"subscription_groups\":[\n    {\n      \"subscription_group_id\": (required, string),\n      \"subscription_state\": (required, string)\n      \"external_ids\": (required*, array of strings),\n      \"emails\": (required*, array of strings),\n      \"phones\": (required*, array of strings in E.164 format),\n    }\n  ]","options":{"raw":{"language":"json"}}},"url":"https://{{instance_url}} /v2/subscription/status/set","description":"<blockquote>\n<p>Use this endpoint to batch update the subscription state of up to 50 users on the Braze dashboard. </p>\n</blockquote>\n<p>You can access a subscription group’s <code>subscription_group_id</code> by navigating to the <strong>Subscriptions Group</strong> page.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/basics#rest-api-key/\">API key</a> with the <code>subscription.status.get</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a rate limit of 5,000 requests per minute shared across the <code>/subscription/status/set</code> and <code>/v2/subscription/status/set</code> endpoint as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"https://www.braze.com/docs/api/identifier_types?tab=subscription%20group%20ids\"><code>subscription_group_id</code></a></td>\n<td>Required</td>\n<td>String</td>\n<td>The <code>id</code> of your subscription group.</td>\n</tr>\n<tr>\n<td><code>subscription_state</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Available values are <code>unsubscribed</code> (not in subscription group) or <code>subscribed</code> (in subscription group).</td>\n</tr>\n<tr>\n<td><code>external_ids</code></td>\n<td>Required*</td>\n<td>Array of strings</td>\n<td>The <code>external_id</code> of the user or users, may include up to 50 <code>id</code>s.</td>\n</tr>\n<tr>\n<td><code>emails</code></td>\n<td>Required*</td>\n<td>String or array of strings</td>\n<td>The email address of the user, can be passed as an array of strings. Must include at least one email address (with a max of 50).  <br />  <br />If multiple users (<code>external_id</code>) in the same app group share the same email address, all users that share the email address are updated with the subscription group changes.</td>\n</tr>\n<tr>\n<td><code>phones</code></td>\n<td>Required*</td>\n<td>String in <a href=\"https://en.wikipedia.org/wiki/E.164\">E.164</a> format</td>\n<td>The phone numbers of the user, can be passed as an array of strings. Must include at least one phone number (with a maximum of 50).</td>\n</tr>\n</tbody>\n</table>\n</div><p>Note that you cannot include both <code>emails</code> and <code>phones</code> parameters. Also, <code>emails</code>, <code>phones</code>, and <code>external_ids</code> can all be sent individually.</p>\n<blockquote>\n<p>When creating new users via the <a href=\"https://www.braze.com/docs/api/endpoints/user_data/post_user_track/\">&lt;code&gt;/users/track&lt;/code&gt;&amp;nbsp;endpoint</a>, you can set subscription groups within the user attributes object, which allows you to create a user and set the subscription group state in one API call. </p>\n</blockquote>\n<h3 id=\"example-requests\">Example requests</h3>\n<p>The following example uses <code>external_id</code> to make one API call for email and SMS.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location --request POST 'https://rest.iad-01.braze.com/v2/subscription/status/set' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY' \\\n--data-raw '{\n  \"subscription_groups\":[\n    {\n      \"subscription_group_id\":\"subscription_group_identifier\",\n      \"subscription_state\":\"subscribed\",\n      \"external_ids\":[\"example-user\",\"example1@email.com\"]\n    },\n    {\n      \"subscription_group_id\":\"subscription_group_identifier\",\n      \"subscription_state\":\"subscribed\",\n      \"external_ids\":[\"example-user\",\"example1@email.com\"]\n    }\n  ]\n}\n\n</code></pre>\n<h4 id=\"email\">Email</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location --request POST 'https://rest.iad-01.braze.com/v2/subscription/status/set' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY' \\\n--data-raw '{\n  \"subscription_groups\":[\n    {\n      \"subscription_group_id\":\"subscription_group_identifier\",\n      \"subscription_state\":\"subscribed\",\n      \"emails\":[\"example1@email.com\",\"example2@email.com\"]\n    }\n  ]\n}\n'\n\n</code></pre>\n<h4 id=\"sms-and-whatsapp\">SMS and WhatsApp</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location --request POST 'https://rest.iad-01.braze.com/v2/subscription/status/set' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY' \\\n--data-raw '{\n  \"subscription_groups\":[\n    {\n      \"subscription_group_id\":\"subscription_group_identifier\",\n      \"subscription_state\":\"subscribed\",\n      \"phones\":[\"+12223334444\",\"+15556667777\"]\n    }\n  ]\n}\n'\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["v2","subscription","status","set"],"host":["{{instance_url}} "],"query":[],"variable":[]}},"response":[],"_postman_id":"b1b9a0e0-6329-4df2-a465-53347f410662"},{"name":"Update user's subscription group status","id":"8895e87e-6324-47a3-a833-adf29a258bb9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n   \"subscription_group_id\": (required, string) the id of your subscription group,\n   \"subscription_state\": (required, string) available values are \"unsubscribed\" (not in subscription group) or \"subscribed\" (in subscription group),\n   \"external_id\": (required*, array of strings) the external ID of the user or users, may include up to 50 IDs,\n   \"email\": (required*, array of strings) the email address of the user (must include at least one email and at most 50 emails),\n   // Email subscription group - one of external_id or email is required\n   // Note that sending an email address that is linked to multiple profiles will update all relevant profiles\n }"},"url":"https://{{instance_url}}/subscription/status/set","description":"<blockquote>\n<p>Use this endpoint to batch update the subscription state of up to 50 users on the Braze dashboard. </p>\n</blockquote>\n<p>You can access a subscription group’s <code>subscription_group_id</code> by navigating to the <strong>Subscription Group</strong> page.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/basics#rest-api-key/\">API key</a> with the <code>subscription.status.set</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a rate limit of 5,000 requests per minute shared across the <code>/subscription/status/set</code> and <code>/v2/subscription/status/set</code> endpoint as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"https://www.braze.com/docs/api/identifier_types?tab=subscription%20group%20ids\"><code>subscription_group_id</code></a></td>\n<td>Required</td>\n<td>String</td>\n<td>The <code>id</code> of your subscription group.</td>\n</tr>\n<tr>\n<td><code>subscription_state</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Available values are <code>unsubscribed</code> (not in subscription group) or <code>subscribed</code> (in subscription group).</td>\n</tr>\n<tr>\n<td><code>external_id</code></td>\n<td>Required*</td>\n<td>Array of strings</td>\n<td>The <code>external_id</code> of the user or users, may include up to 50 <code>id</code>s.</td>\n</tr>\n<tr>\n<td><code>email</code></td>\n<td>Required*</td>\n<td>String</td>\n<td>The email address of the user, can be passed as an array of strings. Must include at least one email address (with a max of 50).  <br />  <br />If multiple users (external_id) in the same app group share the same email address, then all users that share the email address are updated with the subscription group changes.</td>\n</tr>\n</tbody>\n</table>\n</div><p>This property should not be used for updating a user’s profile information. Use the <a href=\"https://www.braze.com/docs/api/endpoints/user_data/post_user_track/\">/users/track</a> property instead.</p>\n<blockquote>\n<p>When creating new users via the <a href=\"https://www.braze.com/docs/api/endpoints/user_data/post_user_track/\">/users/track</a> endpoint, you can set subscription groups within the user attributes object, which allows you to create a user and set the subscription group state in one API call. </p>\n</blockquote>\n<h2 id=\"example-requests\">Example requests</h2>\n<h3 id=\"email\">Email</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location --request POST 'https://rest.iad-01.braze.com/subscription/status/set' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY' \\\n--data-raw '{\n  \"subscription_group_id\": \"subscription_group_identifier\",\n  \"subscription_state\": \"unsubscribed\",\n  \"external_id\": \"external_identifier\",\n  \"email\": [\"example1@email.com\", \"example2@email.com\"]\n}\n'\n\n</code></pre>\n<h2 id=\"example-success-response\">Example success response</h2>\n<p>The status code <code>201</code> could return the following response body.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"message\": \"success\"\n}\n\n</code></pre>\n<blockquote>\n<p>The endpoint only accepts the <code>email</code> or <code>phone</code> value, not both. If given both, you will receive this response: <code>{\"message\":\"Either an email address or a phone number should be provided, but not both.\"}</code></p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["subscription","status","set"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"8895e87e-6324-47a3-a833-adf29a258bb9"}],"id":"729cb3ab-ef56-4bf4-a455-5b52d8a7703b","_postman_id":"729cb3ab-ef56-4bf4-a455-5b52d8a7703b","description":""},{"name":"SMS and WhatsApp","item":[{"name":"List user's subscription group status","id":"4b8515b8-067f-41fd-b213-8bb2d18b1557","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/subscription/status/get?subscription_group_id={{subscription_group_id}}&external_id={{external_identifier}}&phone=+11112223333","description":"<blockquote>\n<p>Use this endpoint to get the subscription state of a user in a subscription group. </p>\n</blockquote>\n<p>These groups will be available on the <strong>Subscription Group</strong> page. The response from this endpoint will include the external ID and either subscribed, unsubscribed, or unknown for the specific subscription group requested in the API call. This can be used to update the subscription group state in subsequent API calls or to be displayed on a hosted web page.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/basics#rest-api-key/\">API key</a> with the <code>subscription.status.get</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"https://www.braze.com/docs/api/identifier_types/?tab=subscription%20group%20ids\"><code>subscription_group_id</code></a></td>\n<td>Required</td>\n<td>String</td>\n<td>The <code>id</code> of your subscription group.</td>\n</tr>\n<tr>\n<td><code>external_id</code></td>\n<td>Required*</td>\n<td>String</td>\n<td>The <code>external_id</code> of the user (must include at least one and at most 50 <code>external_ids</code>).  <br />  <br />When both an <code>external_id</code> and <code>email</code>/<code>phone</code> are submitted, only the <code>external_id</code>(s) provided will be applied to the result query.</td>\n</tr>\n<tr>\n<td><code>phone</code></td>\n<td>Required*</td>\n<td>String in <a href=\"https://en.wikipedia.org/wiki/E.164\">E.164</a> format</td>\n<td>The phone number of the user. If email is not included, you must include at least one phone number (with a maximum of 50).  <br />  <br />Submitting both an email address and phone number (with no <code>external_id</code>) will result in an error.</td>\n</tr>\n</tbody>\n</table>\n</div><p>One of <code>external_id</code> or <code>email</code> or <code>phone</code> is required for each user.</p>\n<ul>\n<li>For SMS and WhatsApp subscription groups, either <code>external_id</code> or <code>phone</code> is required. When both are submitted, only the <code>external_id</code> is used for querying and the phone number is applied to that user.</li>\n</ul>\n<h2 id=\"example-request\">Example request</h2>\n<h3 id=\"multiple-users\">Multiple users</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">1\nhttps://rest.iad-03.braze.com/subscription/status/get?subscription_group_id={{subscription_group_id}}&amp;external_id[]=1&amp;external_id[]=2\n\n</code></pre>\n<h3 id=\"sms-and-whatsapp\">SMS and WhatsApp</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location -g --request GET 'https://rest.iad-01.braze.com/subscription/status/get?subscription_group_id={{subscription_group_id}}&amp;phone=+11112223333' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY'\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["subscription","status","get"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) String</p>\n<p>The <code>id</code> of your subscription group.</p>\n","type":"text/plain"},"key":"subscription_group_id","value":"{{subscription_group_id}}"},{"description":{"content":"<p>(Required*) String</p>\n<p>The <code>external_id</code> of the user (must include at least one and at most 50 <code>external_ids</code>).</p>\n<p>When both an <code>external_id</code> and <code>email</code>/<code>phone</code> are submitted, only the <code>external_id</code>(s) provided will be applied to the result query.</p>\n","type":"text/plain"},"key":"external_id","value":"{{external_identifier}}"},{"description":{"content":"<p>(Required*) String in <a href=\"https://en.wikipedia.org/wiki/E.164\">E.164</a> format</p>\n<p>The phone number of the user. If email is not included, you must include at least one phone number (with a maximum of 50).</p>\n<p>Submitting both an email address and phone number (with no <code>external_id</code>) will result in an error.</p>\n","type":"text/plain"},"key":"phone","value":"+11112223333"}],"variable":[]}},"response":[],"_postman_id":"4b8515b8-067f-41fd-b213-8bb2d18b1557"},{"name":"List user's subscription group","id":"54bd7ca8-60d9-4654-aff5-406479f3c666","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/subscription/user/status?external_id={{external_id}}&limit=100&offset=1&phone=+11112223333","description":"<blockquote>\n<p>Use this endpoint to list and get the subscription groups of a certain user. </p>\n</blockquote>\n<h2 id=\"prequisites\">Prequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/basics#rest-api-key/\">API key</a> with the <code>subscription.groups.get</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<blockquote>\n<p>If there are multiple users (multiple <code>external_ids</code>) who share the same email address, all users will be returned as a separate user (even if they have the same email address or subscription group). </p>\n</blockquote>\n<h2 id=\"example-request\">Example request</h2>\n<h3 id=\"multiple-users\">Multiple users</h3>\n<p><code>https://rest.iad-03.braze.com/subscription/user/status?external_id[]=1&amp;external_id[]=2</code></p>\n<h3 id=\"sms-and-whatsapp\">SMS and WhatsApp</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location -g --request GET 'https://rest.iad-01.braze.com/subscription/user/status?external_id={{external_id}}&amp;limit=100&amp;offset=1&amp;phone=+11112223333' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY'\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["subscription","user","status"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required*) String</p>\n<p>The external_id of the user (must include at least one and at most 50 external_ids).</p>\n","type":"text/plain"},"key":"external_id","value":"{{external_id}}"},{"description":{"content":"<p>(Optional) Integer</p>\n<p>The limit on the maximum number of results returned. Default (and maximum) limit is 100.</p>\n","type":"text/plain"},"key":"limit","value":"100"},{"description":{"content":"<p>(Optional) Integer</p>\n<p>Number of templates to skip before returning the rest of the templates that fit the search criteria.</p>\n","type":"text/plain"},"key":"offset","value":"1"},{"description":{"content":"<p>(Required*) String in <a href=\"https://en.wikipedia.org/wiki/E.164\">E.164</a> format</p>\n<p>The phone number of the user. Must include at least one phone number (with a maximum of 50).</p>\n","type":"text/plain"},"key":"phone","value":"+11112223333"}],"variable":[]}},"response":[],"_postman_id":"54bd7ca8-60d9-4654-aff5-406479f3c666"},{"name":"Update user's subscription group status (V2)","id":"81a5fe65-588b-4b61-82d8-5ce68b681409","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"\"subscription_groups\":[\n    {\n      \"subscription_group_id\": (required, string),\n      \"subscription_state\": (required, string)\n      \"external_ids\": (required*, array of strings),\n      \"emails\": (required*, array of strings),\n      \"phones\": (required*, array of strings in E.164 format),\n    }\n  ]"},"url":"https://{{instance_url}}/v2/subscription/status/set","description":"<blockquote>\n<p>Use this endpoint to batch update the subscription state of up to 50 users on the Braze dashboard. </p>\n</blockquote>\n<p>To use this endpoint, you’ll need to generate an API key with the <code>subscription.status.set</code> permission.</p>\n<p>You can access a subscription group’s <code>subscription_group_id</code> by navigating to the <strong>Subscriptions Group</strong> page.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a rate limit of 5,000 requests per minute shared across the<code>/subscription/status/set</code> and <code>/v2/subscription/status/set</code> endpoint as documented in <a href=\"http://localhost:4000/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>subscription_group_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The <code>id</code> of your subscription group.</td>\n</tr>\n<tr>\n<td><code>subscription_state</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Available values are <code>unsubscribed</code> (not in subscription group) or <code>subscribed</code> (in subscription group).</td>\n</tr>\n<tr>\n<td><code>external_ids</code></td>\n<td>Required*</td>\n<td>Array of strings</td>\n<td>The <code>external_id</code> of the user or users, may include up to 50 <code>id</code>s.</td>\n</tr>\n<tr>\n<td><code>phones</code></td>\n<td>Required*</td>\n<td>String in <a href=\"https://en.wikipedia.org/wiki/E.164\">E.164</a> format</td>\n<td>The phone numbers of the user, can be passed as an array of strings. Must include at least one phone number (with a max of 50).  <br />  <br />If multiple users (<code>external_id</code>) in the same workspace share the same phone number, then all users that share the phone number are updated with the same subscription group changes.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"example-requests\">Example requests</h3>\n<h4 id=\"sms\">SMS</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location --request POST 'https://rest.iad-01.braze.com/subscription/status/set' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY' \\\n--data-raw '{\n  \"subscription_groups\": [\n    {\n      \"subscription_group_id\": \"504e09e6-ffa4-4b31-96c3-c05d50d903cf\",\n      \"subscription_state\": \"unsubscribed\",\n      \"external_ids\": [\n        \"user1\",\n        \"user2\"\n      ],\n      \"emails\": [\n        \"test1@braze.com\",\n        \"test2@braze.com\"\n      ],\n      \"phones\": [\n        \"+445555555555\",\n        \"+445555555556\"\n      ]\n    }\n  ]\n}\n'\n\n</code></pre>\n<h3 id=\"example-successful-response\">Example successful response</h3>\n<p>Response: (status 201)</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"message\": \"success\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["v2","subscription","status","set"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"81a5fe65-588b-4b61-82d8-5ce68b681409"},{"name":"Update user's subscription group status","id":"72558b32-7dbe-4cba-bd22-a7ce513076dd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n   \"subscription_group_id\": (required, string) the id of your subscription group,\n   \"subscription_state\": (required, string) available values are \"unsubscribed\" (not in subscription group) or \"subscribed\" (in subscription group),\n   \"external_id\": (required*, array of strings) the external ID of the user or users, may include up to 50 IDs,\n   \"phone\": (required*, array of strings in E.164 format) The phone number of the user (must include at least one phone number and at most 50 phone numbers),\n   // SMS subscription group - one of external_id or phone is required\n }"},"url":"https://{{instance_url}}/subscription/status/set","description":"<blockquote>\n<p>Use this endpoint to batch update the subscription state of up to 50 users on the Braze dashboard. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/basics#rest-api-key/\">API key</a> with the <code>subscription.status.set</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>This endpoint has a rate limit of 5,000 requests per minute shared across the <code>/subscription/status/set</code> and <code>/v2/subscription/status/set</code> endpoint as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h3 id=\"request-parameters\">Request parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>subscription_group_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The <code>id</code> of your subscription group.</td>\n</tr>\n<tr>\n<td><code>subscription_state</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Available values are <code>unsubscribed</code> (not in subscription group) or <code>subscribed</code> (in subscription group).</td>\n</tr>\n<tr>\n<td><code>external_id</code></td>\n<td>Required*</td>\n<td>Array of strings</td>\n<td>The <code>external_id</code> of the user or users, may include up to 50 <code>id</code>s.</td>\n</tr>\n<tr>\n<td><code>phone</code></td>\n<td>Required*</td>\n<td>String in <a href=\"https://en.wikipedia.org/wiki/E.164\">E.164</a> format</td>\n<td>The phone number of the user, can be passed as an array of strings. Must include at least one phone number (with a max of 50).  <br />  <br />If multiple users (<code>external_id</code>) in the same workspace share the same phone number, then all users that share the phone number are updated with the same subscription group changes.</td>\n</tr>\n</tbody>\n</table>\n</div><p>This property should not be used for updating a user’s profile information. Use the <a href=\"https://www.braze.com/docs/api/endpoints/user_data/post_user_track/\">/users/track</a> property instead.</p>\n<blockquote>\n<p>When creating new users via the <a href=\"https://www.braze.com/docs/api/endpoints/user_data/post_user_track/\">/users/track</a> endpoint, you can set subscription groups within the user attributes object, which allows you to create a user and set the subscription group state in one API call. </p>\n</blockquote>\n<h2 id=\"example-requests\">Example requests</h2>\n<h3 id=\"sms-and-rcs\">SMS <strong>and RCS</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location --request POST 'https://rest.iad-01.braze.com/subscription/status/set' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY' \\\n--data-raw '{\n  \"subscription_group_id\": \"504e09e6-ffa4-4b31-96c3-c05d50d903cf\",\n  \"subscription_state\": \"unsubscribed\",\n  \"external_id\": [\n    \"user1\",\n    \"user2\"\n  ],\n  \"emails\": [\n    \"test1@braze.com\",\n    \"test2@braze.com\"\n  ],\n  \"phones\": [\n    \"+445555555555\",\n    \"+445555555556\"\n  ]\n}\n'\n\n</code></pre>\n<h2 id=\"example-success-response\">Example success response</h2>\n<p>The status code <code>201</code> could return the following response body.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"message\": \"success\"\n}\n\n</code></pre>\n<blockquote>\n<p>The endpoint only accepts the <code>email</code> or <code>phone</code> value, not both. If given both, you will receive this response: <code>{\"message\":\"Either an email address or a phone number should be provided, but not both.\"}</code></p>\n</blockquote>\n","urlObject":{"protocol":"https","path":["subscription","status","set"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"72558b32-7dbe-4cba-bd22-a7ce513076dd"}],"id":"53ea7760-5280-4be6-84de-f05f5343c498","_postman_id":"53ea7760-5280-4be6-84de-f05f5343c498","description":""}],"id":"41314f9c-bef6-42b0-ac57-e0808165679b","description":"<p>Use the Subscription Group REST APIs to programmatically manage the subscription groups that you have stored on the Braze dashboard, on the <strong>Subscription Group</strong> page. This applies to both SMS and email subscription groups.  </p>\n<p>Looking for guidance on creating subscription groups? Check out our articles for <a href=\"https://www.braze.com/docs/user_guide/message_building_by_channel/sms/sms_subscription_group//\">SMS subscription groups</a> and <a href=\"https://www.braze.com/docs/user_guide/message_building_by_channel/email/managing_user_subscriptions/\">email subscription groups</a>.</p>\n","_postman_id":"41314f9c-bef6-42b0-ac57-e0808165679b"},{"name":"Templates","item":[{"name":"Content Blocks","item":[{"name":"List available Content Blocks","id":"6d87048f-68fd-46c9-aa15-3a970e99540e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/content_blocks/list?modified_after=2020-01-01T01:01:01.000000&modified_before=2020-02-01T01:01:01.000000&limit=100&offset=1","description":"<blockquote>\n<p>Use this endpoint to list your existing <a href=\"https://www.braze.com/docs/user_guide/engagement_tools/templates_and_media/content_blocks/\">Content Blocks</a> information. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/api_key/\">API key</a> with the <code>content_blocks.list</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>modified_after</code></td>\n<td>Optional</td>\n<td>String in <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO-8601</a> format</td>\n<td>Retrieve only Content Blocks updated at or after the given time.</td>\n</tr>\n<tr>\n<td><code>modified_before</code></td>\n<td>Optional</td>\n<td>String in <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO-8601</a> format</td>\n<td>Retrieve only Content Blocks updated at or before the given time.</td>\n</tr>\n<tr>\n<td><code>limit</code></td>\n<td>Optional</td>\n<td>Positive Number</td>\n<td>Maximum number of Content Blocks to retrieve. Default to 100 if not provided, with a maximum acceptable value of 1000.</td>\n</tr>\n<tr>\n<td><code>offset</code></td>\n<td>Optional</td>\n<td>Positive Number</td>\n<td>Number of Content Blocks to skip before returning rest of the templates that fit the search criteria.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location --request GET 'https://rest.iad-01.braze.com/content_blocks/list?modified_after=2020-01-01T01:01:01.000000&amp;modified_before=2020-02-01T01:01:01.000000&amp;limit=100&amp;offset=1' \\\n--header 'Authorization: Bearer YOUR-API-KEY-HERE'\n\n</code></pre>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR_REST_API_KEY\n{\n  \"count\": \"integer\",\n  \"content_blocks\": [\n    {\n      \"content_block_id\": (string) the Content Block identifier,\n      \"name\": (string) the name of the Content Block,\n      \"content_type\": (string) the content type, html or text,\n      \"liquid_tag\": (string) the Liquid tags,\n      \"inclusion_count\" : (integer) the inclusion count,\n      \"created_at\": (string) The time the Content Block was created in ISO 8601,\n      \"last_edited\": (string) The time the Content Block was last edited in ISO 8601,\n      \"tags\": (array) An array of tags formatted as strings,\n    }\n  ]\n}\n\n</code></pre>\n<h2 id=\"troubleshooting\">Troubleshooting</h2>\n<p>The following table lists possible returned errors and their associated troubleshooting steps.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Modified after time is invalid</code></td>\n<td>The provided date is not a valid or parsable date. Reformat this value as a string in ISO 8601 format (<code>yyyy-mm-ddThh:mm:ss.ffffff</code>).</td>\n</tr>\n<tr>\n<td><code>Modified before time is invalid</code></td>\n<td>The provided date is not a valid or parsable date. Reformat this value as a string in ISO 8601 format (<code>yyyy-mm-ddThh:mm:ss.ffffff</code>).</td>\n</tr>\n<tr>\n<td><code>Modified after time must be earlier than or the same as modified before time.</code></td>\n<td>Change the <code>modified_after</code> value to a time that is earlier than the <code>modified_before</code> time.</td>\n</tr>\n<tr>\n<td><code>Content Block number limit is invalid</code></td>\n<td>The <code>limit</code> parameter must be an integer (positive number) greater than 0.</td>\n</tr>\n<tr>\n<td><code>Content Block number limit must be greater than 0</code></td>\n<td>Change the <code>limit</code> parameter to an integer greater than 0.</td>\n</tr>\n<tr>\n<td><code>Content Block number limit exceeds maximum of 1000</code></td>\n<td>Change the <code>limit</code> parameter to an integer less than 1000.</td>\n</tr>\n<tr>\n<td><code>Offset is invalid</code></td>\n<td>The <code>offset</code> parameter must be an integer greater than 0.</td>\n</tr>\n<tr>\n<td>Offset must be greater than 0</td>\n<td>Change the <code>offset</code> parameter to an integer greater than 0.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["content_blocks","list"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Optional) String in <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a></p>\n<p>Retrieve only content blocks updated at or after the given time.</p>\n","type":"text/plain"},"key":"modified_after","value":"2020-01-01T01:01:01.000000"},{"description":{"content":"<p>(Optional) String in <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a></p>\n<p>Retrieve only content blocks updated at or before the given time.</p>\n","type":"text/plain"},"key":"modified_before","value":"2020-02-01T01:01:01.000000"},{"description":{"content":"<p>(Optional) Positive Number</p>\n<p>Maximum number of content blocks to retrieve. Default to 100 if not provided, with a maximum acceptable value of 1000.</p>\n","type":"text/plain"},"key":"limit","value":"100"},{"description":{"content":"<p>(Optional) Positive Number</p>\n<p>Number of content blocks to skip before returning rest of the templates that fit the search criteria.</p>\n","type":"text/plain"},"key":"offset","value":"1"}],"variable":[]}},"response":[],"_postman_id":"6d87048f-68fd-46c9-aa15-3a970e99540e"},{"name":"See Content Block information","id":"589adda3-0def-4369-9ddc-eae71923c0ee","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/content_blocks/info?content_block_id={{content_block_id}}&include_inclusion_data=false","description":"<blockquote>\n<p>Use this endpoint to call information for your existing <a href=\"https://www.braze.com/docs/user_guide/engagement_tools/templates_and_media/content_blocks/\">Content Blocks</a>. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/api_key/\">API key</a> with the <code>content_blocks.info</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>content_block_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>The Content Block identifier.  <br />  <br />You can find this by either listing Content Block information through an API call or going to the <a href=\"https://www.braze.com/docs/user_guide/administrative/app_settings/api_settings_tab/\">API Keys</a> page, then scrolling to the bottom and searching for your Content Block API identifier.</td>\n</tr>\n<tr>\n<td><code>include_inclusion_data</code></td>\n<td>Optional</td>\n<td>Boolean</td>\n<td>When set to <code>true</code>, the API returns back the Message Variation API identifier of campaigns and Canvases where this Content Block is included, to be used in subsequent calls. The results exclude archived or deleted campaigns or Canvases.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location -g --request GET 'https://rest.iad-01.braze.com/content_blocks/info?content_block_id={{content_block_id}}&amp;include_inclusion_data=false' \\\n--header 'Authorization: Bearer YOUR-REST-API-KEY'\n\n</code></pre>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR_REST_API_KEY\n{\n  \"content_block_id\": (string) the Content Block identifier,\n  \"name\": (string) the name of the Content Block,\n  \"content\": (string) the content in the Content Block,\n  \"description\": (string) the Content Block description,\n  \"content_type\": (string) the content type, html or text,\n  \"tags\": (array) An array of tags formatted as strings,\n  \"created_at\": (string) The time the Content Block was created in ISO 8601,\n  \"last_edited\": (string) The time the Content Block was last edited in ISO 8601,\n  \"inclusion_count\" : (integer) the inclusion count,\n  \"inclusion_data\": (array) the inclusion data,\n  \"message\": \"success\",\n}\n\n</code></pre>\n<h2 id=\"troubleshooting\">Troubleshooting</h2>\n<p>The following table lists possible returned errors and their associated troubleshooting steps.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content Block ID cannot be blank</code></td>\n<td>Make sure that a Content Block is listed in your request and is encapsulated in quotes (<code>\"\"</code>).</td>\n</tr>\n<tr>\n<td><code>Content Block ID is invalid for this App Group</code></td>\n<td>This Content Block doesn't exist or is in a different company account or app group.</td>\n</tr>\n<tr>\n<td><code>Content Block has been deleted—content not available</code></td>\n<td>This Content Block, though it may have existed earlier, has been deleted.</td>\n</tr>\n<tr>\n<td><code>Include Inclusion Data—error</code></td>\n<td>This parameter only accepts boolean values (true or false). Make sure the value for <code>include_inclusion_data</code> is not encapsulated in quotes (<code>\"\"</code>), which causes the value to be sent as a string instead. See request headers for details.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["content_blocks","info"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) String</p>\n<p>The Content Block identifier.</p>\n<p>You can find this by either listing Content Block information through an API call or going to the API Keys page, then scrolling to the bottom and searching for your Content Block API identifier.</p>\n","type":"text/plain"},"key":"content_block_id","value":"{{content_block_id}}"},{"description":{"content":"<p>(Optional) Boolean</p>\n<p>When set to <code>true</code>, the API returns back the Message Variation API identifier of campaigns and Canvases where this Content Block is included, to be used in subsequent calls. The results exclude archived or deleted campaigns or Canvases.</p>\n","type":"text/plain"},"key":"include_inclusion_data","value":"false"}],"variable":[]}},"response":[],"_postman_id":"589adda3-0def-4369-9ddc-eae71923c0ee"},{"name":"Create Content Block","id":"f1cefa8b-7a28-4e64-b579-198a4610d0a5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"name\": (required, string) Must be less than 100 characters,\n  \"description\": (optional, string) The description of the Content Block. Must be less than 250 character,\n  \"content\": (required, string) HTML or text content within Content Block,\n  \"state\": (optional, string) Choose `active` or `draft`. Defaults to `active` if not specified,\n  \"tags\": (optional, array of strings) Tags must already exist\n}\n"},"url":"https://{{instance_url}}/content_blocks/create","description":"<blockquote>\n<p>Use this endpoint to create a <a href=\"https://www.braze.com/docs/user_guide/engagement_tools/templates_and_media/content_blocks/\">Content Block</a>. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/api_key/\">API key</a> with the <code>content_blocks.create</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>name</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Name of the Content Block. Must be less than 100 characters.</td>\n</tr>\n<tr>\n<td><code>description</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>Description of the Content Block. Must be less than 250 characters.</td>\n</tr>\n<tr>\n<td><code>content</code></td>\n<td>Required</td>\n<td>String</td>\n<td>HTML or text content within the Content Block.</td>\n</tr>\n<tr>\n<td><code>state</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>Choose <code>active</code> or <code>draft</code>. Defaults to <code>active</code> if not specified.</td>\n</tr>\n<tr>\n<td><code>tags</code></td>\n<td>Optional</td>\n<td>Array of strings</td>\n<td><a href=\"https://www.braze.com/docs/user_guide/administrative/app_settings/manage_app_group/tags/\">Tags</a> must already exist.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Copiedcurl --location --request POST 'https://rest.iad-01.braze.com/content_blocks/create' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR_REST_API_KEY' \\\n--data-raw '{\n  \"name\": \"content_block\",\n  \"description\": \"This is my Content Block\",\n  \"content\": \"HTML content within block\",\n  \"state\": \"draft\",\n  \"tags\": [\"marketing\"]\n}'\n\n</code></pre>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR_REST_API_KEY\n{\n  \"content_block_id\": (string) Your newly generated block id,\n  \"liquid_tag\": (string) The generated block tag from the Content Block name,\n  \"created_at\": (string) The time the Content Block was created in ISO 8601,\n  \"message\": \"success\"\n}\n\n</code></pre>\n<h2 id=\"troubleshooting\">Troubleshooting</h2>\n<p>The following table lists possible returned errors and their associated troubleshooting steps.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content cannot be blank</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>Content must be a string</code></td>\n<td>Make sure your content is encapsulated in quotes (<code>\"\"</code>).</td>\n</tr>\n<tr>\n<td><code>Content must be smaller than 50kb</code></td>\n<td>The content in your Content Block must be less than 50kb total.</td>\n</tr>\n<tr>\n<td><code>Content contains malformed liquid</code></td>\n<td>The Liquid provided is not valid or parsable. Try again with valid Liquid or reach out to support.</td>\n</tr>\n<tr>\n<td><code>Content Block cannot be referenced within itself</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>Content Block description cannot be blank</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>Content Block description must be a string</code></td>\n<td>Make sure your Content Block description is encapsulated in quotes (<code>\"\"</code>).</td>\n</tr>\n<tr>\n<td><code>Content Block description must be shorter than 250 characters</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>Content Block name cannot be blank</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>Content Block name must be shorter than 100 characters</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>Content Block name can only contain alphanumeric characters</code></td>\n<td>Content Block names can include any of the following characters: the letters (capitalized or lowercase) <code>A</code> through <code>Z</code>, the numbers <code>0</code> through <code>9</code>, dashes <code>-</code>, and underscores <code>_</code>. It cannot contain non-alphanumeric characters like emojis, <code>!</code>, <code>@</code>, <code>~</code>, <code>&amp;</code>, and other “special” characters.</td>\n</tr>\n<tr>\n<td><code>Content Block with this name already exists</code></td>\n<td>Try a different name.</td>\n</tr>\n<tr>\n<td><code>Content Block state must be either active or draft</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>Tags must be an array</code></td>\n<td>Tags must be formatted as an array of strings, for example <code>[\"marketing\", \"promotional\", \"transactional\"]</code>.</td>\n</tr>\n<tr>\n<td><code>All tags must be strings</code></td>\n<td>Make sure your tags are encapsulated in quotes (<code>\"\"</code>).</td>\n</tr>\n<tr>\n<td><code>Some tags could not be found</code></td>\n<td>To add a tag when creating a Content Block, the tag must already exist in Braze.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["content_blocks","create"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"f1cefa8b-7a28-4e64-b579-198a4610d0a5"},{"name":"Update Content Block","event":[{"listen":"prerequest","script":{"id":"9ee80f80-86b0-4d60-8cd8-d327056859f0","exec":[""],"type":"text/javascript","packages":{}}}],"id":"4782239a-cb60-4217-9de0-51411434d57d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"content_block_id\" : (required, string) Content Block's API identifier.\n  \"name\": (optional, string) Must be less than 100 characters,\n  \"description\": (optional, string) The description of the Content Block. Must be less than 250 character,\n  \"content\": (optional, string) HTML or text content within Content Block,\n  \"state\": (optional, string) Choose `active` or `draft`. Defaults to `active` if not specified,\n  \"tags\": (optional, array of strings) Tags must already exist\n}"},"url":"https://{{instance_url}}/content_blocks/update","description":"<blockquote>\n<p>Use this endpoint to update a <a href=\"https://www.braze.com/docs/user_guide/engagement_tools/templates_and_media/content_blocks/\">Content Block</a>. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/api_key/\">API key</a> with the <code>content_blocks.update</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>content_block_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Your content block's API identifier.</td>\n</tr>\n<tr>\n<td><code>name</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Name of the content block. Must be less than 100 characters.</td>\n</tr>\n<tr>\n<td><code>description</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>Description of the content block. Must be less than 250 characters.</td>\n</tr>\n<tr>\n<td><code>content</code></td>\n<td>Required</td>\n<td>String</td>\n<td>HTML or text content within content blocks.</td>\n</tr>\n<tr>\n<td><code>state</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>Choose <code>active</code> or <code>draft</code>. Defaults to <code>active</code> if not specified.</td>\n</tr>\n<tr>\n<td><code>tags</code></td>\n<td>Optional</td>\n<td>Array of strings</td>\n<td><a href=\"https://www.braze.com/docs/user_guide/administrative/app_settings/manage_app_group/tags/\">Tags</a> must already exist.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location --request POST 'https://rest.iad-01.braze.com/content_blocks/update' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR_REST_API_KEY' \\\n--data-raw '{\n  \"content_block_id\" :\"content_block_id\",\n  \"name\": \"content_block\",\n  \"description\": \"This is my Content Block\",\n  \"content\": \"HTML or text content within block\",\n  \"state\": \"draft\",\n  \"tags\": [\"marketing\"]\n}'\n\n</code></pre>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR_REST_API_KEY\n{\n  \"content_block_id\": (string) Your newly generated block id,\n  \"liquid_tag\": (string) The generated block tag from the Content Block name,\n  \"created_at\": (string) The time the Content Block was created in ISO 8601,\n  \"message\": \"success\"\n}\n\n</code></pre>\n<h2 id=\"troubleshooting\">Troubleshooting</h2>\n<p>The following table lists possible returned errors and their associated troubleshooting steps.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content cannot be blank</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>Content must be a string</code></td>\n<td>Make sure your content is encapsulated in quotes (<code>\"\"</code>).</td>\n</tr>\n<tr>\n<td><code>Content must be smaller than 50kb</code></td>\n<td>The content in your Content Block must be less than 50kb total.</td>\n</tr>\n<tr>\n<td><code>Content contains malformed liquid</code></td>\n<td>The Liquid provided is not valid or parsable. Try again with valid Liquid or reach out to support.</td>\n</tr>\n<tr>\n<td><code>Content Block cannot be referenced within itself</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>Content Block description cannot be blank</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>Content Block description must be a string</code></td>\n<td>Make sure your Content Block description is encapsulated in quotes (<code>\"\"</code>).</td>\n</tr>\n<tr>\n<td><code>Content Block description must be shorter than 250 characters</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>Content Block name cannot be blank</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>Content Block name must be shorter than 100 characters</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>Content Block name can only contain alphanumeric characters</code></td>\n<td>Content Block names can include any of the following characters: the letters (capitalized or lowercase) <code>A</code> through <code>Z</code>, the numbers <code>0</code> through <code>9</code>, dashes <code>-</code>, and underscores <code>_</code>. It cannot contain non-alphanumeric characters like emojis, <code>!</code>, <code>@</code>, <code>~</code>, <code>&amp;</code>, and other “special” characters.</td>\n</tr>\n<tr>\n<td><code>Content Block with this name already exists</code></td>\n<td>Try a different name.</td>\n</tr>\n<tr>\n<td><code>Content Block name cannot be updated for active Content Blocks</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>Content Block state must be either active or draft</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>Active Content Block can not be updated to Draft. Create a new Content Block.</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>Tags must be an array</code></td>\n<td>Tags must be formatted as an array of strings, for example <code>[\"marketing\", \"promotional\", \"transactional\"]</code>.</td>\n</tr>\n<tr>\n<td><code>All tags must be strings</code></td>\n<td>Make sure your tags are encapsulated in quotes (<code>\"\"</code>).</td>\n</tr>\n<tr>\n<td><code>Some tags could not be found</code></td>\n<td>To add a tag when creating a Content Block, the tag must already exist in Braze.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["content_blocks","update"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"4782239a-cb60-4217-9de0-51411434d57d"}],"id":"b39ca484-6876-4b70-8fe3-19bee69bfb74","description":"<p>Content Blocks are an Email Templating feature that allow you to: </p>\n<ul>\n<li>Create a consistent look and feel to your Email campaigns using Content Blocks as Headers and Footers.</li>\n<li>Distribute the same offer codes through different channels.</li>\n<li>Create pre-defined assets that can be used to build messages with consistent information and assets.</li>\n<li>Copy entire message bodies to other messages.</li>\n</ul>\n<p>You can edit Content Blocks in the Templates &amp; Media section of the Braze UI, or here, via API.</p>\n","_postman_id":"b39ca484-6876-4b70-8fe3-19bee69bfb74"},{"name":"Email Templates","item":[{"name":"List available email templates","id":"eec24bf4-a3f4-47cb-b4d8-bb8f03964cca","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/templates/email/list?modified_after=2020-01-01T01:01:01.000000&modified_before=2020-02-01T01:01:01.000000&limit=1&offset=0","description":"<blockquote>\n<p>Use this endpoint to get a list of available templates in your Braze account. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you'll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>templates.email.list</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>modified_after</code></td>\n<td>Optional</td>\n<td>String in <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO-8601</a> format</td>\n<td>Retrieve only templates updated at or after the given time.</td>\n</tr>\n<tr>\n<td><code>modified_before</code></td>\n<td>Optional</td>\n<td>String in <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO-8601</a> format</td>\n<td>Retrieve only templates updated at or before the given time.</td>\n</tr>\n<tr>\n<td><code>limit</code></td>\n<td>Optional</td>\n<td>Positive number</td>\n<td>Maximum number of templates to retrieve. Default to 100 if not provided, with a maximum acceptable value of 1000.</td>\n</tr>\n<tr>\n<td><code>offset</code></td>\n<td>Optional</td>\n<td>Positive number</td>\n<td>Number of templates to skip before returning rest of the templates that fit the search criteria.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location --request GET 'https://rest.iad-01.braze.com/templates/email/list?modified_after=2020-01-01T01:01:01.000000&amp;modified_before=2020-02-01T01:01:01.000000&amp;limit=1&amp;offset=0' \\\n--header 'Authorization: Bearer YOUR_REST_API_KEY'\n\n</code></pre>\n<h2 id=\"response\">Response</h2>\n<p><strong>Important:</strong> Templates built using the drag-and-drop editor for email are not provided in this response.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR_REST_API_KEY\n{\n  \"count\": the number of templates returned\n  \"templates\": [template with the following properties]:\n    \"email_template_id\": (string) your email template's API Identifier,\n    \"template_name\": (string) the name of your email template,\n    \"created_at\": (string) the time the email was created at in ISO 8601,\n    \"updated_at\": (string) the time the email was updated in ISO 8601,\n    \"tags\": (array of strings) tags appended to the template\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["templates","email","list"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Optional) String in <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a></p>\n<p>Retrieve only templates updated at or after the given time.</p>\n","type":"text/plain"},"key":"modified_after","value":"2020-01-01T01:01:01.000000"},{"description":{"content":"<p>(Optional) String in <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a></p>\n<p>Retrieve only templates updated at or before the given time.</p>\n","type":"text/plain"},"key":"modified_before","value":"2020-02-01T01:01:01.000000"},{"description":{"content":"<p>(Optional) Positive Number</p>\n<p>Maximum number of templates to retrieve. Default to 100 if not provided, with a maximum acceptable value of 1000.</p>\n","type":"text/plain"},"key":"limit","value":"1"},{"description":{"content":"<p>(Optional) Positive Number</p>\n<p>Number of templates to skip before returning rest of the templates that fit the search criteria.</p>\n","type":"text/plain"},"key":"offset","value":"0"}],"variable":[]}},"response":[],"_postman_id":"eec24bf4-a3f4-47cb-b4d8-bb8f03964cca"},{"name":"See email template information","id":"e98d2d5b-62fe-4358-b391-9fe9e460d0ac","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"url":"https://{{instance_url}}/templates/email/info?email_template_id={{email_template_id}}","description":"<blockquote>\n<p>Use this endpoint to get information on your email templates. </p>\n</blockquote>\n<p><strong>Important:</strong> Templates built using the drag-and-drop editor are not accepted.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/api_key/\">API key</a> with the <code>templates.email.info</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>email_template_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">email template API identifier</a>.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location -g --request GET 'https://rest.iad-01.braze.com/templates/email/info?email_template_id={{email_template_id}}' \\\n--header 'Authorization: Bearer YOUR_REST_API_KEY'\n\n</code></pre>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR_REST_API_KEY\n{\n  \"email_template_id\": (string) Your email template's API Identifier,\n  \"template_name\": (string) The name of your email template,\n  \"description\": (string) The email template description,\n  \"subject\": (string) The email template subject line,\n  \"preheader\": (optional, string) The email preheader used to generate previews in some clients),\n  \"body\": (optional, string) The email template body that may include HTML,\n  \"plaintext_body\": (optional, string) A plaintext version of the email template body,\n  \"should_inline_css\": (optional, boolean) Whether there is inline CSS in the body of the template - defaults to the css inlining value for the workspace,\n  \"tags\": (string) Tag names,\n  \"created_at\": (string) The time the email was created at in ISO 8601,\n  \"updated_at\": (string) The time the email was updated in ISO 8601\n}\n\n</code></pre>\n<p>Images in this response will show in the <code>body</code> variable as HTML.</p>\n","urlObject":{"protocol":"https","path":["templates","email","info"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) String</p>\n<p>See <a href=\"https://www.braze.com/docs/api/identifier_types/\">email template's API identifier</a>.</p>\n","type":"text/plain"},"key":"email_template_id","value":"{{email_template_id}}"}],"variable":[]}},"response":[],"_postman_id":"e98d2d5b-62fe-4358-b391-9fe9e460d0ac"},{"name":"Create email template","id":"5eb1fe0d-2795-474d-aaf2-c4e2977dc94b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n   \"template_name\": (required, string) The name of your email template,\n   \"subject\": (required, string) The email template subject line,\n   \"body\": (required, string) The email template body that may include HTML,\n   \"plaintext_body\": (optional, string) A plaintext version of the email template body,\n   \"preheader\": (optional, string) The email preheader used to generate previews in some clients,\n   \"tags\": (optional, Array of Strings) Tags must already exist,\n   \"should_inline_css\": (optional, Boolean) If `true`, the `inline_css` feature is used on this template.\n }"},"url":"https://{{instance_url}}/templates/email/create?template_name&subject&body&plaintext_body&preheader&tags&should_inline_css","description":"<blockquote>\n<p>Use this endpoint to create email templates on the Braze dashboard. </p>\n</blockquote>\n<p>These templates will be available on the <strong>Templates &amp; Media</strong> page. The response from this endpoint will include a field for <code>email_template_id</code>, which can be used to update the template in subsequent API calls.</p>\n<p>Users’ email subscription status can be updated and retrieved with Braze using a RESTful API. You can use the API to set up bi-directional sync between Braze and other email systems or your own database. All API requests are made over HTTPS.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/api_key/\">API key</a> with the <code>templates.email.create</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>template_name</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Name of your email template.</td>\n</tr>\n<tr>\n<td><code>subject</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Email template subject line.</td>\n</tr>\n<tr>\n<td><code>body</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Email template body that may include HTML.</td>\n</tr>\n<tr>\n<td><code>plaintext_body</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>A plaintext version of the email template body.</td>\n</tr>\n<tr>\n<td><code>preheader</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>Email preheader used to generate previews in some clients.</td>\n</tr>\n<tr>\n<td><code>tags</code></td>\n<td>Optional</td>\n<td>String</td>\n<td><a href=\"https://www.braze.com/docs/user_guide/administrative/app_settings/manage_app_group/tags/\">Tags</a> must already exist.</td>\n</tr>\n<tr>\n<td><code>should_inline_css</code></td>\n<td>Optional</td>\n<td>Boolean</td>\n<td>Enables or disables the <code>inline_css</code> feature per template. If not provided, Braze will use the default setting for the app group. One of <code>true</code> or <code>false</code> is expected.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Copiedcurl --location --request POST 'https://rest.iad-01.braze.com/templates/email/create' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR_REST_API_KEY' \\\n--data-raw '{\n  \"template_name\": \"email_template_name\",\n  \"subject\": \"Welcome to my email template!\",\n  \"body\": \"This is the text within my email body and https://www.braze.com/ here is a link to Braze.com.\",\n  \"plaintext_body\": \"This is the text within my email body and here is a link to https://www.braze.com/.\",\n  \"preheader\": \"My preheader is pretty cool.\",\n  \"tags\": [\"Tag1\", \"Tag2\"]\n}'\n\n</code></pre>\n<h2 id=\"possible-errors\">Possible errors</h2>\n<p>The following table lists possible returned errors and their associated troubleshooting steps, if applicable.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Template name is required</td>\n<td>Enter a template name.</td>\n</tr>\n<tr>\n<td>Tags must be an array</td>\n<td>Tags must be formatted as an array of strings, for example <code>[\"marketing\", \"promotional\", \"transactional\"]</code>.</td>\n</tr>\n<tr>\n<td>All tags must be strings</td>\n<td>Make sure your tags are encapsulated in quotes (<code>\"\"</code>).</td>\n</tr>\n<tr>\n<td>Some tags could not be found</td>\n<td>To add a tag when creating an email template, the tag must already exist in Braze.</td>\n</tr>\n<tr>\n<td>Email must have valid Content Block names</td>\n<td>The email might contain Content Blocks that don’t exist in this environment.</td>\n</tr>\n<tr>\n<td>Invalid value for <code>should_inline_css</code>. One of <code>true</code> or <code>false</code> was expected</td>\n<td>This parameter only accepts boolean values (true or false). Make sure the value for <code>should_inline_css</code> is not encapsulated in quotes (<code>\"\"</code>), which causes the value to be sent as a string instead.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["templates","email","create"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) String</p>\n","type":"text/plain"},"key":"template_name","value":null},{"description":{"content":"<p>(Required) String</p>\n","type":"text/plain"},"key":"subject","value":null},{"description":{"content":"<p>(Required) String</p>\n","type":"text/plain"},"key":"body","value":null},{"description":{"content":"<p>(Optional) String</p>\n","type":"text/plain"},"key":"plaintext_body","value":null},{"description":{"content":"<p>(Optional) String</p>\n","type":"text/plain"},"key":"preheader","value":null},{"description":{"content":"<p>(Optional) String</p>\n","type":"text/plain"},"key":"tags","value":null},{"description":{"content":"<p>(Optional) Boolean</p>\n","type":"text/plain"},"key":"should_inline_css","value":null}],"variable":[]}},"response":[],"_postman_id":"5eb1fe0d-2795-474d-aaf2-c4e2977dc94b"},{"name":"Update email template","id":"afb25494-3350-458d-932d-5bf4220049fa","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"email_template_id\": (required, string) Your email template's API Identifier,\n  \"template_name\": (optional, string) The name of your email template,\n  \"subject\": (optional, string) The email template subject line,\n  \"body\": (optional, string) The email template body that may include HTML,\n  \"plaintext_body\": (optional, string) A plaintext version of the email template body,\n  \"preheader\": (optional, string) The email preheader used to generate previews in some clients,\n  \"tags\": (optional, array of Strings) Tags must already exist,\n  \"should_inline_css\": (optional, Boolean) If `true`, the `inline_css` feature will be applied to the template.\n}","options":{"raw":{"language":"json"}}},"url":"https://{{instance_url}}/templates/email/update?email_template_id={{email_template_id}}&template_name&subject&body&plaintext_body&preheader&tags&should_inline_css","description":"<blockquote>\n<p>Use this endpoint to update email templates on the Braze dashboard. </p>\n</blockquote>\n<p>You can access an email template’s <code>email_template_id</code> by navigating to it on the <strong>Templates &amp; Media</strong> page. The <a href=\"https://www.braze.com/docs/api/endpoints/templates/email_templates/post_create_email_template/\">Create email template endpoint</a> will also return an <code>email_template_id</code> reference.</p>\n<p>All fields other than the <code>email_template_id</code> are optional, but you must specify at least one field to update.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/api_key/\">API key</a> with the <code>templates.email.update</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply the default Braze rate limit of 250,000 requests per hour to this endpoint, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>email_template_id</code></td>\n<td>Required</td>\n<td>String</td>\n<td>Your <a href=\"https://www.braze.com/docs/api/identifier_types/\">email template’s API identifier</a>.</td>\n</tr>\n<tr>\n<td><code>template_name</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>Name of your email template.</td>\n</tr>\n<tr>\n<td><code>subject</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>Email template subject line.</td>\n</tr>\n<tr>\n<td><code>body</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>Email template body that may include HTML.</td>\n</tr>\n<tr>\n<td><code>plaintext_body</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>A plaintext version of the email template body.</td>\n</tr>\n<tr>\n<td><code>preheader</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>Email preheader used to generate previews in some clients.</td>\n</tr>\n<tr>\n<td><code>tags</code></td>\n<td>Optional</td>\n<td>String</td>\n<td><a href=\"https://www.braze.com/docs/user_guide/administrative/app_settings/manage_app_group/tags/\">Tags</a> must already exist.</td>\n</tr>\n<tr>\n<td><code>should_inline_css</code></td>\n<td>Optional</td>\n<td>Boolean</td>\n<td>Enables or disables the <code>inline_css</code> feature per template. If not provided, Braze will use the default setting for the AppGroup. One of <code>true</code> or <code>false</code> is expected.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"troubleshooting\">Troubleshooting</h3>\n<p>The following table lists possible returned errors and their associated troubleshooting steps, if applicable.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Template name is required</td>\n<td></td>\n</tr>\n<tr>\n<td>Tags must be an array</td>\n<td>Tags must be formatted as an array of strings, for example <code>[\"marketing\", \"promotional\", \"transactional\"]</code>.</td>\n</tr>\n<tr>\n<td>All tags must be strings</td>\n<td>Make sure your tags are encapsulated in quotes (<code>\"\"</code>).</td>\n</tr>\n<tr>\n<td>Some tags could not be found</td>\n<td>To add a tag when creating an email template, the tag must already exist in Braze.</td>\n</tr>\n<tr>\n<td>Invalid value for <code>should_inline_css</code>. One of <code>true</code> or <code>false</code> was expected</td>\n<td>This parameter only accepts boolean values (true or false). Make sure the value for <code>should_inline_css</code> is not encapsulated in quotes (<code>\"\"</code>), which causes the value to be sent as a string instead.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-request\">Example request</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">curl --location --request POST 'https://rest.iad-01.braze.com/templates/email/update' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR_REST_API_KEY' \\\n--data-raw '{\n  \"email_template_id\": \"email_template_id\",\n  \"template_name\": \"Weekly Newsletter\",\n  \"subject\": \"This Week'\\''s Styles\",\n  \"body\": \"Check out this week'\\''s digital lookbook to inspire your outfits. Take a look at https://www.braze.com/\",\n  \"plaintext_body\": \"This is the updated text within my email body and here is a link to https://www.braze.com/.\",\n  \"preheader\": \"We want you to have the best looks this summer\",\n  \"tags\": [\"Tag1\", \"Tag2\"]\n}'\n\n</code></pre>\n<h2 id=\"troubleshooting-1\">Troubleshooting</h2>\n<p>The following table lists possible returned errors and their associated troubleshooting steps, if applicable.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Template name is required</td>\n<td>Enter a template name.</td>\n</tr>\n<tr>\n<td>Tags must be an array</td>\n<td>Tags must be formatted as an array of strings, for example <code>[\"marketing\", \"promotional\", \"transactional\"]</code>.</td>\n</tr>\n<tr>\n<td>All tags must be strings</td>\n<td>Make sure your tags are encapsulated in quotes (<code>\"\"</code>).</td>\n</tr>\n<tr>\n<td>Some tags could not be found</td>\n<td>To add a tag when creating an email template, the tag must already exist in Braze.</td>\n</tr>\n<tr>\n<td>Invalid value for <code>should_inline_css</code>. One of <code>true</code> or <code>false</code> was expected</td>\n<td>This parameter only accepts boolean values (true or false). Make sure the value for <code>should_inline_css</code> is not encapsulated in quotes (<code>\"\"</code>), which causes the value to be sent as a string instead.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["templates","email","update"],"host":["{{instance_url}}"],"query":[{"description":{"content":"<p>(Required) String</p>\n","type":"text/plain"},"key":"email_template_id","value":"{{email_template_id}}"},{"description":{"content":"<p>(Optional) String</p>\n","type":"text/plain"},"key":"template_name","value":null},{"description":{"content":"<p>(Optional) String</p>\n","type":"text/plain"},"key":"subject","value":null},{"description":{"content":"<p>(Optional) String</p>\n","type":"text/plain"},"key":"body","value":null},{"description":{"content":"<p>(Optional) String</p>\n","type":"text/plain"},"key":"plaintext_body","value":null},{"description":{"content":"<p>(Optional) String</p>\n","type":"text/plain"},"key":"preheader","value":null},{"description":{"content":"<p>(Optional) String</p>\n","type":"text/plain"},"key":"tags","value":null},{"description":{"content":"<p>(Optional) Boolean</p>\n","type":"text/plain"},"key":"should_inline_css","value":null}],"variable":[]}},"response":[],"_postman_id":"afb25494-3350-458d-932d-5bf4220049fa"}],"id":"7fd91278-ca24-48b2-99d8-e156c5423eb9","_postman_id":"7fd91278-ca24-48b2-99d8-e156c5423eb9","description":""}],"id":"5bf8d4ab-74e2-4b6c-9e53-a0b9b8aa7947","description":"<p>Using the Template endpoints, you can create and manage your templates for email and Content Blocks.  </p>\n<p>Looking for more guidance on creating templates for email and Content Blocks? Check out our dedicated for <a href=\"https://www.braze.com/docs/user_guide/message_building_by_channel/email/templates/\">Email Templates section</a> and <a href=\"https://www.braze.com/docs/user_guide/engagement_tools/templates_and_media/content_blocks/\">Content Blocks article</a>.</p>\n","_postman_id":"5bf8d4ab-74e2-4b6c-9e53-a0b9b8aa7947"},{"name":"User Data","item":[{"name":"External ID Migration","item":[{"name":"Rename external ID","id":"17682d2b-1546-4a3c-9703-aa5a12861d7c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","type":"text","value":"application/json"},{"key":"Authorization","type":"text","value":"Bearer {{api_key}}"}],"body":{"mode":"raw","raw":"{\n  \"external_id_renames\" :[\n    {\n      \"current_external_id\": \"existing_external_id\",\n      \"new_external_id\" : \"new_external_id\"\n    }\n  ]\n}"},"url":"https://{{instance_url}}/users/external_ids/rename","description":"<blockquote>\n<p>Use this endpoint to rename your users’ external IDs. </p>\n</blockquote>\n<p>You can send up to 50 rename objects per request.</p>\n<p>This endpoint sets a new (primary) <code>external_id</code> for the user and deprecates their existing <code>external_id</code>. This means that the user can be identified by either <code>external_id</code> until the deprecated one is removed. Having multiple external IDs allows for a migration period so that older versions of your apps that use the previous external ID naming schema don’t break.</p>\n<p>After your old naming schema is no longer in use, we highly recommend removing deprecated external IDs using the <a href=\"https://www.braze.com/docs/api/endpoints/user_data/external_id_migration/post_external_ids_remove\"><code>/users/external_ids/remove</code> endpoint</a>.</p>\n<blockquote>\n<p><strong>Warning:</strong> Make sure to remove deprecated external IDs with the <code>/users/external_ids/remove</code> endpoint instead of <code>/users/delete</code>. Sending a request to <code>/users/delete</code> with the deprecated external ID deletes the user profile entirely and cannot be undone. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you’ll need an <a href=\"https://www.braze.com/docs/api/api_key/\">API key</a> with the <code>users.external_ids.rename</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply a rate limit of 1,000 requests per minute to this endpoint, as documented in <a href=\"http://braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h3 id=\"request-parameters\">Request parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>external_id_renames</code></td>\n<td>Required</td>\n<td>Array of external identifier rename objects</td>\n<td>View request example and the following limitations for structure of external ID rename object</td>\n</tr>\n</tbody>\n</table>\n</div><p>Note the following:</p>\n<ul>\n<li><p>The <code>current_external_id</code> must be the user’s primary ID, and cannot be a deprecated ID.</p>\n</li>\n<li><p>The <code>new_external_id</code> must not already be in use as either a primary ID or a deprecated ID.</p>\n</li>\n<li><p>The <code>current_external_id</code> and <code>new_external_id</code> cannot be the same.</p>\n</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<p>The response will confirm all successful renames, as well as unsuccessful renames with any associated errors. Error messages in the <code>rename_errors</code> field will reference the index of the object in the array of the original request.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\" : (string) status message,\n  \"external_ids\" : (array of strings) successful rename operations,\n  \"rename_errors\": (array of arrays) &lt;minor error message&gt;\n}\n\n</code></pre>\n<p>The <code>message</code> field will return <code>success</code> for any valid request. More specific errors are captured in the <code>rename_errors</code> array. The <code>message</code> field returns an error in the case of:</p>\n<ul>\n<li><p>Invalid API key</p>\n</li>\n<li><p>Empty <code>external_id_renames</code> array</p>\n</li>\n<li><p><code>external_id_renames</code> array with more than 50 objects</p>\n</li>\n<li><p>Rate limit hit (more than 1,000 requests per minute)</p>\n</li>\n</ul>\n<h2 id=\"frequently-asked-questions\">Frequently Asked Questions</h2>\n<h3 id=\"does-this-impact-mau\"><strong>Does this impact MAU?</strong></h3>\n<p>No, since the number of users will stay the same, they’ll just have a new <code>external_id</code>.</p>\n<h3 id=\"does-user-behavior-change-historically\"><strong>Does user behavior change historically?</strong></h3>\n<p>No, since the user is still the same user, and all their historical behavior is still connected to them.</p>\n<h3 id=\"can-it-be-run-on-development-or-staging-app-groups\"><strong>Can it be run on development or staging app groups?</strong></h3>\n<p>Yes. In fact, we highly recommend running a test migration on a staging or development app group, and ensuring everything has gone smoothly before executing on production data.</p>\n<h3 id=\"does-this-consume-data-points\"><strong>Does this consume data points?</strong></h3>\n<p>This feature does not cost data points.</p>\n<h3 id=\"what-is-the-recommended-deprecation-period\"><strong>What is the recommended deprecation period?</strong></h3>\n<p>We have no hard limit on how long you can keep deprecated external IDs around, but we highly recommend removing them once there is no longer a need to reference users by the deprecated ID.</p>\n","urlObject":{"protocol":"https","path":["users","external_ids","rename"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"17682d2b-1546-4a3c-9703-aa5a12861d7c"},{"name":"Remove external ID","id":"e16b5340-5f44-42b6-9033-2398faf8908e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"external_ids\" :[\n    \"existing_deprecated_external_id_string\",\n    ...\n  ]\n}"},"url":"https://{{instance_url}}/users/external_ids/remove","description":"<blockquote>\n<p>Use this endpoint to remove your users' old deprecated external IDs. </p>\n</blockquote>\n<p>You can send up to 50 external IDs per request. To use this endpoint, you’ll need to generate an <a href=\"https://www.braze.com/docs/api/api_key/\">API key</a> with the <code>users.external_ids.remove</code> permission.</p>\n<blockquote>\n<p><strong>Warning:</strong> This endpoint completely removes the deprecated ID and cannot be undone. Using this endpoint to remove deprecated `external_ids` that are still associated with users in your system can permanently prevent you from finding those users' data. </p>\n</blockquote>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>We apply a rate limit of 1,000 requests per minute to this endpoint, as documented in <a href=\"http://braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h3 id=\"request-parameters\">Request parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>external_ids</code></td>\n<td>Required</td>\n<td>Array of strings</td>\n<td>External identifiers for the users to remove</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>Important:</strong> Only deprecated IDs can be removed; attempting to remove a primary external ID will result in an error. </p>\n</blockquote>\n<h2 id=\"response\">Response</h2>\n<p>The response will confirm all successful removals, as well as unsuccessful removals with the associated errors. Error messages in the <code>removal_errors</code> field will reference the index in the array of the original request.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\" : (string) status message,\n  \"removed_ids\" : (array of strings) successful remove operations,\n  \"removal_errors\": (array of arrays) &lt;minor error message&gt;\n}\n\n</code></pre>\n<p>The <code>message</code> field will return <code>success</code> for any valid request. More specific errors are captured in the <code>removal_errors</code> array. The <code>message</code> field returns an error in the case of:</p>\n<ul>\n<li><p>Invalid API key</p>\n</li>\n<li><p>Empty <code>external_ids</code> array</p>\n</li>\n<li><p><code>external_ids</code> array with more than 50 items</p>\n</li>\n<li><p>Rate limit hit (more than 1,000 requests per minute)</p>\n</li>\n</ul>\n","urlObject":{"protocol":"https","path":["users","external_ids","remove"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"e16b5340-5f44-42b6-9033-2398faf8908e"}],"id":"5b1f6212-e748-47dd-b7aa-fab010712c23","description":"<p>The External ID Migration API allows you to rename existing external IDs (creating a new primary ID and deprecating the existing ID) and remove deprecated IDs post-migration. <br /><br /> We've architected this solution to allow multiple External IDs in order to support a migration period whereby older versions of your apps still in the wild that use the previous External ID naming schema don’t break. We highly recommend removing deprecated External IDs once your old naming schema is no longer in use.</p>\n","_postman_id":"5b1f6212-e748-47dd-b7aa-fab010712c23"},{"name":"Create new user alias","id":"5cf18e64-fd02-452f-8c90-9a0f7c4d0487","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","type":"text","value":"Bearer {{api_key}}"}],"body":{"mode":"raw","raw":"{\n  \"user_aliases\" :[\n    {\n      \"external_id\": \"external_identifier\",\n      \"alias_name\" : \"example_name\",\n      \"alias_label\" : \"example_label\"\n    }\n  ]\n}"},"url":"https://{{instance_url}}/users/alias/new","description":"<blockquote>\n<p>Use this endpoint to add new user aliases for existing identified users, or to create new unidentified users. </p>\n</blockquote>\n<p>Up to 50 user aliases may be specified per request.</p>\n<p><strong>Adding a user alias for an existing user</strong> requires an <code>external_id</code> to be included in the new user alias object. If the <code>external_id</code> is present in the object but there is no user with that <code>external_id</code>, the alias will not be added to any users. If an <code>external_id</code> is not present, a user will still be created but will need to be identified later. You can do this using the “Identifying Users” and the <code>users/identify</code> endpoint.</p>\n<p><strong>Creating a new alias-only user</strong> requires the <code>external_id</code> to be omitted from the new user alias object. After the user is created, use the <code>/users/track</code> endpoint to associate the alias-only user with attributes, events, and purchases, and the <code>/users/identify</code> endpoint to identify the user with an <code>external_id</code>.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you'll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>users.alias.new</code> permission.</p>\n<h3 id=\"rate-limit\">Rate limit</h3>\n<p>For customers who onboarded with Braze on or after September 16, 2021, we apply a shared rate limit of 20,000 requests per minute to this endpoint. This rate limit is shared with the <code>/users/delete</code>, <code>/users/identify</code>, <code>/users/merge</code>, and <code>/users/alias/update</code> endpoints, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h3 id=\"request-parameters\">Request parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>user_aliases</code></td>\n<td>Required</td>\n<td>Array of new user alias objects</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/user_alias_object/\">user alias object</a>.  <br />  <br />For more information on <code>alias_name</code> and <code>alias_label</code>, check out our <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/user_data_collection/user_profile_lifecycle/#user-aliases\">User Aliases</a> documentation.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">\nContent-Type: application/json\nAuthorization: Bearer YOUR_REST_API_KEY\n{\n    \"aliases_processed\": 1,\n    \"message\": \"success\"\n}\n</code></pre>\n","urlObject":{"protocol":"https","path":["users","alias","new"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"5cf18e64-fd02-452f-8c90-9a0f7c4d0487"},{"name":"Update user alias","id":"a084b843-b3cd-43f0-bfb1-ef7bada839c5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"alias_updates\" :[\n    {\n      \"alias_label\": \"example_alias_label\",\n      \"old_alias_name\" : \"example_old_alias_name\",\n      \"new_alias_name\" : \"example_new_alias_name\"\n    }\n  ]\n}"},"url":"https://{{instance_url}}/users/alias/update","description":"<blockquote>\n<p>Use this endpoint to update existing user aliases. </p>\n</blockquote>\n<p>Up to 50 user aliases may be specified per request.</p>\n<p>Updating a user alias requires <code>alias_label</code>, <code>old_alias_name</code>, and <code>new_alias_name</code> to be included in the update user alias object. If there is no user alias associated with the <code>alias_label</code> and <code>old_alias_name</code>, no alias will be updated. If the given <code>alias_label</code> and <code>old_alias_name</code> is found, then the <code>old_alias_name</code> will be updated to the <code>new_alias_name</code>.</p>\n<p><strong>Note:</strong> This endpoint does not guarantee the sequence of <code>alias_updates</code> objects being updated.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you'll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>users.alias.update</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>For customers who onboarded with Braze on or after September 16, 2021, we apply a shared rate limit of 20,000 requests per minute to this endpoint. This rate limit is shared with the <code>/users/delete</code>, <code>/users/identify</code>, <code>/users/merge</code>, and <code>/users/alias/update</code> endpoints, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h3 id=\"request-parameters\">Request parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>alias_updates</code></td>\n<td>Required</td>\n<td>Array of update user alias objects</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/user_alias_object/\">user alias object</a>.  <br />  <br />For more information on <code>old_alias_name</code>, <code>new_alias_name</code>, and <code>alias_label</code>, refer to <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/user_data_collection/user_profile_lifecycle/#user-aliases\">User aliases</a>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"endpoint-request-body-with-update-user-alias-object-specification\">Endpoint request body with update user alias object specification</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"alias_label\" : (required, string),\n  \"old_alias_name\" : (required, string),\n  \"new_alias_name\" : (required, string)\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["users","alias","update"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"a084b843-b3cd-43f0-bfb1-ef7bada839c5"},{"name":"Identify users","id":"5f74e0f7-0620-4c7b-b0a2-f5f38fdbff58","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"aliases_to_identify\": [\n    {\n      \"external_id\": \"external_identifier\",\n      \"user_alias\": {\n        \"alias_name\" : \"example_alias\",\n        \"alias_label\" : \"example_label\"\n        }\n    }\n  ],\n  \"email_addresses\": [\n    {\n      \"external_id\": \"external_identifier\",\n      \"email\": \"john.smith@example.com\"\n      \"prioritization\": [\"unidentified\", \"most_recently_updated\"]\n    }\n  ],\n  \"merge_behavior\": \"merge\"\n}"},"url":"https://{{instance_url}}/users/identify","description":"<blockquote>\n<p>Use this endpoint to identify an unidentified (alias-only or email-only) user using the provided external ID. </p>\n</blockquote>\n<h2 id=\"how-it-works\">How it works</h2>\n<p>Calling <code>/users/identify</code> combines a user profile that is identified by an alias (alias-only profile) or email address (email-only profile) with a user profile that has an <code>external_id</code> (identified profile), then removes the alias-only profile.</p>\n<p>Identifying a user requires an <code>external_id</code> to be included in the <code>aliases_to_identify</code> or <code>emails_to_identify</code> object. If there isn’t a user with that <code>external_id</code>, the <code>external_id</code> will be added to the aliased user’s record, and the user will be considered identified.</p>\n<p>Note the following:</p>\n<ul>\n<li><p>When these subsequent associations are made with the <code>merge_behavior</code> field set to <code>none</code>, only the push tokens and message history associated with the user alias are retained; any attributes, events, or purchases will be “orphaned” and not available on the identified user. One workaround is to export the aliased user’s data before identification using the <a href=\"https://www.braze.com/docs/api/endpoints/export/user_data/post_users_identifier/\"><code>/users/export/ids</code> endpoint</a>, then re-associate the attributes, events, and purchases with the identified user.</p>\n</li>\n<li><p>When associations are made with the <code>merge_behavior</code> field set to <code>merge</code>, this endpoint will merge <a href=\"https://www.braze.com/docs/api/endpoints/user_data/post_user_identify#merge\">specific fields</a> found on the anonymous user to the identified user.</p>\n</li>\n</ul>\n<blockquote>\n<p><strong>Tip</strong>: To prevent unexpected loss of data when identifying users, we highly recommend that you first refer to <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/user_data_collection/best_practices/#capturing-user-data-when-alias-only-user-info-is-already-present\">data collection best practices</a> to learn about capturing user data when alias-only user info is already present. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you'll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>users.identify</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>For customers who onboarded with Braze on or after September 16, 2021, we apply a shared rate limit of 20,000 requests per minute to this endpoint. This rate limit is shared with the <code>/users/delete</code>, <code>/users/identify</code>, <code>/users/merge</code>, and <code>/users/alias/update</code> endpoints, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>aliases_to_identify</code></td>\n<td>Required</td>\n<td>Array of aliases to identify object</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/aliases_to_identify/\">alias to identify object</a> and <a href=\"https://www.braze.com/docs/api/objects_filters/user_alias_object/\">user alias object</a>.</td>\n</tr>\n<tr>\n<td><code>emails_to_identify</code></td>\n<td>Required</td>\n<td>Array of aliases to identify object</td>\n<td>See <a href=\"https://www.braze.com/docs/api/endpoints/user_data/post_user_identify/#identifying-users-by-email\">Identifying users by email</a>.</td>\n</tr>\n<tr>\n<td><code>merge_behavior</code></td>\n<td>Optional</td>\n<td>String</td>\n<td>One of <code>none</code> or <code>merge</code> is expected.</td>\n</tr>\n</tbody>\n</table>\n</div><h4 id=\"merge_behavior-field\">Merge_behavior field</h4>\n<p>Setting the <code>merge_behavior</code> field to <code>merge</code> sets the endpoint to merge the following list of fields found <strong>exclusively</strong> on the anonymous user to the identified user. Setting the field to <code>none</code> will not merge any user data to the identified user profile.</p>\n<ul>\n<li><p>First name</p>\n</li>\n<li><p>Last name</p>\n</li>\n<li><p>Email</p>\n</li>\n<li><p>Gender</p>\n</li>\n<li><p>Date of birth</p>\n</li>\n<li><p>Phone number</p>\n</li>\n<li><p>Time zone</p>\n</li>\n<li><p>Home city</p>\n</li>\n<li><p>Country</p>\n</li>\n<li><p>Language</p>\n</li>\n<li><p>Session count (the sum of sessions from both profiles)</p>\n</li>\n<li><p>Date of first session (Braze will pick the earlier date of the two dates)</p>\n</li>\n<li><p>Date of last session (Braze will pick the later date of the two dates)</p>\n</li>\n<li><p>Custom attributes</p>\n</li>\n<li><p>Custom event and purchase event data (excluding event properties)</p>\n</li>\n<li><p>Custom event and purchase event properties for \"X times in Y days\" segmentation (where X&lt;=50 and Y&lt;=30)</p>\n</li>\n<li><p>Segmentable custom events summary</p>\n<ul>\n<li><p>Event count (the sum from both profiles)</p>\n</li>\n<li><p>Event first occurred (Braze will pick the earlier date of the two dates)</p>\n</li>\n<li><p>Event last occurred (Braze will pick the later date of the two dates)</p>\n</li>\n</ul>\n</li>\n<li><p>In-app purchase total in cents (the sum from both profiles)</p>\n</li>\n<li><p>Total number of purchases (the sum from both profiles)</p>\n</li>\n<li><p>Date of first purchase (Braze will pick the earlier date of the two dates)</p>\n</li>\n<li><p>Date of last purchase (Braze will pick the later date of the two dates)</p>\n</li>\n<li><p>App summaries</p>\n</li>\n<li><p>Last_X_at fields (Braze will update the fields if the orphaned profile fields are more recent)</p>\n</li>\n<li><p>Campaign summaries (Braze will pick the most recent date fields)</p>\n</li>\n<li><p>Workflow summaries (Braze will pick the most recent date fields)</p>\n</li>\n<li><p>Message and message engagement history</p>\n</li>\n<li><p>Custom event and purchase event count and first date and last date timestamps</p>\n<ul>\n<li>These merged fields will update “for X events in Y days” filters. For purchase events, these filters include “number of purchases in Y days” and “money spent in last Y days”.</li>\n</ul>\n</li>\n<li><p>Session data if the app exists on both user profiles</p>\n<ul>\n<li>For example, if our target user doesn’t have an app summary for “ABCApp” but our original user does, the target user will have the “ABCApp” app summary on their profile after the merge.</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"identifying-users-by-email\">Identifying users by email</h3>\n<p>If an <code>email</code> is specified as an identifier, an additional <code>prioritization</code> value is required in the identifier. The <code>prioritization</code> should be an array specifying which user to merge if there are multiple users found. <code>prioritization</code> is an ordered array, meaning if more than one user matches from a prioritization, then merging will not occur.</p>\n<p>The allowed values for the array are: <code>identified</code>, <code>unidentified</code>, <code>most_recently_updated</code>. <code>most_recently_updated</code> refers to prioritizing the most recently updated user.</p>\n<p>Only one of the following options may exist in the prioritization array at a time:</p>\n<ul>\n<li><p><code>identified</code> refers to prioritizing a user with an <code>external_id</code></p>\n</li>\n<li><p><code>unidentified</code> refers to prioritizing a user without an <code>external_id</code></p>\n</li>\n</ul>\n<h2 id=\"request-example\">Request example</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request POST 'https://rest.iad-01.braze.com/users/identify' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR_REST_API_KEY' \\\n--data-raw '{\n  \"aliases_to_identify\": [\n    {\n      \"external_id\": \"external_identifier\",\n      \"user_alias\": {\n          \"alias_name\": \"example_alias\",\n          \"alias_label\": \"example_label\"\n      }\n    }\n  ],\n  \"emails_to_identify\": [\n    {\n      \"external_id\": \"external_identifier_2\",\n      \"email\": \"john.smith@braze.com\",\n      \"prioritization\": [\"unidentified\", \"most_recently_updated\"]\n    }\n  ]\n  \"merge_behavior\": \"merge\"\n}'\n\n</code></pre><h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Content-Type: application/json\nAuthorization: Bearer YOUR_REST_API_KEY\n{\n    \"aliases_processed\": 1,\n    \"message\": \"success\"\n}\n\n</code></pre>","urlObject":{"protocol":"https","path":["users","identify"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"5f74e0f7-0620-4c7b-b0a2-f5f38fdbff58"},{"name":"Track users","id":"4cf57ea9-9b37-4e99-a02e-4373c9a4ee59","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","type":"text","value":"Bearer {{api_key}}"}],"body":{"mode":"raw","raw":"{\n  \"attributes\": [\n        {\n            \"email\": \"test@braze.com\",\n            \"string_attribute\": \"fruit\",\n            \"boolean_attribute_1\": true,\n            \"integer_attribute\": 25,\n            \"array_attribute\": [\n                \"banana\",\n                \"apple\"\n            ]\n        }\n    ],\n  \"events\": [\n        {\n            \"email\": \"test@braze.com\",\n            \"app_id\": \"your_app_identifier\",\n            \"name\": \"rented_movie\",\n            \"time\": \"2022-12-06T19:20:45+01:00\",\n            \"properties\": {\n                \"release\": {\n                    \"studio\": \"FilmStudio\",\n                    \"year\": \"2022\"\n                },\n                \"cast\": [\n                    {\n                        \"name\": \"Actor1\"\n                    },\n                    {\n                        \"name\": \"Actor2\"\n                    }\n                ]\n            }\n        },\n        {\n            \"user_alias\": {\n                \"alias_name\": \"device123\",\n                \"alias_label\": \"my_device_identifier\"\n            },\n            \"app_id\": \"your_app_identifier\",\n            \"name\": \"rented_movie\",\n            \"time\": \"2013-07-16T19:20:50+01:00\"\n        }\n    ],\n  \"purchases\": [\n        {\n            \"email\": \"test@braze.com\",\n            \"app_id\": \"your_app_identifier\",\n            \"product_id\": \"product_name\",\n            \"currency\": \"USD\",\n            \"price\": 12.12,\n            \"quantity\": 6,\n            \"time\": \"2017-05-12T18:47:12Z\",\n            \"properties\": {\n                \"color\": \"red\",\n                \"monogram\": \"ABC\",\n                \"checkout_duration\": 180,\n                \"size\": \"Large\",\n                \"brand\": \"Backpack Locker\"\n            }\n        }\n    ]\n}"},"url":"https://{{instance_url}}/users/track","description":"<blockquote>\n<p>Use this endpoint to record custom events, purchases, and update user profile attributes. </p>\n</blockquote>\n<p><strong>Note:</strong> Braze processes the data passed via API at face value and customers should only pass deltas (changing data) to minimize unnecessary data point consumption. To read more, refer to <a href=\"https://www.braze.com/docs/user_guide/onboarding_with_braze/data_points#data-points\">Data points</a>.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you'll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>users.track</code> permission.</p>\n<p>Customers using the API for server-to-server calls may need to allowlist <code>rest.iad-01.braze.com</code> if they’re behind a firewall.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>Starting on October 28th, 2024, we apply a base speed limit of 3,000 requests per three seconds to this endpoint for all customers. Each <code>/users/track</code> request can contain up to 75 event objects, 75 attribute objects, and 75 purchase objects. Each object (event, attribute, and purchase arrays) can update one user each. In total, this means a maximum of 225 users can be updated in a single call. In addition, a single user profile can be updated by multiple objects.</p>\n<p>Different limits apply to customers who have purchased <strong>Monthly Active Users - CY 24-25</strong>. For details on these limits, see <a href=\"https://www.braze.com/docs/api/endpoints/user_data/post_user_track/#monthly-active-users-cy-24-25\">Monthly Active Users - CY 24-25 limits</a>.</p>\n<p>See our page on <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a> for details, and reach out to your customer success manager if you need your limit increased.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<blockquote>\n<p><strong>Important:</strong> For each request component listed in the following table, one of <code>external_id</code>, <code>user_alias</code>, <code>braze_id</code>, <code>email</code>, or <code>phone</code> is required. </p>\n</blockquote>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>attributes</code></td>\n<td>Optional</td>\n<td>Array of attributes objects</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/user_attributes_object/\">user attributes object</a></td>\n</tr>\n<tr>\n<td><code>events</code></td>\n<td>Optional</td>\n<td>Array of event objects</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/event_object/\">events object</a></td>\n</tr>\n<tr>\n<td><code>purchases</code></td>\n<td>Optional</td>\n<td>Array of purchase objects</td>\n<td>See <a href=\"https://www.braze.com/docs/api/objects_filters/purchase_object/\">purchases object</a></td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"example-requests\">Example requests</h2>\n<h3 id=\"update-a-user-profile-by-email-address\">Update a user profile by email address</h3>\n<p>You can update a user profile by email address using the <code>/users/track</code> endpoint.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request POST 'https://rest.iad-01.braze.com/users/track' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR_REST_API_KEY' \\\n--data-raw '{\n    \"attributes\": [\n        {\n            \"email\": \"test@braze.com\",\n            \"string_attribute\": \"fruit\",\n            \"boolean_attribute_1\": true,\n            \"integer_attribute\": 26,\n            \"array_attribute\": [\n                \"banana\",\n                \"apple\"\n            ]\n        }\n    ],\n    \"events\": [\n        {\n            \"email\": \"test@braze.com\",\n            \"app_id\": \"your_app_identifier\",\n            \"name\": \"rented_movie\",\n            \"time\": \"2022-12-06T19:20:45+01:00\",\n            \"properties\": {\n                \"release\": {\n                    \"studio\": \"FilmStudio\",\n                    \"year\": \"2022\"\n                },\n                \"cast\": [\n                    {\n                        \"name\": \"Actor1\"\n                    },\n                    {\n                        \"name\": \"Actor2\"\n                    }\n                ]\n            }\n        },\n        {\n            \"user_alias\": {\n                \"alias_name\": \"device123\",\n                \"alias_label\": \"my_device_identifier\"\n            },\n            \"app_id\": \"your_app_identifier\",\n            \"name\": \"rented_movie\",\n            \"time\": \"2013-07-16T19:20:50+01:00\"\n        }\n    ],\n    \"purchases\": [\n        {\n            \"email\": \"test@braze.com\",\n            \"app_id\": \"your_app_identifier\",\n            \"product_id\": \"product_name\",\n            \"currency\": \"USD\",\n            \"price\": 12.12,\n            \"quantity\": 6,\n            \"time\": \"2017-05-12T18:47:12Z\",\n            \"properties\": {\n                \"color\": \"red\",\n                \"monogram\": \"ABC\",\n                \"checkout_duration\": 180,\n                \"size\": \"Large\",\n                \"brand\": \"Backpack Locker\"\n            }\n        }\n    ]\n}'\n\n</code></pre><h3 id=\"update-a-user-profile-by-phone-number\">Update a user profile by phone number</h3>\n<p>You can update a user profile by phone number using the <code>/users/track</code> endpoint. This endpoint only works if you include a valid phone number.</p>\n<blockquote>\n<p><strong>Important:</strong><br />If you include a request with both <code>email</code> and <code>phone</code>, Braze will use the email as the identifier. </p>\n</blockquote>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request POST 'https://rest.iad-01.braze.com/users/track' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR_REST_API_KEY' \\\n--data-raw '{\n    \"attributes\": [\n        {\n            \"phone\": \"+15043277269\",\n            \"string_attribute\": \"fruit\",\n            \"boolean_attribute_1\": true,\n            \"integer_attribute\": 25,\n            \"array_attribute\": [\n                \"banana\",\n                \"apple\"\n            ]\n        }\n    ],\n}'\n\n</code></pre><h3 id=\"set-subscription-groups\">Set subscription groups</h3>\n<p>This example shows how to create a user and set their subscription group within the user attributes object.</p>\n<p>Updating the subscription status with this endpoint will update the user specified by their <code>external_id</code> (such as User1) and update the subscription status of any users with the same email as that user (User1).</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request POST 'https://rest.iad-01.braze.com/users/track' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR_REST_API_KEY' \\\n--data-raw '{\n  \"attributes\": [\n  {\n    \"external_id\": \"user_identifier\",\n    \"email\": \"example@email.com\",\n    \"email_subscribe\": \"subscribed\",\n    \"subscription_groups\": [{\n      \"subscription_group_id\": \"subscription_group_identifier_1\",\n      \"subscription_state\": \"unsubscribed\"\n      },\n      {\n        \"subscription_group_id\": \"subscription_group_identifier_2\",\n        \"subscription_state\": \"subscribed\"\n        },\n        {\n          \"subscription_group_id\": \"subscription_group_identifier_3\",\n          \"subscription_state\": \"subscribed\"\n        }\n      ]\n    }\n  ]\n}'\n\n</code></pre><h3 id=\"example-request-to-create-an-alias-only-user\">Example request to create an alias-only user</h3>\n<p>You can use the <code>/users/track</code> endpoint to create a new alias-only user by setting the <code>_update_existing_only</code> key with a value of <code>false</code> in the body of the request. If this value is omitted, the alias-only user profile will not be created. Using an alias-only user guarantees that one profile with that alias will exist. This is especially helpful when building a new integration as it prevents the creation of duplicate user profiles.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl --location --request POST 'https://rest.iad-01.braze.com/users/track' \\\n--header 'Content-Type: application/json' \\\n--header 'Authorization: Bearer YOUR_REST_API_KEY' \\\n--data-raw '{\n{\n    \"attributes\": [\n        {\n            \"_update_existing_only\": false,\n            \"user_alias\": {\n                \"alias_name\": \"example_name\",\n                \"alias_label\": \"example_label\"\n            },\n            \"email\": \"email@example.com\"\n        }\n    ],\n}'\n\n</code></pre><h2 id=\"responses\">Responses</h2>\n<p>When using any of the aforementioned API requests, you should receive one of the following three general responses: a <a href=\"https://www.braze.com/docs/api/endpoints/user_data/post_user_track/#successful-message\">successful message</a>, a <a href=\"https://www.braze.com/docs/api/endpoints/user_data/post_user_track/#successful-message-with-non-fatal-errors\">successful message with non-fatal errors</a>, or a <a href=\"https://www.braze.com/docs/api/endpoints/user_data/post_user_track/#message-with-fatal-errors\">message with fatal errors</a>.</p>\n<h3 id=\"successful-message\">Successful message</h3>\n<p>Successful messages will be met with the following response:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\" : \"success\",\n  \"attributes_processed\" : (optional, integer), if attributes are included in the request, this will return an integer of the number of external_ids with attributes that were queued to be processed,\n  \"events_processed\" : (optional, integer), if events are included in the request, this will return an integer of the number of events that were queued to be processed,\n  \"purchases_processed\" : (optional, integer), if purchases are included in the request, this will return an integer of the number of purchases that were queued to be processed,\n}\n\n</code></pre>\n<h3 id=\"successful-message-with-non-fatal-errors\">Successful message with non-fatal errors</h3>\n<p>If your message is successful but has non-fatal errors, such as one invalid event object out of a long list of events, then you will receive the following response:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\" : \"success\",\n  \"errors\" : [\n    {\n      &lt;minor error message&gt;\n    }\n  ]\n}\n\n</code></pre>\n<p>For success messages, any data not affected by an error in the <code>errors</code> array will still be processed.</p>\n<h3 id=\"message-with-fatal-errors\">Message with fatal errors</h3>\n<p>If your message has a fatal error, you will receive the following response:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\" : &lt;fatal error message&gt;,\n  \"errors\" : [\n    {\n      &lt;fatal error message&gt;\n    }\n  ]\n}\n\n</code></pre>\n<h3 id=\"fatal-error-response-codes\">Fatal error response codes</h3>\n<p>For status codes and associated error messages that will be returned if your request encounters a fatal error, reference <a href=\"https://www.braze.com/api/errors/#fatal-errors\">Fatal errors &amp; responses</a>.</p>\n<p>If you receive the error “provided external_id is blacklisted and disallowed”, your request may have included a “dummy user.” For more information, refer to <a href=\"https://www.braze.com/docs/user_guide/data_and_analytics/user_data_collection/user_archival/#spam-blocking\">Spam blocking</a>.</p>\n<h2 id=\"frequently-asked-questions\">Frequently asked questions</h2>\n<blockquote>\n<p><strong>Important:</strong> </p>\n</blockquote>\n<blockquote>\n<p>Do not send legally required transactional emails to SMS gateways as there’s a strong likelihood that those emails will not be delivered.  </p>\n</blockquote>\n<p>Although emails you send using a phone number and the provider’s gateway domain (known as an MM3) can result in the email being received as an SMS (text) message, some of our email providers do not support this behavior. For example, if you send an email to a T-Mobile phone number (such as “<a href=\"mailto:9999999999@tmomail.net\">9999999999@tmomail.net</a>”), your SMS message would be sent to whoever owns that phone number on the T-Mobile network.  </p>\n<p>Keep in mind that even though these emails may not be delivered to the SMS gateway, they will still count towards your email billing. To avoid sending emails to unsupported gateways, review the <a href=\"https://www.fcc.gov/consumer-governmental-affairs/about-bureau/consumer-policy-division/can-spam/domain-name-downloads\">list of unsupported gateway domain names</a>. </p>\n<h3 id=\"what-happens-when-multiple-profiles-with-the-same-email-address-are-found\">What happens when multiple profiles with the same email address are found?</h3>\n<p>If the <code>external_id</code> exists, the most recently updated profile with an external ID will be prioritized for updates. If the <code>external_id</code> doesn’t exist, the most recently updated profile will be prioritized for updates.</p>\n<h3 id=\"what-happens-if-no-profile-with-the-email-address-currently-exists\">What happens if no profile with the email address currently exists?</h3>\n<p>A new profile will be created, and an email-only user will be created. An alias will not be created. The email field will be set to <a href=\"mailto:test@braze.com\">test@braze.com</a>, as noted in the example request for updating a user profile by email address.</p>\n<h3 id=\"how-do-you-use-userstrack-to-import-legacy-user-data\">How do you use <code>/users/track</code> to import legacy user data?</h3>\n<p>You may submit data through the Braze API for a user who has not yet used your mobile app to generate a user profile. If the user subsequently uses the application all information following their identification using the SDK will be merged with the existing user profile you created using the API call. Any user behavior recorded anonymously by the SDK before identification will be lost upon merging with the existing API-generated user profile.</p>\n<p>The segmentation tool will include these users regardless of whether they have engaged with the app. If you want to exclude users uploaded using the User API who have not yet engaged with the app, add the <code>Session Count &gt; 0</code> filter.</p>\n<h3 id=\"how-does-userstrack-handle-duplicate-events\">How does <code>/users/track</code> handle duplicate events?</h3>\n<p>Each event object in the events array represents a single occurrence of a custom event by a user at a designated time. This means each event ingested into Braze has its own event ID, so “duplicate” events are treated as separate, unique events.</p>\n<h2 id=\"monthly-active-users-cy-24-25\">Monthly Active Users CY 24-25</h2>\n<p>For customers who have purchased Monthly Active Users - CY 24-25, Braze manages different rate limits on its <code>/users/track</code> endpoint:</p>\n<ul>\n<li><p>Hourly rate limits are set according to the expected data ingestion activity on your account, which may correspond to the number of monthly active users you have purchased, industry, seasonality, or other factors.</p>\n</li>\n<li><p>In addition to the limit on requests per hour, Braze also imposes a burst limit on the number of requests allowed per second.</p>\n</li>\n<li><p>Each request may batch up to 50 updates combined across attribute, event, or purchase objects.</p>\n</li>\n</ul>\n<p>Current limits based on expected ingestion can be found in the dashboard under <strong>Settings</strong> &gt; <strong>APIs and Identifiers</strong> &gt; <strong>API limits</strong>. We may modify rate limits to protect system stability or allow for increased data throughput on your account. Please contact Braze Support or your customer success manager for questions or concerns regarding hourly or per-second request limit and the needs of your business.</p>\n","urlObject":{"protocol":"https","path":["users","track"],"host":["{{instance_url}}"],"query":[{"disabled":true,"key":"","value":""}],"variable":[]}},"response":[],"_postman_id":"4cf57ea9-9b37-4e99-a02e-4373c9a4ee59"},{"name":"Delete users","id":"22e91d00-d178-4b4f-a3df-0073ecfcc992","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","type":"text","value":"Bearer {{api_key}}"}],"body":{"mode":"raw","raw":"{\n  \"external_ids\": [\"external_identifier1\", \"external_identifier2\"],\n  \"braze_ids\": [\"braze_identifier1\", \"braze_identifier2\"],\n  \"user_aliases\": [\n    {\n      \"alias_name\": \"user_alias1\", \"alias_label\": \"alias_label1\"\n    },\n    {\n      \"alias_name\": \"user_alias2\", \"alias_label\": \"alias_label2\"\n    }\n  ]\n}"},"url":"https://{{instance_url}}/users/delete","description":"<blockquote>\n<p>Use this endpoint to delete any user profile by specifying a known user identifier. </p>\n</blockquote>\n<p>Up to 50 <code>external_ids</code>, <code>user_aliases</code>, <code>braze_ids</code>, or <code>email_addresses</code> can be included in a single request. Only one of <code>external_ids</code>, <code>user_aliases</code>, <code>braze_ids</code>, or <code>email_addresses</code> can be included in a single request.</p>\n<blockquote>\n<p><strong>Warning:</strong> Deleting user profiles cannot be undone. It will permanently remove users which may cause discrepancies in your data. Learn more about what happens when you <a href=\"https://github.com/braze-inc/braze-docs/blob/develop/_docs/_api/endpoints/user_data/%7B%7Bsite.baseurl%7D%7D/help/help_articles/api/delete_user\">delete a user profile using the API</a> in our Help documentation. </p>\n</blockquote>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you'll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>users.delete</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>For customers who onboarded with Braze on or after September 16, 2021, we apply a shared rate limit of 20,000 requests per minute to this endpoint. This rate limit is shared with the <code>/users/delete</code>, <code>/users/identify</code>, <code>/users/merge</code>, and <code>/users/alias/update</code> endpoints, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h3 id=\"request-parameter\">Request parameter</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>external_ids</code></td>\n<td>Optional</td>\n<td>Array of strings</td>\n<td>External identifiers for the users to delete.</td>\n</tr>\n<tr>\n<td><code>user_aliases</code></td>\n<td>Optional</td>\n<td>Array of user alias object</td>\n<td><a href=\"https://www.braze.com/docs/api/objects_filters/user_alias_object/\">User aliases</a> for the users to delete.</td>\n</tr>\n<tr>\n<td><code>braze_ids</code></td>\n<td>Optional</td>\n<td>Array of strings</td>\n<td>Braze user identifiers for the users to delete.</td>\n</tr>\n<tr>\n<td><code>email_addresses</code></td>\n<td>Optional</td>\n<td>Array of strings</td>\n<td>User emails for the users to delete. Refer to <a href=\"https://www.braze.com/docs/api/endpoints/user_data/post_user_delete/#deleting-users-by-email\">Deleting users by email</a> for more information.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"deleting-users-by-email\">Deleting users by email</h2>\n<p>If an <code>email</code> is specified as an identifier, an additional <code>prioritization</code> value is required in the identifier. The <code>prioritization</code> is an ordered array and should specify which user to delete if multiple users are found. This means deleting users will not occur if more than one user matches a prioritization.</p>\n<p>The allowed values for the array are: <code>identified</code>, <code>unidentified</code>, <code>most_recently_updated</code>. <code>most_recently_updated</code> refers to prioritizing the most recently updated user.</p>\n<p>Only one of the following options may exist in the prioritization array at a time:</p>\n<ul>\n<li><p><code>identified</code> refers to prioritizing a user with an <code>external_id</code></p>\n</li>\n<li><p><code>unidentified</code> refers to prioritizing a user without an <code>external_id</code></p>\n</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Content-Type: application/json\nAuthorization: Bearer YOUR_REST_API_KEY\n{\n  \"deleted\" : (required, integer) number of user IDs queued for deletion\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["users","delete"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"22e91d00-d178-4b4f-a3df-0073ecfcc992"},{"name":"Merge users","id":"d262b86d-cf84-46e2-b9d0-f882bb7078de","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer {{api_key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merge_updates\": [\n    {\n      \"identifier_to_merge\": {\n        \"external_id\": \"old-user1\"\n      },\n      \"identifier_to_keep\": {\n        \"external_id\": \"current-user1\"\n      }\n    },\n    {\n      \"identifier_to_merge\": {\n        \"email\": \"user1@braze.com\",\n        \"prioritization\": [\"unidentified\", \"most_recently_updated\"]\n      },\n      \"identifier_to_keep\":  {\n        \"email\": \"user2@braze.com\",\n        \"prioritization\": [\"identified\", \"most_recently_updated\"]\n      }\n    },\n    {\n      \"identifier_to_merge\": {\n        \"user_alias\": {\n          \"alias_name\": \"old-user2@example.com\",\n          \"alias_label\": \"email\"\n        }\n      },\n      \"identifier_to_keep\": {\n        \"user_alias\": {\n          \"alias_name\": \"current-user2@example.com\",\n          \"alias_label\": \"email\"\n        }\n      }\n    }\n  ]\n}'"},"url":"https://{{instance_url}}/users/merge","description":"<blockquote>\n<p>Use this endpoint to merge one user into another user. </p>\n</blockquote>\n<p>Up to 50 merges may be specified per request. This endpoint is asynchronous.</p>\n<h2 id=\"prerequisites\">Prerequisites</h2>\n<p>To use this endpoint, you'll need an <a href=\"https://braze.com/docs/api/api_key/\">API key</a> with the <code>users.merge</code> permission.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>For customers who onboarded with Braze on or after September 16, 2021, we apply a shared rate limit of 20,000 requests per minute to this endpoint. This rate limit is shared with the <code>/users/delete</code>, <code>/users/alias/new</code>, <code>/users/identify</code>, and <code>/users/alias/update</code> endpoints, as documented in <a href=\"https://www.braze.com/docs/api/api_limits/\">API rate limits</a>.</p>\n<h2 id=\"request-parameters\">Request parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Data Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>merge_updates</code></td>\n<td>Required</td>\n<td>Array</td>\n<td>An object array. Each object should contain an <code>identifier_to_merge</code> object and an <code>identifier_to_keep</code> object, which should each reference a user either by external_id, <code>user_alias</code> or <code>email</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"merge-behavior\">Merge behavior</h3>\n<p>The behavior documented below is true for all Braze features that <em>are not</em> powered by Snowflake. User merges won’t be reflected for the <strong>Messaging History</strong> tab, Segment Extensions, Query Builder, and Currents.</p>\n<blockquote>\n<p><strong>Important</strong>: The endpoint does not guarantee the sequence of <code>merge_updates</code> objects being updated. </p>\n</blockquote>\n<p>This endpoint will merge any of the following fields if they're not found on the target user:</p>\n<ul>\n<li><p>First name</p>\n</li>\n<li><p>Last name</p>\n</li>\n<li><p>Email</p>\n</li>\n<li><p>Gender</p>\n</li>\n<li><p>Date of birth</p>\n</li>\n<li><p>Phone number</p>\n</li>\n<li><p>Time zone</p>\n</li>\n<li><p>Home city</p>\n</li>\n<li><p>Country</p>\n</li>\n<li><p>Language</p>\n</li>\n<li><p>Session count (the sum of sessions from both profiles)</p>\n</li>\n<li><p>Date of first session (Braze will pick the earlier date of the two dates)</p>\n</li>\n<li><p>Date of last session (Braze will pick the later date of the two dates)</p>\n</li>\n<li><p>Custom attributes (existing custom attributes on the target profile are retained and will include custom attributes that didn’t exist on the target profile)</p>\n</li>\n<li><p>Custom event and purchase event data</p>\n</li>\n<li><p>Custom event and purchase event properties for “X times in Y days” segmentation (where X&lt;=50 and Y&lt;=30)</p>\n</li>\n<li><p>Segmentable custom events summary</p>\n<ul>\n<li><p>Event count (the sum from both profiles)</p>\n</li>\n<li><p>Event first occurred (Braze will pick the earlier date of the two dates)</p>\n</li>\n<li><p>Event last occurred (Braze will pick the later date of the two dates)</p>\n</li>\n</ul>\n</li>\n<li><p>In-app purchase total in cents (the sum from both profiles)</p>\n</li>\n<li><p>Total number of purchases (the sum from both profiles)</p>\n</li>\n<li><p>Date of first purchase (Braze will pick the earlier date of the two dates)</p>\n</li>\n<li><p>Date of last purchase (Braze will pick the later date of the two dates)</p>\n</li>\n<li><p>App summaries</p>\n</li>\n<li><p>Last_X_at fields (Braze will update the fields if the orphaned profile fields are more recent)</p>\n</li>\n<li><p>Campaign interaction data (Braze will pick the most recent date fields)</p>\n</li>\n<li><p>Workflow summaries (Braze will pick the most recent date fields)</p>\n</li>\n<li><p>Message and message engagement history</p>\n</li>\n<li><p>Session data will only be merged if the app exists on both user profiles</p>\n</li>\n</ul>\n<blockquote>\n<p><strong>Note:</strong> When merging users, using the <code>/users/merge</code> endpoint works the same way as using the <a href=\"https://js.appboycdn.com/web-sdk/latest/doc/modules/braze.html#changeuser\">&lt;code&gt;changeUser()&lt;/code&gt;&amp;nbsp;method</a>. </p>\n</blockquote>\n<h4 id=\"custom-event-date-and-purchase-event-date-behavior\">Custom event date and purchase event date behavior</h4>\n<p>Note that these merged fields will update “for X events in Y days” filters. For purchase events, these filters include “number of purchases in Y days” and “money spent in last Y days”.</p>\n<h3 id=\"merging-users-by-email-or-phone-number\">Merging users by email or phone number</h3>\n<p>If an <code>email</code> or <code>phone</code> is specified as an identifier, an additional <code>prioritization</code> value is required in the identifier. The <code>prioritization</code> should be an array specifying which user to merge if there are multiple users found. <code>prioritization</code> is an ordered array, meaning if more than one user matches from a prioritization, then merging will not occur.</p>\n<p>The allowed values for the array are: <code>identified</code>, <code>unidentified</code>, <code>most_recently_updated</code>. <code>most_recently_updated</code> refers to prioritizing the most recently updated user.</p>\n<p>Only one of the following options may exist in the prioritization array at a time:</p>\n<ul>\n<li><p><code>identified</code> refers to prioritizing a user with an <code>external_id</code></p>\n</li>\n<li><p><code>unidentified</code> refers to prioritizing a user without an <code>external_id</code></p>\n</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<p>There are two status code responses for this endpoint: <code>202</code> and <code>400</code>.</p>\n<h3 id=\"example-success-response\">Example success response</h3>\n<p>The status code <code>202</code> could return the following response body.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"success\"\n}\n\n</code></pre>\n<h3 id=\"example-error-response\">Example error response</h3>\n<p>The status code <code>400</code> could return the following response body. Refer to Troubleshooting for more information about errors you may encounter.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"'merge_updates' must be an array of objects\"\n}\n\n</code></pre>\n<h2 id=\"troubleshooting\">Troubleshooting</h2>\n<p>The following table lists possible error messages that may occur.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error</th>\n<th>Troubleshooting</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>'merge_updates' must be an array of objects</code></td>\n<td>Check that <code>merge_updates</code> is an array of objects.</td>\n</tr>\n<tr>\n<td><code>a single request may not contain more than 50 merge updates</code></td>\n<td>You can only specify up to 50 merge updates in a single request.</td>\n</tr>\n<tr>\n<td><code>identifiers must be objects with an 'external_id' property that is a string, or 'user_alias' property that is an object</code></td>\n<td>Check the identifiers in your request.</td>\n</tr>\n<tr>\n<td><code>'merge_updates' must only have 'identifier_to_merge' and 'identifier_to_keep'</code></td>\n<td>Check that <code>merge_updates</code> only contains the two objects <code>identifier_to_merge</code> and <code>identifier_to_keep</code>.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["users","merge"],"host":["{{instance_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"d262b86d-cf84-46e2-b9d0-f882bb7078de"}],"id":"903f23b8-dd85-4c82-bff8-9f651d916888","description":"<p>The Braze User Data endpoints allow you to track information about your users by logging data about them that comes from outside your mobile app. You can also use this API to delete users for testing or other purposes.</p>\n<p>All API endpoints have a data payload limit of 4 MB. Attempts to post more data than 4 MB will fail with an HTTP 413 Request Entity Too Large.</p>\n<p>The examples in this section contain the URL <a href=\"https://rest.iad-01.braze.com\">https://rest.iad-01.braze.com</a>, but you may need to use a different endpoint URL (for example, if you're hosted in the Braze EU data center or have a dedicated Braze installation). Your Braze customer success manager will inform you if you should use a different endpoint URL.</p>\n","_postman_id":"903f23b8-dd85-4c82-bff8-9f651d916888"}],"event":[{"listen":"prerequest","script":{"id":"fe2426d8-1773-4b52-8ae4-5c0891772518","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"5c6ba08d-e78a-4ca3-988b-0266805b9f32","type":"text/javascript","exec":[""]}}]}