canonical: https://jentic.com/apis/braze.com/braze

# Braze Endpoints

Braze is a customer engagement platform whose REST API exposes 31 endpoints for tracking users, exporting analytics, and orchestrating multi-channel campaigns and Canvas journeys. Marketing and CRM teams use the API to list and inspect campaigns, segments, content blocks, and email templates, pull time-series data for sends, sessions, DAU and MAU, and export hard bounces and unsubscribes. Trigger endpoints let an external system schedule a Canvas send for a specific user, and KPI endpoints feed dashboards and weekly reports. Each Braze customer is provisioned to a regional REST endpoint such as rest.iad-01.braze.com or rest.fra-01.braze.eu, and authentication is a REST API key passed in the Authorization header.

## For AI agents

Read campaign, Canvas, segment, and email analytics, and trigger Canvas sends from Braze through 31 REST endpoints behind a bearer API key.

## Scope

Does not handle payment processing, ticket management, or product catalogue updates - use for reading Braze campaign and Canvas analytics and triggering customer engagement messages only.

## Capabilities

- List and inspect campaigns via GET /campaigns/list and GET /campaigns/details
- List Canvases and pull per-canvas analytics via GET /canvas/list, GET /canvas/details, and GET /canvas/data_series
- Trigger a Canvas send for specific users via POST /canvas/trigger/schedule/create
- Pull DAU, MAU, new users, and uninstalls time series from /kpi/* endpoints for dashboards
- Export email engagement signals via GET /email/hard_bounces and GET /email/unsubscribes
- List and inspect segments and the content blocks and email templates used in campaigns
- Read subscription status for a user via GET /subscription/user/status and GET /subscription/status/get

## Use cases

### Marketing analytics dashboard

Pull campaign, Canvas, and KPI time series into a BI tool to give marketers a single view of engagement and growth. The dashboard reads GET /campaigns/data_series for campaign performance, /canvas/data_series for journey performance, and /kpi/dau/data_series and /kpi/mau/data_series for active-user trends. This avoids relying solely on the Braze UI for weekly reporting.

Example prompt: GET /kpi/dau/data_series with length=30, then GET /campaigns/list to enumerate campaign_id values, then GET /campaigns/data_series for each id and aggregate the results into a table.

### Triggered Canvas sends from a backend system

Fire a Canvas at the moment an external event happens - a high-value purchase, a churn signal, or a support escalation. Call POST /canvas/trigger/schedule/create with the canvas_id and either external_user_ids or recipients to schedule the send. This keeps message orchestration in Braze while letting the source system stay the system of record for the trigger event.

Example prompt: POST /canvas/trigger/schedule/create with canvas_id and recipients including external_user_id and trigger_properties, then read the dispatch_id from the response to confirm scheduling.

### Email deliverability and list hygiene

Detect deliverability issues and keep marketing lists clean by reading hard bounces and unsubscribes back into the source system. GET /email/hard_bounces and GET /email/unsubscribes return paginated time-bounded lists; pipe these into the CRM nightly to suppress addresses or flag accounts for re-verification.

Example prompt: GET /email/unsubscribes with start_date for the last 24 hours, then for each returned email call the CRM update endpoint to set marketing_consent=false.

### Subscription status checks for compliance

Before sending a marketing message from a non-Braze channel, confirm the recipient is still subscribed in Braze. GET /subscription/user/status takes an external_id and returns the current state across subscription groups, supporting compliance with double opt-in and unsubscribe regulations.

Example prompt: GET /subscription/user/status with external_id={user_id} and subscription_group_id, then proceed only if the response status is 'subscribed'.

### AI agent integration via Jentic

An agent answering 'how is the welcome campaign performing this week?' can discover Braze through Jentic, load the campaigns/data_series operation, and execute it without holding the customer's REST API key in prompt context. Jentic injects the Authorization header at execution time and returns the time series for the agent to summarise.

Example prompt: Through Jentic, search 'get a campaign performance time series', load the GET /campaigns/data_series operation, and execute with campaign_id and length=7.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | /campaigns/list | List campaigns in the workspace |
| GET | /campaigns/data_series | Time-series performance for a campaign |
| GET | /canvas/list | List Canvases (journeys) |
| POST | /canvas/trigger/schedule/create | Schedule a Canvas send for specific users |
| GET | /kpi/dau/data_series | Daily active users time series |
| GET | /email/unsubscribes | List email unsubscribes in a date range |
| GET | /segments/list | List user segments |
| GET | /subscription/user/status | Read a user's subscription status |

## Key resources

- **Campaigns** — List campaigns, inspect details, and pull time-series performance via /campaigns endpoints
- **Canvases** — List, inspect, and trigger Canvas journeys via /canvas endpoints
- **Segments** — List and inspect user segments and pull segment time-series data
- **KPIs** — Time series for DAU, MAU, new users, and uninstalls
- **Email** — Hard bounces, unsubscribes, and email template lookups
- **Subscription status** — Per-user and per-group subscription state for compliance
- **Content blocks and templates** — Reusable content blocks and email templates referenced by campaigns

## Why Jentic

- **Setup:** Wiring Braze by hand means attaching your workspace-scoped REST key as a bearer header, picking the correct regional host such as rest.iad-01.braze.com, and coordinating the campaign, Canvas, and analytics calls yourself. Through Jentic you install once, import the Braze API from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** Braze targets campaigns and Canvases through query parameters and request bodies rather than resource paths, so scope the agent to the operations it needs, such as reading campaign performance, and leave out ones like triggering a Canvas send unless the agent requires them. Every operation you allow is one you have explicitly chosen.
- **Credential handling:** Your workspace-scoped Braze REST API key is stored once, encrypted, by your own Jentic One instance and injected as the bearer header at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'trigger a Canvas send' or 'get campaign performance', and Jentic returns the matching Braze operation with its input schema and the regional base URL pre-wired so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Breadcrumbs API** — Score leads in Breadcrumbs based on engagement signals exported from Braze
- **Braintree GraphQL API** — Fire Braze Canvases when a Braintree payment succeeds or fails
- **Breeze API** — Breeze offers lighter-weight CRM-driven messaging compared to Braze's full multi-channel orchestration

## FAQ

### What authentication does the Braze API use?

The Braze REST API uses a workspace-scoped API key passed in the Authorization header as Authorization: Bearer YOUR-REST-API-KEY. Older requests that placed the key in the body or query string still work for now but are deprecated. Through Jentic, the key is held in the encrypted vault and attached to each request at execution time.

### Which Braze REST endpoint should I call?

Each Braze customer is provisioned to a regional cluster such as https://rest.iad-01.braze.com (US-01) or https://rest.fra-01.braze.eu (EU-01). The dashboard URL maps to the REST endpoint - for example dashboard-02.braze.com pairs with rest.iad-02.braze.com. Use the cluster URL for your workspace as the base URL for every call.

### Can I trigger a Canvas send from the Braze API?

Yes. POST /canvas/trigger/schedule/create accepts a canvas_id plus a recipients array of external_user_ids (or alias/email targets) and an optional schedule. The response includes a dispatch_id you can use to correlate the send back to your source event.

### What are the rate limits for the Braze API?

Braze applies endpoint-class rate limits - for example /users/track is rated per workspace per minute, and analytics endpoints like /campaigns/data_series have separate caps. The OpenAPI spec does not enumerate exact numbers; check braze.com/docs for the current limits before scaling polling jobs against /kpi/* or /campaigns/data_series.

### How do I pull a campaign's performance with the Braze API through Jentic?

Install with pip install jentic, then await client.search('get campaign performance time series'), await client.load on the GET /campaigns/data_series operation, and await client.execute with campaign_id and length. Jentic attaches the workspace API key automatically.

### Does the Braze API support exporting unsubscribes and hard bounces?

Yes. GET /email/unsubscribes returns email addresses that unsubscribed in a date range, and GET /email/hard_bounces returns addresses that bounced permanently. Both support start_date, end_date, limit, and offset for pagination so you can export incrementally into a CRM or warehouse.

### Can I limit what my agent is allowed to do with the Braze API?

Yes. Because you run Jentic One yourself, your own rules decide which Braze operations and credentials the agent can use, and Braze targets campaigns and Canvases through query parameters and request bodies rather than resource paths. You can allow the agent read-only calls like GET /campaigns/data_series, GET /kpi/dau/data_series, and GET /email/unsubscribes while leaving out write actions such as POST /canvas/trigger/schedule/create unless the agent genuinely needs to send. Every operation the agent can reach is one you have explicitly chosen.
