openapi: 3.0.3
servers:
  - url: https://rest.iad-01.braze.com
info:
  contact: {}
  description: |-
    # Braze API Overview

    Braze provides a high performance REST API to allow you to track users, send messages, export data, and more.

    A REST API is a way to programmatically transfer information over the web using a predefined schema. Braze has created many different endpoints with specific requirements that will perform various actions and/or return various data. API access is done using HTTPS web requests to your company's REST API endpoint (this will correspond to your Dashboard URL as shown in the table below).

    Customers using Braze's EU database should use `https://rest.fra-01.braze.eu/`. For more information on REST API endpoints for customers using Braze's EU database see our [EU/US Implementation Differences documentation](https://www.braze.com/docs/developer_guide/eu01_us3_sdk_implementation_differences/overview/).

    ## Braze Instances

    Instance    | Dashboard URL   | REST Endpoint
    ----------- |---------------- | --------------------
    US-01 | `https://dashboard.braze.com` or<br> `https://dashboard-01.braze.com` | `https://rest.iad-01.braze.com`
    US-02 | `https://dashboard-02.braze.com` | `https://rest.iad-02.braze.com`
    US-03 | `https://dashboard-03.braze.com` | `https://rest.iad-03.braze.com`
    US-04 | `https://dashboard-04.braze.com` | `https://rest.iad-04.braze.com`
    US-06 | `https://dashboard-06.braze.com` | `https://rest.iad-06.braze.com`
    EU-01 | `https://dashboard.braze.eu` or<br> `https://dashboard-01.braze.eu` | `https://rest.fra-01.braze.eu`


    # Using Braze's Postman Collection 

    If you have a Postman account (MacOS, Windows, and Linux versions can be downloaded from their website located [here](https://www.getpostman.com)), you can go to our Postman documentation and click the orange `Run in Postman` button in the top, right corner. This will allow you to [create an environment](#setting-up-your-postman-environment), as well as edit the available `POST` and `GET` requests to suit your own needs.

    ## Setting Up Your Postman Environment

    The Braze Postman Collection uses a templating variable, `{{instance_url}}`, to substitute the REST API URL of your Braze instance into the pre-built requests. Rather than having to manually edit all requests in the Collection, you can set up this variable in your Postman environment. To do so, please follow the steps below:

    1. Click on the gear icon in the top right corner of the Postman app. 
    2. Select "Manage Environments" to open a modal window which displays your active environments.
    3. In the bottom right corner of the modal window, click "Add" to create a new environment.
    4. Give this environment a name (e.g. "Braze API Requests") and add keys for `instance_url` and `api_key` with values corresponding to [your Braze instance](https://www.braze.com/docs/api/basics/#endpoints) and [Braze REST API Key](https://www.braze.com/docs/api/basics/#app-group-rest-api-keys), as pictured below. 

    As of April, 2020 Braze has changed how we read App Group API keys. Instead of passing them in the request body or through url parameters, we now read the App Group Rest`api_key` through the HTTP Authorization header. API keys not passed through the HTTP Authorization Header will coninue to work until they have been sunset. 

    ## Using the Pre-Built Requests from the Collection

    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, simply click on it within the 'Collections' menu on the left side of Postman. This will open the request as a new tab in the main window of the Postman app.

    In general, there are two types of requests that Braze's API endpoints accept - `GET` and `POST`. Depending on which `HTTP` method the endpoint uses, you'll need to edit the pre-built request differently.

    ### Edit a POST Request

    When editing a `POST` request, you'll need to open the request and navigate to the `Body` section in the request editor. For readability, select the `raw` radio button to format the `JSON` request body.

    ### Edit a GET Request

    When editing a `GET` request, you will need to edit the parameters passed in the request URL. To edit these easily, select the `Params` button next to the URL bar and edit the key-value pairs in the fields that will appear below the URL bar.

    ## Send Your Request

    Once your API request is ready to send, click on the 'Send' button next to the URL bar. The request will be sent and the response data will be populated 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.
  title: Braze Endpoints
  version: 1.0.0
  x-apisguru-categories:
    - marketing
  x-logo:
    url: https://www.braze.com/assets/favicon/apple-touch-icon.png
  x-origin:
    - format: postman
      url: https://www.getpostman.com/collections/29baa41d7ba930673ef0
      version: 2.x
  x-providerName: braze.com
tags:
  - description: Users’ email subscription status can be updated and retrieved via 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.
    name: Email Lists & Addresses
  - description: |+
      With this collection of endpoints, you will be able to access and export various levels of details on your users, segments, campaigns, and Canvases. 

      Please be sure to reference the correct Instance when making API requests.

    name: Export
  - name: Campaign
  - name: Canvas
  - name: Custom Events
  - name: KPI
  - name: News Feed
  - name: Segment
  - name: Session Analytics
  - name: Users
  - description: |+
      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 /messages/send and /messages/schedule endpoints. Alternatively, you can manage the details of your message with an API-Triggered Delivery campaign in the dashboard and just control when and to whom it is sent with the campaigns/trigger/send and campaigns/trigger/schedule endpoints. The following sections will detail the request specification for both methods.

      The examples below contain the URL https://rest.iad-01.braze.com, but some customers will need to use a different endpoint URL, for example if you are hosted in Braze’s EU data center or have a dedicated Braze installation. Your Success Manager will inform you if you should use a different endpoint URL.

      Similarly to other campaigns, you can limit the number of times a particular user can receive a Messaging API campaign by configuring re-eligibility settings in the Braze Dashboard. Braze will not deliver API messages to users that haven’t become re-eligible for the campaign regardless of how many API requests are sent.

    name: Messaging
  - name: Schedule Mesages
  - name: Send Messages
  - description: Use the Subscription Group REST APIs to programmatically manage the subscription groups that you have stored on the Braze dashboard, on the Subscription Group page.
    name: Subscription Groups
  - name: Email
  - name: SMS
  - name: Templates
  - description: |-
      Content Blocks are an Email Templating feature that allow you to: 
      - Create a consistent look and feel to your Email campaigns using Content Blocks as Headers and Footers.
      - Distribute the same offer codes through different channels.
      - Create pre-defined assets that can be used to build messages with consistent information and assets.
      - Copy entire message bodies to other messages.

      You can edit Content Blocks in the Templates & Media section of the Braze UI, or here, via API.
    name: Content Blocks
  - name: Email Templates
  - description: |+
      The User API allows you to track information on your users by logging data about your users that comes from outside your mobile app. You can also use this API to delete users for testing or other purposes.

      All API endpoints have a data payload limit of 4MB. Attempts to post more data than 4MB will fail with an HTTP 413 Request Entity Too Large.

      The examples below contain the URL https://rest.iad-01.braze.com, but some customers will need to use a different endpoint URL, for example if you are hosted in Braze’s EU data center or have a dedicated Braze installation. Your Success Manager will inform you if you should use a different endpoint URL.

    name: User Data
  - description: 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.
    name: External ID Migration
paths:
  /campaigns/data_series:
    get:
      description: |-
        This endpoint allows you to retrieve a daily series of various stats for a campaign over time. Data returned includes how many messages were sent, opened, clicked, converted, etc., broken down by message channel. 

        ### Components Used
        -[Campaign Identifier](https://www.braze.com/docs/api/identifier_types/)


        ### Responses

        #### Multi-Channel Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
            "message": (required, string) the status of the export, returns 'success' when completed without errors,
            "data" : [
                {
                    "time" : (string) date as ISO 8601 date,
                    "messages" : {
                        "ios_push" : [
                            {
                              "variation_name": "iOS_Push",
                              "sent" : (int),
                              "direct_opens" : (int),
                              "total_opens" : (int),
                              "bounces" : (int),
                              "body_clicks" : (int)
                              "revenue": 0,
                              "unique_recipients": 1,
                              "conversions": 0,
                              "conversions_by_send_time": 0,
                              "conversions1": 0,
                              "conversions1_by_send_time": 0,
                              "conversions2": 0,
                              "conversions2_by_send_time": 0,
                              "conversions3": 0,
                              "conversions3_by_send_time": 0,
                              "carousel_slide_[NUM]_[TITLE]_click": (optional, int),
                              "notif_button_[NUM]_[TITLE]_click": (optional, int)
                            }
                        ],
                        "android_push" : [
                            {
                              "sent" : (int),
                              "direct_opens" : (int),
                              "total_opens" : (int),
                              "bounces" : (int),
                              "body_clicks" : (int)
                            }
                        ],
                        "webhook": [
                            {
                              "sent": (int),
                              "errors": (int)
                            }
                        ],
                        "email" : [
                            {
                              "sent": (int),
                              "opens": (int),
                              "unique_opens": (int),
                              "clicks": (int),
                              "unique_clicks": (int),
                              "unsubscribes": (int),
                              "bounces": (int),
                              "delivered": (int),
                              "reported_spam": (int)
                            }
                        ],
                        "sms" : [
                          {
                            "sent": (int),
                            "delivered": (int),
                            "undelivered": (int),
                            "delivery_failed": (int)
                          }
                        ]
                      },
                   "conversions_by_send_time": (optional, int),
                   "conversions1_by_send_time": (optional, int),
                   "conversions2_by_send_time": (optional, int),
                   "conversions3_by_send_time": (optional, int),
                   "conversions": (int),
                   "conversions1": (optional, int),
                   "conversions2": (optional, int),
                   "conversions3": (optional, int),
                   "unique_recipients": (int),
                   "revenue": (optional, float)
                },
                ...
            ],
            ...
        }
        ```

        #### Multivariate Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
            "data" : [
                {
                    "time" : (string) date as ISO 8601 date,
                    "conversions" : (int),
                    "revenue": (float),
                    "conversions_by_send_time": (int),
                    "messages" : {
                       "trigger_in_app_message": [{
              				"variation_name": (optional, string),
              				"impressions": (int),
              				"clicks": (int),
              				"first_button_clicks": (int),
              				"second_button_clicks": (int),
              				"revenue": (optional, float),,
              				"unique_recipients": (int),
              				"conversions": (optional, int),
              				"conversions_by_send_time": (optional, int),
              				"conversions1": (optional, int),
              				"conversions1_by_send_time": (optional, int),
              				"conversions2": (optional, int),
              				"conversions2_by_send_time": (optional, int),
              				"conversions3": (optional, int),
              				"conversions3_by_send_time": (optional, int)
              			}, {
              				"variation_name": (optional, string),
              				"impressions": (int),
              				"clicks": (int),
              				"first_button_clicks": (int),
              				"second_button_clicks": (int),
              				"revenue": (optional, float),,
              				"unique_recipients": (int),
              				"conversions": (optional, int),
              				"conversions_by_send_time": (optional, int),
              				"conversions1": (optional, int),
              				"conversions1_by_send_time": (optional, int),
              				"conversions2": (optional, int),
              				"conversions2_by_send_time": (optional, int),
              				"conversions3": (optional, int).
              				"conversions3_by_send_time": (optional, int)
              			}, {
              				"variation_name": (optional, string),
              				"revenue": (optional, float),,
              				"unique_recipients": (int),
              				"conversions": (optional, int),
              				"conversions_by_send_time": (optional, int),
              				"conversions1": (optional, int),
              				"conversions1_by_send_time": (optional, int),
              				"conversions2": (optional, int),
              				"conversions2_by_send_time": (optional, int),
              				"conversions3": (optional, int),
              				"conversions3_by_send_time": (optional, int),
              				"enrolled": (optional, int)
              			}]
              		},
              		"conversions_by_send_time": (optional, int),
              		"conversions1_by_send_time": (optional, int),
              		"conversions2_by_send_time": (optional, int),
              		"conversions3_by_send_time": (optional, int),
              		"conversions": (optional, int,
              		"conversions1": (optional, int),
              		"conversions2": (optional, int),
              		"conversions3": (optional, int),
              		"unique_recipients": (int),
              		"revenue": (optional, float)
                 }],
                 ...
        }
        ```

        Possible message types are `email`, `in_app_message`, `webhook`, `android_push`, `apple_push`, `kindle_push`, `web_push`, `windows_phone8_push`, and `windows_universal_push`. All push message types will have the same statistics shown for `android_push` above.
      operationId: campaignAnalytics
      parameters:
        - description: |-
            (Required) String

            Campaign API identifier
          in: query
          name: campaign_id
          schema:
            example: "{{campaign_identifier}}"
            type: string
        - description: |-
            (Required) Integer

            Max number of days before ending_at to include in the returned series - must be between 1 and 100 inclusive
          in: query
          name: length
          schema:
            example: "7"
            type: string
        - description: |-
            (Optional) DateTime (ISO 8601 string)

            Date on which the data series should end - defaults to time of the request
          in: query
          name: ending_at
          schema:
            example: 2020-06-28T23:59:59-5:00
            type: string
      responses:
        "200":
          description: ""
      summary: Campaign Analytics
      tags:
        - Export
        - Campaign
  /campaigns/details:
    get:
      description: |-
        This endpoint allows you to retrieve relevant information on a specified campaign, which can be identified by the `campaign_id`. 

        > The campaign_id for API campaigns can be found on the Developer Console page and the campaign details page within your dashboard or you can use the Campaign List Endpoint.

        ### Components Used
        - [Campaign Identifier](https://www.braze.com/docs/api/identifier_types/)


        ### Campaign Details Endpoint API Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
            "message": (required, string) the status of the export, returns 'success' when completed without errors,
            "created_at" : (string) date created as ISO 8601 date,
            "updated_at" : (string) date last updated as ISO 8601 date,
            "archived": (boolean) whether this Campaign is archived,
            "draft": (boolean) whether this Campaign is a draft,
            "name" : (string) campaign name,
            "description" : (string) campaign description,
            "schedule_type" : (string) type of scheduling action,
            "channels" : (array) list of channels to send via,
            "first_sent" : (string) date and hour of first sent as ISO 8601 date,
            "last_sent" : (string) date and hour of last sent as ISO 8601 date,
            "tags" : (array) tag names associated with the campaign,
            "messages": {
                "message_variation_id": (string) { // <=This is the actual id
                    "channel": (string) channel type of the message (as in, "email", "ios_push", "webhook", "content_card", "in-app_message", "sms"),
                    "name": (string) name of the message in the Dashboard (eg., "Variation 1")
                    ... channel-specific fields for this message, see below ...
                }
            },
            "conversion_behaviors": (array) conversion event behaviors assigned to the campaign (see below)
        }
        ```

        #### Messages

        The `messages` response will contain information about each message. Example message responses for channels are below:

        ##### Push Channels

        ```json
        {
            "channel": (string) description of the channel, such as "ios_push" or "android_push"
            "alert": (string) alert body text,
            "extras": (hash) any key value pairs provided
        }
        ```

        ##### Email Channel

        ```json
        {
            "channel": "email",
            "subject": (string) subject,
            "body": (string) HTML body,
            "from": (string) from address and display name,
            "reply_to": (string) reply-to for message, if different than "from" address,
            "title": (string) name of the email,
            "extras": (hash) any key value pairs provided
        }
        ```

        ##### Content Card Channel

        ```json
        {
            "channel": "content_cards",
            "name": (string) name of variant,
            "extras": (hash) any key value pairs provided; only present if at least one key-value pair has been set
        }
        ```

        ##### Webhook Channel

        ```json
        {
            "channel": "webhook",
            "url": (string) url for webhook,
            "body": (string) payload body,
            "type": (string) body content type,
            "headers": (hash) specified request headers,
            "method": (string) HTTP method (e.g., "POST" or "GET"),
        }
        ```

        ##### SMS Channel

        ```json
        {
          "channel": "sms",
          "body": (string) payload body,
          "from": (string) list of numbers associated with the subscription group,
          "subscription_group_id": (string) API id of the subscription group targeted in the SMS message
        }
        ```

        ##### Control Messages

        ```json
        {
            "channel": (string) description of the channel that the control is for,
            "type": "control"
        }
        ```

        #### Conversion Behaviors

        The `conversion_behaviors` 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. Example conversion event behavior responses for are below:

        ##### Clicks Email

        ```json
        {
            "type": "Clicks Email",
            "window": (integer) number of seconds during which the user can convert on this event, i.e. - 86400, which is 24 hours
        }
        ```

        ##### Opens Email

        ```json
        {
            "type": "Opens Email",
            "window": (integer) number of seconds during which the user can convert on this event, i.e. - 86400, which is 24 hours
        }
        ```

        ##### Makes Purchase (any purchase)

        ```json
        {
            "type": "Makes Any Purchase",
            "window": (integer) number of seconds during which the user can convert on this event, i.e. - 86400, which is 24 hours
        }
        ```

        ##### Makes Purchase (specific product)

        ```json
        {
            "type": "Makes Specific Purchase",
            "window": (integer) number of seconds during which the user can convert on this event, i.e. - 86400, which is 24 hours,
            "product": (string) name of the product, i.e. - "Feline Body Armor"
        }
        ```

        ##### Performs Custom Event

        ```json
        {
            "type": "Performs Custom Event",
            "window": (integer) number of seconds during which the user can convert on this event, i.e. - 86400, which is 24 hours,
            "custom_event_name": (string) name of the event, i.e. - "Used Feline Body Armor"
        }
        ```

        ##### Upgrades App

        ```json
        {
            "type": "Upgrades App",
            "window": (integer) number of seconds during which the user can convert on this event, i.e. - 86400, which is 24 hours,
            "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
        }
        ```

        ##### Uses App

        ```json
        {
            "type": "Starts Session",
            "window": (integer) number of seconds during which the user can convert on this event, i.e. - 86400, which is 24 hours,
            "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
        }
        ```
      operationId: campaignDetails
      parameters:
        - description: |-
            (Required) String

            Campaign API identifier
          in: query
          name: campaign_id
          schema:
            example: "{{campaign_identifier}}"
            type: string
      responses:
        "200":
          description: ""
      summary: Campaign Details
      tags:
        - Export
        - Campaign
  /campaigns/list:
    get:
      description: |-
        This endpoint allows you 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. The campaigns are returned in groups of 100 sorted by time of creation (oldest to newest by default).

        ## Campaign List Endpoint API Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
            "message": (required, string) the status of the export, returns 'success' when completed without errors,
            "campaigns" : [
                {
                    "id" : (string) Campaign API Identifier,
                    "last_edited": (ISO 8601 string) the last edited time for the message 
                    "name" : (string) campaign name,
                    "is_api_campaign" : (boolean) whether the campaign is an API Campaign,
                    "tags" : (array) tag names associated with the campaign
                },
                ...
            ]
        }
        ```
      operationId: campaignList
      parameters:
        - description: |-
            (Optional) Integer

            The page of campaigns to return, defaults to 0 (returns the first set of up to 100)
          in: query
          name: page
          schema:
            example: "0"
            type: string
        - description: |-
            (Optional) Boolean

            Whether or not to include archived campaigns, defaults to false
          in: query
          name: include_archived
          schema:
            example: "false"
            type: string
        - description: |-
            (Optional) String

            Pass in the value `desc` to sort by creation time from newest to oldest. Pass in `asc` to sort from oldest to newest. If sort_direction is not included, the default order is oldest to newest.
          in: query
          name: sort_direction
          schema:
            example: desc
            type: string
        - description: |-
            (Optional) DateTime (ISO 8601 string)

            Filters the results and only returns campaigns that were edited greater than the time provided till now. 
          in: query
          name: last_edit.time[gt]
          schema:
            example: 2020-06-28T23:59:59-5:00
            type: string
      responses:
        "200":
          description: ""
      summary: Campaign List
      tags:
        - Export
        - Campaign
  /canvas/data_series:
    get:
      description: |-
        This endpoint allows you to export time series data for a Canvas.

        ### Components Used
        - [Canvas Identifier](https://www.braze.com/docs/api/identifier_types/)

        ## Response
        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
          "data": {
            "name": (string) Canvas name,
            "stats": [
              {
                "time": (string) date as ISO 8601 date,
                "total_stats": {
                  "revenue": (float),
                  "conversions": (int),
                  "conversions_by_entry_time": (int),
                  "entries": (int)
                },
                "variant_stats": (optional) {
                  "00000000-0000-0000-0000-0000000000000": (API identifier for variant) {
                    "name": (string) name of variant,
                    "revenue": (int),
                    "conversions": (int),
                    "conversions_by_entry_time": (int),
                    "entries": (int)
                  },
                  ... (more variants)
                },
                "step_stats": (optional) {
                  "00000000-0000-0000-0000-0000000000000": (API identifier for step) {
                    "name": (string) name of step,
                    "revenue": (float),
                    "conversions": (int),
                    "conversions_by_entry_time": (int),
                    "messages": {
                      "email": [
                        {
                          "sent": (int),
                          "opens": (int),
                          "unique_opens": (int),
                          "clicks": (int),
                          ... (more stats)
                        }
                      ],
                      ... (more channels)
                    }
                  },
                  ... (more steps)
                }
              },
              ... (more stats by time)
            ]
          },
          "message": (required, string) the status of the export, returns 'success' when completed without errors
        }
        ```
      operationId: canvasDataSeriesAnalytics
      parameters:
        - description: |-
            (Required) String

            Canvas API Identifier
          in: query
          name: canvas_id
          schema:
            example: "{{canvas_id}}"
            type: string
        - description: |-
            (Required) DateTime (ISO 8601 string)

            Date on which the data export should end - defaults to time of the request
          in: query
          name: ending_at
          schema:
            example: 2018-05-30T23:59:59-5:00
            type: string
        - description: |-
            (Optional) DateTime (ISO 8601 string) 

            Date on which the data export should begin (either length or starting_at are required)
          in: query
          name: starting_at
          schema:
            example: 2018-05-28T23:59:59-5:00
            type: string
        - description: |-
            (Optional) DateTime (ISO 8601 string)

            Max number of days before ending_at to include in the returned series - must be between 1 and 14 inclusive (either length or starting_at required)
          in: query
          name: length
          schema:
            example: "10"
            type: string
        - description: |-
            (Optional) Boolean

            Whether or not to include variant stats (defaults to false)
          in: query
          name: include_variant_breakdown
          schema:
            example: "true"
            type: string
        - description: |-
            (Optional) Boolean

            Whether or not to include step stats (defaults to false)
          in: query
          name: include_step_breakdown
          schema:
            example: "true"
            type: string
        - description: |-
            (Optional) Boolean

            Whether or not to include step stats for deleted steps (defaults to false)
          in: query
          name: include_deleted_step_data
          schema:
            example: "true"
            type: string
      responses:
        "200":
          description: ""
      summary: Canvas Data Series Analytics
      tags:
        - Export
        - Canvas
  /canvas/data_summary:
    get:
      description: |-
        This endpoint allows you to export rollups of time series data for a Canvas, providing a concise summary of a Canvas' results.

        ### Components Used
        - [Canvas Identifier](https://www.braze.com/docs/api/identifier_types/)

        ## Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
          "data": {
            "name": (string) Canvas name,
            "total_stats": {
              "revenue": (float),
              "conversions": (int),
              "conversions_by_entry_time": (int),
              "entries": (int)
            },
            "variant_stats": (optional) {
              "00000000-0000-0000-0000-0000000000000": (API identifier for variant) {
                "name": (string) name of variant,
                "revenue": (float),
                "conversions": (int),
                "entries": (int)
              },
              ... (more variants)
            },
            "step_stats": (optional) {
              "00000000-0000-0000-0000-0000000000000": (API identifier for step) {
                "name": (string) name of step,
                "revenue": (float),
                "conversions": (int),
                "conversions_by_entry_time": (int),
                "messages": {
                  "android_push": (name of channel) [
                    {
                      "sent": (int),
                      "opens": (int),
                      "influenced_opens": (int),
                      "bounces": (int)
                      ... (more stats for channel)
                    }
                  ],
                  ... (more channels)
                }
              },
              ... (more steps)
            }
          },
          "message": (required, string) the status of the export, returns 'success' when completed without errors
        }
        ```
      operationId: canvasDataAnalyticsSummary
      parameters:
        - description: |-
            (Required) String 

            Canvas API identifier
          in: query
          name: canvas_id
          schema:
            example: "{{canvas_id}}"
            type: string
        - description: |-
            (Required) DateTime (ISO 8601 string)

            Date on which the data export should end - defaults to time of the request
          in: query
          name: ending_at
          schema:
            example: 2018-05-30T23:59:59-5:00
            type: string
        - description: |-
            (Optional) DateTime (ISO 8601 string)

            Date on which the data export should begin (either length or starting_at required)
          in: query
          name: starting_at
          schema:
            example: 2018-05-28T23:59:59-5:00
            type: string
        - description: |-
            (Optional) Integer

            Max number of days before ending_at to include in the returned series - must be between 1 and 14 inclusive (either length or starting_at required)
          in: query
          name: length
          schema:
            example: "5"
            type: string
        - description: |-
            (Optional) Boolean

            Whether or not to include variant stats (defaults to false)
          in: query
          name: include_variant_breakdown
          schema:
            example: "true"
            type: string
        - description: |-
            (Optional) Boolean

            Whether or not to include step stats (defaults to false)
          in: query
          name: include_step_breakdown
          schema:
            example: "true"
            type: string
        - description: |-
            (Optional) Boolean

            Whether or not to include step stats for deleted steps (defaults to false)
          in: query
          name: include_deleted_step_data
          schema:
            example: "true"
            type: string
      responses:
        "200":
          description: ""
      summary: Canvas Data Analytics Summary
      tags:
        - Export
        - Canvas
  /canvas/details:
    get:
      description: |-
        This endpoint allows you to export metadata about a Canvas, such as its name, when it was created, its current status, and more.

        ### Components Used
        - [Canvas Identifier](https://www.braze.com/docs/api/identifier_types/)

        ## Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
          "created_at": (string) date created as ISO 8601 date,
          "updated_at": (string) date updated as ISO 8601 date,
          "name": (string) Canvas name,
          "description": (string) Canvas description,
          "archived": (boolean) whether this Canvas is archived,
          "draft": (boolean) whether this Canvas is a draft,
          "schedule_type": (string) type of scheduling action,
          "first_entry": (string) date of first entry as ISO 8601 date,
          "last_entry": (string) date of last entry as ISO 8601 date,
          "channels": (array of strings) step channels used with Canvas,
          "variants": [
            {
              "name": (string) name of variant,
              "id": (string) API identifier of the variant,
              "first_step_ids": (array of strings) API identifiers for first steps in variant,
              "first_step_id": (string) API identifier of first step in variant (deprecated in November 2017, only included if the variant has only one first step)
            },
            ... (more variations)
          ],
          "tags": (array of strings) tag names associated with the Canvas,
          "steps": [
            {
              "name": (string) name of step,
              "id": (string) API identifier of the step,
              "next_step_ids": (array of strings) API identifiers of steps following step,
              "channels": (array of strings) channels used in step,
              "messages": {
                  "message_variation_id": (string) {  // <=This is the actual id
                      "channel": (string) channel type of the message (eg., "email"),
                      ... channel-specific fields for this message, see Campaign Details Endpoint API Response for example message responses ...
                  }
              }
            },
            ... (more steps)
          ],
          "message": (required, string) the status of the export, returns 'success' when completed without errors
        }
        ```
      operationId: canvasDetails
      parameters:
        - description: |-
            (Required) String

            Canvas API Identifier 
          in: query
          name: canvas_id
          schema:
            example: "{{canvas_identifier}}"
            type: string
      responses:
        "200":
          description: ""
      summary: Canvas Details
      tags:
        - Export
        - Canvas
  /canvas/list:
    get:
      description: |-
        This endpoint allows you to export a list of Canvases, including the name, Canvas API Identifier and associated Tags. The Canvases are returned in groups of 100 sorted by time of creation (oldest to newest by default).

        > Archived Canvases will not be included in the API response unless the `include_archived` field is specified. Canvases that are stopped but not archived, however, will be returned by default.


        ## Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
          "canvases" : [
          	{
          		"id" : (string) Canvas API Identifier,
          		"last_edited": (ISO 8601 string) the last edited time for the message,
          		"name" : (string) Canvas name,
          		"tags" : (array) tag names associated with the Canvas,
          	},
            ... (more Canvases)
          ],
          "message": (required, string) the status of the export, returns 'success' when completed without errors
        }
        ```
      operationId: canvasList
      parameters:
        - description: |-
            (Optional) Integer

            The page of Canvases to return, defaults to `0` (returns the first set of up to 100)
          in: query
          name: page
          schema:
            example: "1"
            type: string
        - description: |-
            (Optional) Boolean

            Whether or not to include archived Canvases, defaults to `false`.
          in: query
          name: include_archived
          schema:
            example: "false"
            type: string
        - description: |-
            (Optional) String

            Pass in the value `desc` to sort by creation time from newest to oldest. Pass in `asc` to sort from oldest to newest. If sort_direction is not included, the default order is oldest to newest.
          in: query
          name: sort_direction
          schema:
            example: desc
            type: string
        - description: |-
            (Optional) DateTime (ISO 8601 string)

            Filters the results and only returns Canvases that were edited greater than the time provided till now.
          in: query
          name: last_edit.time[gt]
          schema:
            example: 2020-06-28T23:59:59-5:00
            type: string
      responses:
        "200":
          description: ""
      summary: Canvas List
      tags:
        - Export
        - Canvas
  /canvas/trigger/schedule/create:
    post:
      description: |-
        Use this endpoint to trigger API Triggered Canvases, which are created on the Dashboard and initiated via the API. You can pass in `canvas_entry_properties` that will be templated into the messages sent by the first steps of the Canvas.

        This endpoint allows you to schedule Canvas messages (up to 90 days in advance) via API Triggered delivery, allowing you to decide what action should trigger the message to be sent. Please note that to send messages with this endpoint, you must have a Canvas ID, created when you build a Canvas.

        ### Request Parameters

        | Parameter | Required | Data Type | Description |
        | --------- | ---------| --------- | ----------- |
        |`canvas_id`|Required|String| See canvas identifier|
        |`send_id` | Optional | String | See send identifier |
        |`recipients` | Optional | Array of recipient objects | See recipients object |
        |`audience` | Optional | Connected audience object | See connected audience |
        |`broadcast` | Optional | Boolean | See broadcast -- defaults to false on 8/31/17, must be set to true if "recipients" object is omitted |
        | `trigger_properties` | Optional | Object | Personalization key value pairs for all users in this send; see trigger properties |
        | `schedule` | Required | Schedule object | See schedule object |

        ## Request Components
        - [Canvas Identifier](https://www.braze.com/docs/api/identifier_types/)
        - [Recipients](https://www.braze.com/docs/api/objects_filters/recipient_object/)
        - [Connected Audience](https://www.braze.com/docs/api/objects_filters/connected_audience/)
        - [Broadcast](https://www.braze.com/docs/api/parameters/#broadcast)
        - [Trigger Properties](https://www.braze.com/docs/api/objects_filters/trigger_properties_object/)
        - [Schedule Object](https://www.braze.com/docs/api/objects_filters/schedule_object/)
      operationId: scheduleApiTriggeredCanvases
      parameters: []
      requestBody:
        content:
          application/json:
            example:
              audience:
                AND:
                  - custom_attribute:
                      comparison: equals
                      custom_attribute_name: eye_color
                      value: blue
                  - custom_attribute:
                      comparison: includes_value
                      custom_attribute_name: favorite_foods
                      value: pizza
                  - OR:
                      - custom_attribute:
                          comparison: less_than_x_days_ago
                          custom_attribute_name: last_purchase_time
                          value: 2
                      - push_subscription_status:
                          comparison: is
                          value: opted_in
                  - email_subscription_status:
                      comparison: is_not
                      value: subscribed
                  - last_used_app:
                      comparison: after
                      value: 2019-07-22T13:17:55+0000
              broadcast: false
              canvas_entry_properties: {}
              canvas_id: canvas_identifier
              recipients:
                - canvas_entry_properties: {}
                  external_user_id: external_user_identifier
                  trigger_properties: ""
                  user_alias: example_alias
              schedule:
                at_optimal_time: false
                in_local_time: false
                time: ""
            schema:
              properties:
                audience:
                  properties:
                    AND:
                      items:
                        properties:
                          custom_attribute:
                            properties:
                              comparison:
                                example: equals
                                type: string
                              custom_attribute_name:
                                example: eye_color
                                type: string
                              value:
                                example: blue
                                type: string
                            type: object
                        type: object
                      type: array
                  type: object
                broadcast:
                  example: false
                  type: boolean
                canvas_entry_properties:
                  properties: {}
                  type: object
                canvas_id:
                  example: canvas_identifier
                  type: string
                recipients:
                  items:
                    properties:
                      canvas_entry_properties:
                        properties: {}
                        type: object
                      external_user_id:
                        example: external_user_identifier
                        type: string
                      trigger_properties:
                        example: ""
                        type: string
                      user_alias:
                        example: example_alias
                        type: string
                    type: object
                  type: array
                schedule:
                  properties:
                    at_optimal_time:
                      example: false
                      type: boolean
                    in_local_time:
                      example: false
                      type: boolean
                    time:
                      example: ""
                      type: string
                  type: object
              type: object
      responses:
        "200":
          description: ""
      summary: Schedule API Triggered Canvases
      tags:
        - Messaging
        - Schedule Mesages
  /content_blocks/info:
    get:
      description: |-
        This endpoint will call information for an existing Content Block.

        ### Successful Response Properties
        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR_REST_API_KEY
        {
          "content_block_id": "string",
          "name": "string",
          "content": "string",
          "description": "string",
          "content_type": "html or text",
          "tags":  "array of strings",
          "created_at": "time-in-iso",
          "last_edited": "time-in-iso",
          "inclusion_count" : "integer",
          "message": "success"
        }
        ```

        ### Possible Errors
        - `Content Block ID cannot be blank.` - A Content Block has not been listed or is not encapsulated in quotes.

        - `Content Block ID is invalid for this App Group.` - This Content Block does not exist or is in a different company account or app group.

        - `Content Block has been deleted - content not available.` - This Content Block, though it may have existed earlier, has been deleted.

        - `Include Inclusion Data - error` - One of true or false is not provided.
      operationId: seeContentBlockInformation
      parameters:
        - description: |-
            (Required) String

            The Content Block ID. This can be found by either listing Content Block information or going to the Developer Console, then API Settings, then scrolling to the bottom and searching for your Content Block API Identifier.
          in: query
          name: content_block_id
          schema:
            example: "{{content_block_id}}"
            type: string
        - description: |-
            (Optional) Boolean

            When set to ‘true’, the API returns back the Message Variation API ID 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.
          in: query
          name: include_inclusion_data
          schema:
            example: No
            type: string
      responses:
        "200":
          description: ""
      summary: See Content Block Information
      tags:
        - Templates
        - Content Blocks
  /content_blocks/list:
    get:
      description: |-
        This endpoint will list existing Content Block information.

        ### Successful Response Properties
        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR_REST_API_KEY
        {
          "count": "integer",
          "content_blocks": [
            {
              "content_block_id": "string",
              "name": "string",
              "content_type": "html or text",
              "liquid_tag": "string",
              "inclusion_count" : "integer",
              "created_at": "time-in-iso",
              "last_edited": "time-in-iso",
              "tags" : "array of strings"
            }
          ]
        }
        ```

        ### Possible Errors
        - `Modified after time is invalid.`
        The date you have provided is not a valid or parsable date. Please reformat this value as a string in ISO 8601 format (`yyyy-mm-ddThh:mm:ss.ffffff`).

        - `Modified before time is invalid.`
        The date you have provided is not a valid or parsable date. Please reformat this value as a string in ISO 8601 format (`yyyy-mm-ddThh:mm:ss.ffffff`).

        - `Modified after time must be earlier than or the same as modified before time.`

        - `Content Block number limit is invalid.`
        The `limit` parameter must be an integer (positive number) greater than 0.

        - `Content Block number limit must be greater than 0.`
        The `limit` parameter must be an integer (positive number) greater than 0.

        - `Content Block number limit exceeds maximum of 1000.`
        The `limit` parameter must be an integer (positive number) greater than 0.

        - `Offset is invalid.`
        The `offset` parameter must be an integer (positive number) greater than 0.

        - `Offset must be greater than 0.`
        The `offset` parameter must be an integer (positive number) greater than 0.
      operationId: listAvailableContentBlocks
      parameters:
        - description: |-
            (Optional) String in ISO 8601

            Retrieve only content blocks updated at or after the given time.
          in: query
          name: modified_after
          schema:
            example: 2020-01-01T01:01:01.000000
            type: string
        - description: |-
            (Optional) String in ISO 8601

            Retrieve only content blocks updated at or before the given time.
          in: query
          name: modified_before
          schema:
            example: 2020-02-01T01:01:01.000000
            type: string
        - description: |-
            (Optional) Positive Number

            Maximum number of content blocks to retrieve, default to 100 if not provided, maximum acceptable value is 1000.
          in: query
          name: limit
          schema:
            example: "100"
            type: string
        - description: |-
            (Optional) Positive Number

            Number of content blocks to skip before returning rest of the templates that fit the search criteria.
          in: query
          name: offset
          schema:
            example: "1"
            type: string
      responses:
        "200":
          description: ""
      summary: List Available Content Blocks
      tags:
        - Templates
        - Content Blocks
  /email/hard_bounces:
    get:
      description: |-
        This endpoint allows you to pull a list of email addresses that have “hard bounced” your email messages within a certain time frame.

        > You must provide an `end_date`, as well as either an `email` or a `start_date`.<br><br>If your date range has more than `limit` number of hard bounces, you will need to make multiple API calls, each time increasing the `offset` until a call returns either fewer than `limit` or zero results.

        ## Response

        Entries are listed in descending order.

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
          "emails": [
            {
              "email": "example1@braze.com",
              "hard_bounced_at": "2016-08-25 15:24:32 +0000"
            },
            {
              "email": "example2@braze.com",
              "hard_bounced_at": "2016-08-24 17:41:58 +0000"
            },
            {
              "email": "example3@braze.com",
              "hard_bounced_at": "2016-08-24 12:01:13 +0000"
            }
          ],
          "message": "success"
        }
        ```
      operationId: queryHardBouncedEmails
      parameters:
        - description: |
            (Optional*) String in YYYY-MM-DD format 

            Start date of the range to retrieve hard bounces, must be earlier than `end_date`. This is treated as midnight in UTC time by the API.

            *You must provide either an `email` or a `start_date`, and an `end_date`.
          in: query
          name: start_date
          schema:
            example: 2019-01-01
            type: string
        - description: |-
            (Optional*) String in YYYY-MM-DD format

            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.

            *You must provide either an `email` or a `start_date`, and an `end_date`.
          in: query
          name: end_date
          schema:
            example: 2019-02-01
            type: string
        - description: |-
            (Optional) Integer

            Optional field to limit the number of results returned. Defaults to 100, maximum is 500.
          in: query
          name: limit
          schema:
            example: "100"
            type: string
        - description: |-
            (Optional) Integer

            Optional beginning point in the list to retrieve from.
          in: query
          name: offset
          schema:
            example: "1"
            type: string
        - description: |-
            (Optional*) String

            If provided, we will return whether or not the user has hard bounced.

            *You must provide either an `email` or a `start_date`, and an `end_date`.
          in: query
          name: email
          schema:
            example: example@braze.com
            type: string
      responses:
        "200":
          description: ""
      summary: Query Hard Bounced Emails
      tags:
        - Email Lists & Addresses
  /email/unsubscribes:
    get:
      description: |-
        Use the /email/unsubscribes endpoint to return emails that have unsubscribed during the time period from `start_date` to `end_date`. You can use this endpoint to set up a bi-directional sync between Braze and other email systems or your own database.

        > You must provide either an email or a start_date and an end_date. <br><br>If your date range has more than `limit` number of unsubscribes, you will need to make multiple API calls, each time increasing the `offset` until a call returns either fewer than `limit` or zero results.
      operationId: queryListOfUnsubscribedEmailAddresses
      parameters:
        - description: |-
            (Optional*) String in YYYY-MM-DD format

            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.
          in: query
          name: start_date
          schema:
            example: 2020-01-01
            type: string
        - description: |-
            (Optional*)  String in YYYY-MM-DD format

            End date of the range to retrieve unsubscribes. This is treated as midnight in UTC time by the API.
          in: query
          name: end_date
          schema:
            example: 2020-02-01
            type: string
        - description: |-
            (Optional) Integer

            Optional field to limit the number of results returned. Limit must be greater than 1. Defaults to 100, maximum is 500.
          in: query
          name: limit
          schema:
            example: "1"
            type: string
        - description: |-
            (Optional) Integer 

            Optional beginning point in the list to retrieve from
          in: query
          name: offset
          schema:
            example: "1"
            type: string
        - description: |-
            (Optional) String

            Pass in the value `asc` to sort unsubscribes from oldest to newest. Pass in `desc` to sort from newest to oldest. If sort_direction is not included, the default order is newest to oldest.
          in: query
          name: sort_direction
          schema:
            example: desc
            type: string
        - description: |-
            (Optional*) String

            If provided, we will return whether or not the user has unsubscribed
          in: query
          name: email
          schema:
            example: example@braze.com
            type: string
      responses:
        "200":
          description: ""
      summary: Query List of Unsubscribed Email Addresses
      tags:
        - Email Lists & Addresses
  /events/data_series:
    get:
      description: |-
        This endpoint allows you to retrieve a series of the number of occurrences of a custom event in your app over a designated time period.

        ### Components Used
        -[Segment Identifier](https://www.braze.com/docs/api/identifier_types/)


        ## Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
            "message": (required, string) the status of the export, returns 'success' when completed without errors,
            "data" : [
                {
                    "time" : (string) point in time - as ISO 8601 extended when unit is "hour" and as ISO 8601 date when unit is "day",
                    "count" : (int)
                },
                ...
            ]
        }
        ```

        ### Fatal Error Response Codes
        The following status codes and associated error messages will be returned if your request encounters a fatal error. Any of these error codes indicate that no data will be processed.

        | Error Code       | Reason / Cause                                                   |
        | ---------------- | ---------------------------------------------------------------- |
        | 400 Bad Request  | Bad Syntax                                                       |
        | 401 Unauthorized | Unknown or missing REST API Key                                  |
        | 429 Rate Limited | Over rate limit                                                  |
        | 5XX              | Internal server error, you should retry with exponential backoff |
      operationId: customEventsAnalytics
      parameters:
        - description: |-
            (Required) String

            The name of the custom event for which to return analytics 
          in: query
          name: event
          schema:
            example: event_name
            type: string
        - description: |-
            (Required) Integer

            Max number of units (days or hours) before ending_at to include in the returned series - must be between 1 and 100 inclusive
          in: query
          name: length
          schema:
            example: "24"
            type: string
        - description: |-
            (Optional) String

            Unit of time between data points - can be "day" or "hour" (defaults to "day")
          in: query
          name: unit
          schema:
            example: hour
            type: string
        - description: |-
            (Optional) DateTime (ISO 8601 string)

            Point in time when the data series should end - defaults to time of the request
          in: query
          name: ending_at
          schema:
            example: 2014-12-10T23:59:59-05:00
            type: string
        - description: |-
            (Optional) String

            App API identifier retrieved from the Developer Console to limit analytics to a specific app
          in: query
          name: app_id
          schema:
            example: "{{app_identifier}}"
            type: string
        - description: |-
            (Optional) String

            Segment API identifier indicating the analytics enabled segment for which event analytics should be returned
          in: query
          name: segment_id
          schema:
            example: "{{segment_identifier}}"
            type: string
      responses:
        "200":
          description: ""
      summary: Custom Events Analytics
      tags:
        - Export
        - Custom Events
  /events/list:
    get:
      description: |-
        This endpoint allows you 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.


        ## Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
            "message": (required, string) the status of the export, returns 'success' when completed without errors,
            "events" : [
                "Event A",
                "Event B",
                "Event C",
                ...
            ]
        }
        ```

        ### Fatal Error Response Codes

        The following status codes and associated error messages will be returned if your request encounters a fatal error. Any of these error codes indicate that no data will be processed.

        | Error Code       | Reason / Cause                                                   |
        | ---------------- | ---------------------------------------------------------------- |
        | 400 Bad Request  | Bad Syntax                                                       |
        | 401 Unauthorized | Unknown or missing REST API Key                                  |
        | 429 Rate Limited | Over rate limit                                                  |
        | 5XX              | Internal server error, you should retry with exponential backoff |
      operationId: customEventsList
      parameters:
        - description: |-
            (Optional) Integer

            The page of event names to return, defaults to 0 (returns the first set of up to 250)
          in: query
          name: page
          schema:
            example: "3"
            type: string
      responses:
        "200":
          description: ""
      summary: Custom Events List
      tags:
        - Export
        - Custom Events
  /feed/data_series:
    get:
      description: |-
        This endpoint allows you to retrieve a daily series of engagement stats for a card over time.

        ### Components Used
        - [Card ID](https://www.braze.com/docs/api/identifier_types/)
        - [News Feed List](https://www.braze.com/docs/api/endpoints/export/news_feed/get_news_feed_cards/)

        ## Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
            "message": (required, string) the status of the export, returns 'success' when completed without errors,
            "data" : [
                {
                    "time" : (string) point in time - as ISO 8601 extended when unit is "hour" and as ISO 8601 date when unit is "day",
                    "clicks" : (int) ,
                    "impressions" : (int),
                    "unique_clicks" : (int),
                    "unique_impressions" : (int)
                },
                ...
            ]
        }
        ```
      operationId: newsFeedCardAnalytics
      parameters:
        - description: |-
            (Required) String

            Card API identifier
          in: query
          name: card_id
          schema:
            example: "{{card_identifier}}"
            type: string
        - description: |-
            (Required) Integer

            Max number of units (days or hours) before ending_at to include in the returned series - must be between 1 and 100 inclusive
          in: query
          name: length
          schema:
            example: "14"
            type: string
        - description: |-
            (Optional) String

            Unit of time between data points - can be "day" or "hour" (defaults to "day")
          in: query
          name: unit
          schema:
            example: day
            type: string
        - description: |-
            (Optional) DateTime (ISO 8601 string)

            Date on which the data series should end - defaults to time of the request
          in: query
          name: ending_at
          schema:
            example: 2018-06-28T23:59:59-5:00
            type: string
      responses:
        "200":
          description: ""
      summary: News Feed Card Analytics
      tags:
        - Export
        - News Feed
  /feed/details:
    get:
      description: |-
        This endpoint allows you to retrieve relevant information on the card, which can be identified by the `card_id`.

        ### Components Used
        - [Card ID](https://www.braze.com/docs/api/identifier_types/)
        - [News Feed List](https://www.braze.com/docs/api/endpoints/export/news_feed/get_news_feed_cards/)


        ## Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
            "message": (required, string) The status of the export, returns 'success' when completed without errors,
            "created_at" : (string) Date created as ISO 8601 date,
            "updated_at" : (string) Date last updated as ISO 8601 date,
            "name" : (string) Card name,
            "publish_at" : (string) Date card was published as ISO 8601 date,
            "end_at" : (string) Date card will stop displaying for users as ISO 8601 date,
            "tags" : (array) Tag names associated with the card,
            "title" : (string) Title of the card,
            "image_url" : (string) Image URL used by this card,
            "extras" : (dictionary) Dictionary containing key-value pair data attached to this card,
            "description" : (string) Description text used by this card,
            "archived": (boolean) whether this Card is archived,
            "draft": (boolean) whether this Card is a draft,
        }
        ```
      operationId: newsFeedCardsDetails
      parameters:
        - description: |-
            (Required) String

            Card API identifier 
          in: query
          name: card_id
          schema:
            example: "{{card_identifier}}"
            type: string
      responses:
        "200":
          description: ""
      summary: News Feed Cards Details
      tags:
        - Export
        - News Feed
  /feed/list:
    get:
      description: |-
        This endpoint allows you to export a list of News Feed cards, each of which will include its name and Card API Identifier. The cards are returned in groups of 100 sorted by time of creation (oldest to newest by default).


        ## Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
            "message": (required, string) the status of the export, returns 'success' when completed without errors,
            "cards" : [
                {
                    "id" : (string) Card API Identifier,
                    "type" : (string) type of the card - NewsItem (classic cards), CaptionedImage, Banner or DevPick (cross-promotional cards),
                    "title" : (string) title of the card,
                    "tags" : (array) tag names associated with the card
                },
                ...
            ]
        }
        ```
      operationId: newsFeedCardsList
      parameters:
        - description: |-
            (Optional) Integer

            The page of cards to return, defaults to 0 (returns the first set of up to 100)
          in: query
          name: page
          schema:
            example: "1"
            type: string
        - description: |-
            (Optional) Boolean

            Whether or not to include archived cards, defaults to false
          in: query
          name: include_archived
          schema:
            example: "true"
            type: string
        - description: |-
            (Optional) String

            Pass in the value `desc` to sort by creation time from newest to oldest. Pass in `asc` to sort from oldest to newest. If sort_direction is not included, the default order is oldest to newest.
          in: query
          name: sort_direction
          schema:
            example: desc
            type: string
      responses:
        "200":
          description: ""
      summary: News Feed Cards List
      tags:
        - Export
        - News Feed
  /kpi/dau/data_series:
    get:
      description: |-
        This endpoint allows you to retrieve a daily series of the total number of unique active users on each date.


        ## Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
            "message": (required, string) the status of the export, returns 'success' when completed without errors,
            "data" : [
                {
                    "time" : (string) date as ISO 8601 date,
                    "dau" : (int)
                },
                ...
            ]
        }
        ```
      operationId: dailyActiveUsersByDate
      parameters:
        - description: |-
            (Required) Integer

            Max number of days before ending_at to include in the returned series - must be between 1 and 100 inclusive
          in: query
          name: length
          schema:
            example: "10"
            type: string
        - description: |-
            (Optional) DateTime (ISO 8601 string)

            Point in time when the data series should end - defaults to time of the request
          in: query
          name: ending_at
          schema:
            example: 2018-06-28T23:59:59-5:00
            type: string
        - description: |-
            (Optional) String

            App API identifier; if excluded, results for all apps in app group will be returned
          in: query
          name: app_id
          schema:
            example: "{{app_identifier}}"
            type: string
      responses:
        "200":
          description: ""
      summary: Daily Active Users by Date
      tags:
        - Export
        - KPI
  /kpi/mau/data_series:
    get:
      description: |-
        This endpoint allows you to retrieve a daily series of the total number of unique active users over a 30-day rolling window.

        ## Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
            "message": (required, string) the status of the export, returns 'success' when completed without errors,
            "data" : [
                {
                    "time" : (string) date as ISO 8601 date,
                    "mau" : (int)
                },
                ...
            ]
        }
        ```
      operationId: monthlyActiveUsersForLast30Days
      parameters:
        - description: |-
            (Required) Integer

            Max number of days before ending_at to include in the returned series - must be between 1 and 100 inclusive
          in: query
          name: length
          schema:
            example: "7"
            type: string
        - description: |-
            (Optional) DateTime (ISO 8601 string)

            Point in time when the data series should end - defaults to time of the request
          in: query
          name: ending_at
          schema:
            example: 2018-06-28T23:59:59-05:00
            type: string
        - description: |-
            (Optional) String

            App API identifier; if excluded, results for all apps in app group will be returned
          in: query
          name: app_id
          schema:
            example: "{{app_identifier}}"
            type: string
      responses:
        "200":
          description: ""
      summary: Monthly Active Users for Last 30 Days
      tags:
        - Export
        - KPI
  /kpi/new_users/data_series:
    get:
      description: |-
        This endpoint allows you to retrieve a daily series of the total number of new users on each date.


        ## Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
            "message": (required, string) the status of the export, returns 'success' when completed without errors,
            "data" : [
                {
                    "time" : (string) date as ISO 8601 date,
                    "new_users" : (int)
                },
                ...
            ]
        }
        ```
      operationId: dailyNewUsersByDate
      parameters:
        - description: |-
            (Required) Integer

            Max number of days before ending_at to include in the returned series - must be between 1 and 100 inclusive
          in: query
          name: length
          schema:
            example: "14"
            type: string
        - description: |-
            (Optional) DateTime (ISO 8601 string)

            Point in time when the data series should end - defaults to time of the request
          in: query
          name: ending_at
          schema:
            example: 2018-06-28T23:59:59-5:00
            type: string
        - description: |-
            (Optional) String

            App API identifier; if excluded, results for all apps in app group will be returned
          in: query
          name: app_id
          schema:
            example: "{{app_identifier}}"
            type: string
      responses:
        "200":
          description: ""
      summary: Daily New Users by Date
      tags:
        - Export
        - KPI
  /kpi/uninstalls/data_series:
    get:
      description: |-
        This endpoint allows you to retrieve a daily series of the total number of uninstalls on each date.

        ## Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
            "message": (required, string) the status of the export, returns 'success' when completed without errors,
            "data" : [
                {
                    "time" : (string) date as ISO 8601 date,
                    "uninstalls" : (int)
                },
                ...
            ]
        }
        ```
      operationId: kpIsForDailyAppUninstallsByDate
      parameters:
        - description: |-
            (Required) Integer

            Max number of days before ending_at to include in the returned series - must be between 1 and 100 inclusive
          in: query
          name: length
          schema:
            example: "14"
            type: string
        - description: |-
            (Optional) DateTime (ISO 8601 string)

            Point in time when the data series should end - defaults to time of the request
          in: query
          name: ending_at
          schema:
            example: 2018-06-28T23:59:59-5:00
            type: string
        - description: |-
            (Optional) String

            App API identifier; if excluded, results for all apps in app group will be returned
          in: query
          name: app_id
          schema:
            example: "{{app_identifier}}"
            type: string
      responses:
        "200":
          description: ""
      summary: KPIs for Daily App Uninstalls by Date
      tags:
        - Export
        - KPI
  /messages/scheduled_broadcasts:
    get:
      description: |-
        You can view a JSON list of upcoming and scheduled Campaigns and Canvases using the following information and parameters. The endpoint will return information about scheduled Campaigns and entry Canvases between now and the designated end_time (ISO 8601 format) specified in the request. Daily, recurring messages will only appear once with their next occurrence. Results returned in this endpoint are only for Campaigns and Canvases created and scheduled in Braze.

        ## Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
            "scheduled_broadcasts": [
              # Example Canvas
              {
                "name" => String,
                "id" => String,
                "type" => "Canvas",
                "tags" => [String tag names],
                "next_send_time" => "YYYY-MM-DD HH:mm:ss" (may also include time zone if not local/intelligent delivery)
                "schedule_type" => one of "local_time_zones", "intelligent_delivery", or the name of your company's time zone
              },
              # Example Campaign
              {
                "name" => String,
                "id" => String,
                "type" => "Campaign",
                "tags" => [String tag names],
                "next_send_time" => "YYYY-MM-DD HH:mm:ss" (may also include time zone if not local/intelligent delivery)
                "schedule_type" => one of "local_time_zones", "intelligent_delivery", or the name of your company's time zone
              },
            ]
        }
        ```
      operationId: getUpcomingScheduledCampaignsAndCanvases
      parameters:
        - description: |-
            (Required) String in ISO 8601 format

            End date of the range to retrieve upcoming scheduled Campaigns and Canvases. This is treated as midnight in UTC time by the API.
          in: query
          name: end_time
          schema:
            example: 2018-09-01T00:00:00-04:00
            type: string
      responses:
        "200":
          description: ""
      summary: Get Upcoming Scheduled Campaigns and Canvases
      tags:
        - Messaging
        - Schedule Mesages
  /segments/data_series:
    get:
      description: |-
        This endpoint allows you to retrieve a daily series of the size of a segment over time for a segment.

        ### Request Components
        - [Segment Identifier](https://www.braze.com/docs/api/identifier_types/)

        ## Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
            "message": (required, string) the status of the export, returns 'success' when completed without errors,
            "data" : [
                {
                    "time" : (string) date as ISO 8601 date,
                    "size" : (int) size of the segment on that date
                },
                ...
            ]
        }
        ```
      operationId: segmentAnalytics
      parameters:
        - description: |-
            (Required) String

            Segment API identifier.
          in: query
          name: segment_id
          schema:
            example: "{{segment_identifier}}"
            type: string
        - description: |-
            (Required) Integer

            Max number of days before `ending_at` to include in the returned series - must be between 1 and 100 inclusive.
          in: query
          name: length
          schema:
            example: "14"
            type: string
        - description: |-
            (Optional) DateTime (ISO 8601 string)

            Point in time when the data series should end - defaults to time of the request.
          in: query
          name: ending_at
          schema:
            example: 2018-06-27T23:59:59-5:00
            type: string
      responses:
        "200":
          description: ""
      summary: Segment Analytics
      tags:
        - Export
        - Segment
  /segments/details:
    get:
      description: |-
        This endpoint allows you to retrieve relevant information on the segment, which can be identified by the `segment_id`.

        ### Request Components
        - [Segment Identifier](https://www.braze.com/docs/api/identifier_types/)

        ## Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
              "message": (required, string) the status of the export, returns 'success' when completed without errors,
              "created_at" : (string) date created as ISO 8601 date,
              "updated_at" : (string) date last updated as ISO 8601 date,
              "name" : (string) segment name,
              "description" : (string) human-readable description of filters,
              "text_description" : (string) segment description, 
              "tags" : (array) tag names associated with the segment
        }
        ```
      operationId: segmentDetails
      parameters:
        - description: |-
            (Required) String

            Segment API identifier
          in: query
          name: segment_id
          schema:
            example: "{{segment_identifier}}"
            type: string
      responses:
        "200":
          description: ""
      summary: Segment Details
      tags:
        - Export
        - Segment
  /segments/list:
    get:
      description: |-
        This endpoint allows you to export a list of segments, each of which will include its name, Segment API Identifier, and whether it has analytics tracking enabled. The segments are returned in groups of 100 sorted by time of creation (oldest to newest by default). Archived segments are not included.

        ### Request Components
        - [Segment Identifier](https://www.braze.com/docs/api/identifier_types/)


        ## Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
            "message": (required, string) the status of the export, returns 'success' when completed without errors,
            "segments" : [
                {
                    "id" : (string) Segment API Identifier,
                    "name" : (string) segment name,
                    "analytics_tracking_enabled" : (boolean) whether the segment has analytics tracking enabled,
                    "tags" : (array) tag names associated with the segment
                },
                ...
            ]
        }
        ```
      operationId: segmentList
      parameters:
        - description: |-
            (Optional) Integer

            The page of segments to return, defaults to 0 (returns the first set of up to 100)
          in: query
          name: page
          schema:
            example: "1"
            type: string
        - description: |-
            (Optional) String

            Pass in the value `desc` to sort by creation time from newest to oldest. Pass in `asc` to sort from oldest to newest. If `sort_direction` is not included, the default order is oldest to newest.
          in: query
          name: sort_direction
          schema:
            example: desc
            type: string
      responses:
        "200":
          description: ""
      summary: Segment List
      tags:
        - Export
        - Segment
  /sends/data_series:
    get:
      description: |-
        This endpoint allows you to retrieve a daily series of various stats for a tracked `send_id`. Braze stores send analytics for 14 days after the send.

        Campaign conversions will be attributed towards the most recent send id that a given user has received from the campaign.

        > The `send_id` is only generated for API campaign sends targeting segments, connected audiences or broadcasts. When relevant, the `send_id` is included in response for the `messages/send`, `messages/schedule`, `campaign/trigger/send` and `campaign/trigger/schedule` endpoints.

        ### Components Used
        - [Campaign Identifier](https://www.braze.com/docs/api/identifier_types/)

        ### Send Analytics Endpoint API Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
                    "variation_name": (string) variation name,
                    "sent": (int) the number of sends,
                    "delivered": (int) the number of messages successfully delivered,
                    "undelivered": (int) the number of undelivered,
                    "delivery_failed": (int) the number of rejected,
                    "direct_opens": (int) the number of direct opens,
                    "total_opens": (int) the number of total opens,
                    "bounces": (int) the number of bounces,
                    "body_clicks": (int) the number of body clicks,
                    "revenue": (float) the number of dollars of revenue (USD),
                    "unique_recipients": (int) the number of unique recipients,
                    "conversions": (int) the number of conversions,
                    "conversions_by_send_time": (int) the number of conversions,
                    "conversions1": (int, optional) the number of conversions for the second conversion event,
                    "conversions1_by_send_time": (int, optional) the number of conversions for the second conversion event by send time,
                    "conversions2": (int, optional) the number of conversions for the third conversion event,
                    "conversions2_by_send_time": (int, optional) the number of conversions for the third conversion event by send time,
                    "conversions3": (int, optional) the number of conversions for the fourth conversion event,
                    "conversions3_by_send_time": (int, optional) the number of conversions for the fourth conversion event by send time
                  }
                ]
              },
              "conversions_by_send_time": 0,
              "conversions1_by_send_time": 0,
              "conversions2_by_send_time": 0,
              "conversions3_by_send_time": 0,
              "conversions": 0,
              "conversions1": 0,
              "conversions2": 0,
              "conversions3": 0,
              "unique_recipients": 1,
              "revenue": 0
            }
          ],
          "message": "success"
        }
        ```
      operationId: sendAnalytics
      parameters:
        - description: |-
            (Required) String

            Campaign API identifier.
          in: query
          name: campaign_id
          schema:
            example: "{{campaign_identifier}}"
            type: string
        - description: |-
            (Required) String

            Send API identifier.
          in: query
          name: send_id
          schema:
            example: "{{send_identifier}}"
            type: string
        - description: |-
            (Required) Integer

            Maximum number of days before `ending_at` to include in the returned series. Must be between 1 and 100 inclusive.
          in: query
          name: length
          schema:
            example: "30"
            type: string
        - description: |-
            (Optional) Datetime ISO 8601 string

            Date on which the data series should end. Defaults to time of the request.
          in: query
          name: ending_at
          schema:
            example: 2014-12-10T23:59:59-05:00
            type: string
      responses:
        "200":
          description: ""
      summary: Send Analytics
      tags:
        - Export
        - Campaign
  /sessions/data_series:
    get:
      description: |-
        This endpoint allows you to retrieve a series of the number of sessions for your app over a designated time period.

        ### Components Used
        - [Segment Identifier](https://www.braze.com/docs/api/identifier_types/)

        ## Response

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
            "message": (required, string) the status of the export, returns 'success' when completed without errors,
            "data" : [
                {
                    "time" : (string) point in time - as ISO 8601 extended when unit is "hour" and as ISO 8601 date when unit is "day",
                    "sessions" : (int)
                },
                ...
            ]
        }
        ```
      operationId: appSessionsByTime
      parameters:
        - description: |-
            (Required) Integer

            Max number of units (days or hours) before ending_at to include in the returned series - must be between 1 and 100 inclusive.
          in: query
          name: length
          schema:
            example: "14"
            type: string
        - description: |-
            (Optional) String

            Unit of time between data points - can be "day" or "hour" (defaults to "day"). 
          in: query
          name: unit
          schema:
            example: day
            type: string
        - description: |-
            (Optional) DateTime (ISO 8601 string)

            Point in time when the data series should end - defaults to time of the request.
          in: query
          name: ending_at
          schema:
            example: 2018-06-28T23:59:59-5:00
            type: string
        - description: |-
            (Optional) String

            App API identifier retrieved from the Developer Console to limit analytics to a specific app.
          in: query
          name: app_id
          schema:
            example: "{{app_identifier}}"
            type: string
        - description: |-
            (Optional) String

            Segment API identifier indicating the analytics enabled segment for which sessions should be returned.
          in: query
          name: segment_id
          schema:
            example: "{{segment_identifier}}"
            type: string
      responses:
        "200":
          description: ""
      summary: App Sessions by Time
      tags:
        - Export
        - Session Analytics
  /subscription/status/get:
    get:
      description: |-
        Use the endpoint below to get the subscription state of a user in a subscription group. 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.

        > *Either `external_id` or `email` are required.

        ## Response

        All successful responses will return `subscribed`, `unsubscribed`, or `unknown` depending on status and user history with the subscription group.

        ```json
        Content-Type: application/json
        Authorization: Bearer YOUR-REST-API-KEY
        {
          "status": {
            "1": "Unsubscribed",
            "2": "Subscribed"
          },
          "message": "success"
        }
        ```
      operationId: listUser'sSubscriptionGroupStatusSms
      parameters:
        - description: |-
            (Required) String

            The `id` of your subscription group.
          in: query
          name: subscription_group_id
          schema:
            example: "{{subscription_group_id}}"
            type: string
        - description: |
            (Required*) String

            The `external_id` of the user (must include at least one and at most 50 `external_ids`).

            Only external_id or phone is accepted for SMS subscription groups
          in: query
          name: external_id
          schema:
            example: "{{external_identifier}}"
            type: string
        - description: |
            (Required*) String

            The phone number of the user (must include at least one phone number and at most 50 phone numbers). The recommendation is to provide this in the E.164 format.

            Only external_id or phone is accepted for SMS subscription groups
          in: query
          name: phone
          schema:
            example: "+11112223333"
            type: string
      responses:
        "200":
          description: ""
      summary: List User's  Subscription Group Status - SMS
      tags:
        - Subscription Groups
        - SMS
  /subscription/user/status:
    get:
      description: |-
        Use the endpoint below to list and get the subscription groups of a certain user.

        > If there are multiple users (multiple external ids) 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).
      operationId: listUser'sSubscriptionGroupSms
      parameters:
        - description: |-
            (Required*) String

            The external_id of the user. Must include at least one and at most 50 `external_ids`.
          in: query
          name: external_id
          schema:
            example: "{{external_id}}"
            type: string
        - description: |-
            (Optional) Integer

            The limit on the maximum number of results returned. Default (and max) limit is 100.
          in: query
          name: limit
          schema:
            example: "100"
            type: string
        - description: |-
            (Optional) Integer

            Number of templates to skip before returning rest of the templates that fit the search criteria.
          in: query
          name: offset
          schema:
            example: "1"
            type: string
        - description: |
            (Required*) String

            The phone number of the user (must include at least one phone number and at most 50 phone numbers). The recommendation is to provide this in the E.164 format.
          in: query
          name: phone
          schema:
            example: "+11112223333"
            type: string
      responses:
        "200":
          description: ""
      summary: List User's Subscription Group - SMS
      tags:
        - Subscription Groups
        - SMS
  /templates/email/info:
    get:
      description: |-
        Use to get information on your email templates.

        Use the Template REST APIs to programmatically manage the email templates that you have stored on the Braze dashboard, on the Templates & Media page. Braze provides two endpoints for creating and updating your email templates.

        ### Request Components
        - [Template Identifier](https://www.braze.com/docs/api/identifier_types/)
      operationId: seeEmailTemplateInformation
      parameters:
        - description: |-
            (Required) String

            Your email template's API Identifier.
          in: query
          name: email_template_id
          schema:
            example: "{{email_template_id}}"
            type: string
      responses:
        "200":
          description: ""
      summary: See Email Template Information
      tags:
        - Templates
        - Email Templates
  /templates/email/list:
    get:
      description: |-
        Use this endpoint to get a list of available templates in your Braze account.

        Use the Template REST APIs to programmatically manage the email templates that you have stored on the Braze dashboard, on the Templates & Media page. Braze provides two endpoints for creating and updating your email templates.

        ### Successful Response Properties
        ```json
        {
          "count": number of templates returned
          "templates": [template with the following properties]:
            "email_template_id": (string) your email template's API Identifier,
            "template_name": (string) the name of your email template,
            "created_at": (string, in ISO 8601),
            "updated_at": (string, in ISO 8601),
            "tags": (array of strings) tags appended to the template
        }
          ```
      operationId: listAvailableEmailTemplates
      parameters:
        - description: |-
            (Optional) String in ISO 8601

            Retrieve only templates updated at or after the given time.
          in: query
          name: modified_after
          schema:
            example: 2020-01-01T01:01:01.000000
            type: string
        - description: |-
            (Optional) String in ISO 8601

            Retrieve only templates updated at or before the given time
          in: query
          name: modified_before
          schema:
            example: 2020-02-01T01:01:01.000000
            type: string
        - description: |-
            (Optional) Positive Number

            Maximum number of templates to retrieve, default to 100 if not provided, maximum acceptable value is 1000.
          in: query
          name: limit
          schema:
            example: "1"
            type: string
        - description: |-
            (Optional) Positive Number

            Number of templates to skip before returning rest of the templates that fit the search criteria.
          in: query
          name: offset
          schema:
            example: "0"
            type: string
      responses:
        "200":
          description: ""
      summary: List Available Email Templates
      tags:
        - Templates
        - Email Templates
