braze_delete_ scheduled_ messageCancel a message scheduled with braze_schedule_message.
See how a campaign or Canvas performed, look up a customer's profile, update users and their events, send what you built in Braze, keep catalogs current, and pull engagement numbers.
PopMCPBraze
Every documented Braze REST endpoint with a working route, with the everyday tools loaded by default and the rest one search away. When a call is refused, the answer names the key permission it needs.
154 tools in the full catalog: 71 read and 83 write. 48 load by default, and the rest are found with tool search.
braze_delete_ scheduled_ messageCancel a message scheduled with braze_schedule_message.
braze_list_ scheduled_ broadcastsList campaigns and Canvases scheduled to send between now and end_time (a date).
braze_schedule_ campaignSchedule an API-triggered campaign for later.
braze_schedule_ canvasSchedule an API-triggered Canvas for later.
braze_schedule_ messageSchedule a message for later, without a dashboard campaign.
braze_send_ campaignSend a campaign that uses API-triggered delivery.
braze_send_ canvasStart a Canvas that uses API-triggered delivery.
braze_send_ messageSend a message now without a dashboard campaign.
braze_send_ transactional_ emailSend one person a Transactional Email campaign.
braze_add_ catalog_ itemsAdd up to 50 items to a catalog: {"items":[{"id":"sku-1","price":10}]}.
braze_list_ catalog_ itemsList items in a catalog, 50 at a time.
braze_list_ catalogsList the workspace's catalogs: name, description, fields, item count.
braze_update_ catalog_ itemsChange fields on up to 50 existing items: {"items":[{"id":"sku-1","price":12}]}.
braze_create_ user_ aliasesAdd aliases: {"user_aliases":[{"external_id":"u1","alias_name":"visitor-1","alias_label":"web_session"}]}.
braze_delete_ usersDelete users and all their data for good.
braze_find_ userFind one customer and read their profile by external_id, email, phone or braze_id.
braze_identify_ usersAttach an external_id to users known only by an alias, email or phone.
braze_merge_ usersMerge user profiles: each identifier_to_merge goes into its identifier_to_keep, then is removed.
braze_track_ usersCreate or update users and record their events and purchases.
braze_get_ engagement_ overviewThe workspace's health over a period: daily and monthly active users, new users, uninstalls and sessions, each with total, daily average and latest day.
braze_list_ email_ unsubscribesList email addresses that unsubscribed.
braze_list_ hard_ bouncesList email addresses that hard bounced.
braze_set_ email_ subscription_ statusSet an address's global email state: subscription_state is opted_in, subscribed or unsubscribed.
braze_get_ campaignGet one campaign: name, channels, schedule, messages and their variation ids, conversion behaviors.
braze_get_ campaign_ analyticsGet a campaign's daily stats (sends, opens, clicks, bounces, revenue, conversions per channel and variation).
braze_get_ campaign_ overviewOne campaign's details and its totals over a period: overall and per channel, with every number Braze reports summed (sent, opens, clicks, bounces, revenue, conversions).
braze_get_ canvasGet one Canvas: name, variants, steps with their channels, schedule type.
braze_get_ canvas_ analytics_ summaryGet a Canvas's stats rolled up over a period (entries, revenue, conversions per variant and step).
braze_get_ canvas_ overviewOne Canvas's details and its results over up to 14 days, broken down by variant and step.
braze_list_ campaignsList campaigns (id, name, is_api_campaign, tags, last_edited), 100 at a time, oldest first unless sort_direction=desc.
braze_list_ canvasesList Canvases (id, name, tags, last_edited), 100 at a time.
braze_create_ email_ templateCreate an email template.
braze_export_ segment_ usersExport every user in a segment to a file.
braze_export_ users_ by_ idRead user profiles by identifier: up to 50 external_ids or user_aliases, or one device_id, braze_id, email_address or phone.
braze_get_ content_ blockGet one Content Block with its content.
braze_get_ custom_ event_ analyticsGet how often a custom event happened as a series.
braze_get_ email_ templateGet one email template: subject, preheader, body, plaintext_body, tags.
braze_list_ content_ blocksList Content Blocks (content_block_id, name, content_type, tags, timestamps), up to 1,000 at a time.
braze_list_ custom_ event_ namesList custom event names only, 250 at a time, alphabetically.
braze_list_ email_ templatesList email templates (email_template_id, template_name, created_at, updated_at, tags), up to 1,000 at a time.
braze_list_ user_ subscription_ groupsList the subscription groups one user is in.
braze_set_ subscription_ status_ batchSubscribe or unsubscribe up to 50 users from a subscription group: {"subscription_group_id":"id","subscription_state":"subscribed","emails":["a@example.com"]}.
braze_update_ email_ templateChange an email template by email_template_id.
braze_get_ purchase_ revenueReturn the total money spent in your app over a time range.
braze_get_ segmentGet one segment: name, description, filters, tags.
braze_get_ segment_ analyticsGet a segment's estimated size per day.
braze_list_ segmentsList segments (id, name, analytics_tracking_enabled, tags), 100 at a time.
braze_get_ workspace_ overviewA map of this Braze workspace: newest campaigns, Canvases and segments, custom event names, email templates, catalogs and what is scheduled for the next 14 days, plus missingPermissions naming anything this key cannot read.
braze_create_ data_ objectCreate one data object for a type.
braze_create_ object_ relationshipCreate one directional relationship edge between two data objects.
braze_create_ user_ relationshipLink one Braze user to one data object.
braze_delete_ data_ objectDelete one data object.
braze_delete_ object_ relationshipDelete one object-to-object relationship edge.
braze_delete_ user_ relationshipRemove one user-to-object relationship.
braze_get_ data_ objectReturn one data object.
braze_get_ data_ object_ typeReturn one data object type and its schema definition.
braze_list_ data_ object_ typesList data object types in a workspace.
braze_list_ data_ objectsList objects for a specific data object type.
braze_list_ object_ relationship_ typesList relationship kinds available for object-to-object links for a given anchor direction.
braze_list_ object_ relationshipsList related data objects from one object anchor.
braze_list_ user_ relationship_ typesList valid rel_kind values for user relationships on a data object type.
braze_list_ user_ relationshipsList users linked to one data object.
braze_replace_ data_ objectCreate or replace a data object with full-attribute replacement semantics.
braze_replace_ object_ relationshipCreate or replace an object relationship.
braze_replace_ user_ relationshipCreate or replace one user relationship.
braze_update_ data_ objectMerge attributes into an existing data object.
braze_update_ object_ relationshipMerge attributes onto an existing object relationship.
braze_update_ user_ relationshipMerge attributes into an existing user relationship.
braze_create_ send_ idCreate a send_id so one batch of an API campaign can be measured on its own with braze_get_send_analytics.
braze_delete_ scheduled_ campaignCancel a scheduled API-triggered campaign.
braze_delete_ scheduled_ canvasCancel a scheduled API-triggered Canvas.
braze_duplicate_ campaignDuplicate campaigns.
braze_duplicate_ canvasDuplicate Canvases.
braze_start_ live_ activityRemotely start Live Activities displayed in your iOS app.
braze_update_ live_ activityUpdate and end Live Activities displayed by your iOS app.
braze_update_ scheduled_ campaignUpdate scheduled API-triggered campaigns created in the dashboard, allowing you to decide what action should trigger the message to be sent.
braze_update_ scheduled_ canvasUpdate scheduled API-triggered Canvases that were created in the dashboard.
braze_update_ scheduled_ messageUpdate scheduled messages.
braze_create_ catalogCreate a catalog.
braze_create_ catalog_ fieldsCreate multiple fields in your catalog.
braze_create_ catalog_ itemCreate an item in your catalog.
braze_create_ catalog_ selectionCreate a selection in your catalog.
braze_delete_ catalogDelete a catalog and all its items.
braze_delete_ catalog_ fieldDelete a catalog field.
braze_delete_ catalog_ itemDelete an item in your catalog.
braze_delete_ catalog_ itemsDelete up to 50 items: {"items":[{"id":"sku-1"}]}.
braze_delete_ catalog_ selectionDelete a catalog selection.
braze_get_ catalog_ itemReturn a catalog item and its content.
braze_replace_ catalog_ itemReplace an item in your catalog.
braze_replace_ catalog_ itemsFully replace up to 50 items, creating any that are missing.
braze_update_ catalog_ itemEdit an existing item in your catalog.
braze_get_ campaign_ translation_ sourceView all the default translation sources for a campaign's translation tags.
braze_get_ campaign_ translationsView all the translations for each message variant in a campaign.
braze_get_ canvas_ translation_ sourceView all the default translation sources for a canvas's translation tags.
braze_get_ canvas_ translationsPreview a translated message for a Canvas.
braze_get_ content_ block_ translation_ sourceView all the default translation sources for a Content Block's translation tags.
braze_get_ content_ block_ translationsView all the translations for a Content Block.
braze_get_ email_ template_ translation_ sourceView the source translations for an email template.
braze_get_ email_ template_ translationsView all translations and locales for an email template.
braze_get_ webhook_ template_ translation_ sourceView the default source translations for a webhook template.
braze_get_ webhook_ template_ translationsView translations for a webhook template.
braze_update_ campaign_ translationUpdate multiple translations for a campaign.
braze_update_ canvas_ translationUpdate multiple translations for a Canvas.
braze_update_ content_ block_ translationUpdate multiple translations for a Content Block.
braze_update_ email_ template_ translationUpdate translations for an email template.
braze_update_ webhook_ template_ translationUpdate translations for a webhook template.
braze_get_ users_ track_ statusCheck how far a group of braze_track_users requests got.
braze_remove_ external_ idsRemove old external ids left deprecated by a rename.
braze_rename_ external_ idsGive users a new external_id.
braze_track_ users_ bulkThe same as braze_track_users for large batches, up to 1,000 items a call depending on the account.
braze_track_ users_ syncThe same as braze_track_users, but the answer comes after Braze has applied the change.
braze_update_ user_ aliasesRename aliases on existing users.
braze_blocklist_ emailsMark email addresses as unsubscribed and blocked so Braze never emails them: {"email":["a@example.com"]}.
braze_get_ dau_ kpiGet daily active users per day.
braze_get_ mau_ kpiGet monthly active users (rolling 30 days) per day.
braze_get_ new_ users_ kpiGet new users per day.
braze_get_ session_ analyticsRetrieve a series of the number of sessions for your app over a designated time period.
braze_get_ uninstalls_ kpiGet app uninstalls per day.
braze_remove_ hard_ bouncesRemove addresses from the hard bounce list so Braze will email them again.
braze_remove_ spam_ entriesRemove addresses from the spam list so Braze will email them again.
braze_create_ dashboard_ userInvite a new member of your team to the Braze dashboard.
braze_create_ preference_ centerCreate a preference center to allow users to manage their notification preferences for your email campaigns.
braze_delete_ dashboard_ userRemove a member of your team from the Braze dashboard.
braze_find_ dashboard_ userFind a Braze dashboard user (a member of your team, not a customer) by email.
braze_get_ canvas_ analyticsGet a Canvas's stats as a time series.
braze_get_ dashboard_ userGet one Braze dashboard user (a member of your team, not a customer) by id.
braze_get_ preference_ centerView the details for your preference centers, including when it was created and updated.
braze_get_ preference_ center_ urlMake the link to a preference center for one user.
braze_get_ send_ analyticsGet daily stats for one tracked send of an API campaign, from a send_id you made with braze_create_send_id.
braze_list_ preference_ centersList preference centers: name, preference_center_api_id, timestamps.
braze_update_ dashboard_ userChange a Braze dashboard user's name, department or permissions.
braze_update_ preference_ centerUpdate a preference center.
braze_cancel_ segment_ exportCancel every running export of a segment.
braze_create_ content_ blockCreate a Content Block.
braze_create_ sdk_ auth_ keyCreate a new SDK Authentication key for your app.
braze_delete_ sdk_ auth_ keyDelete an SDK Authentication key for your app.
braze_export_ global_ control_ groupExport the workspace's Global Control Group to a file.
braze_get_ subscription_ statusGet users' state in one SMS or email subscription group.
braze_list_ custom_ attributesList the workspace's custom attributes: name, description, data type, status, tags.
braze_list_ custom_ eventsList custom events with their details: name, description, status, tags, property names.
braze_list_ sdk_ auth_ keysRetrieve all SDK Authentication keys for your app.
braze_set_ primary_ sdk_ auth_ keySet an SDK Authentication key as the primary key for your app.
braze_set_ subscription_ statusSubscribe or unsubscribe up to 50 users from one subscription group.
braze_update_ content_ blockChange a Content Block by content_block_id.
braze_get_ purchase_ quantityReturn the total number of purchases in your app over a time range.
braze_list_ cdi_ integrationsList Cloud Data Ingestion integrations.
braze_list_ cdi_ sync_ statusList a Cloud Data Ingestion integration's recent syncs and their status.
braze_list_ purchased_ productsList product ids that have been purchased, 250 at a time.
braze_trigger_ cdi_ syncStart a sync for a Cloud Data Ingestion integration now.
braze_create_ media_ assetAdd a file to the media library from a public URL.
braze_list_ invalid_ phone_ numbersPull a list of phone numbers that have been marked "invalid" within a certain time frame.
braze_remove_ invalid_ phone_ numbersRemove "invalid" phone numbers from our invalid list.
braze_replace_ media_ assetReplace a media library file from a public URL (asset_url), keeping its id and URL.
braze_update_ push_ credentialReplace an app's push credentials for one platform.
Credentials off one Braze screen, then an endpoint your client signs into. Nothing to deploy, and nothing to install.
In your Braze dashboard open Settings, APIs and Identifiers, API Keys and choose Create API Key. Name it, tick the permissions you want the AI to use, leave the IP allowlist empty, and create it. Copy the key from the Identifier column into PopMCP. PopMCP works out which Braze instance your workspace is on.
••••••••••••3f7adashboard-01.braze.comAcme productionSends, scheduled messages, user updates and deleted users take effect in Braze the moment the AI calls them, and sends reach real people. New connections start read-only, and writing needs an owner or admin to allow it. The key can also only do what you ticked when you made it, so leaving a permission off is a second limit.
Drop the PopMCP URL into Claude, ChatGPT, Claude Code, Codex or any other supported client. It signs in through PopMCP with OAuth, so your Braze credential never leaves the server.
app.popmcp.com/mcpAsk for something harmless before the agent changes anything. Writes run as soon as it calls them, so confirm it reads the right account first.
How did our newest campaign do over the last 30 days? Break it down by channel
braze_list_campaignsok
Then just ask for the work
“How did our newest campaign do over the last 30 days? Break it down by channel”
“Find jane@northwind.co and show her attributes, purchases and whether she can receive email”
“Which Canvas steps are losing people? Show the results for our onboarding Canvas”
“Send the win-back campaign to these ten customers, and show me the list before it goes”
“How are daily active users, new users and uninstalls trending this quarter?”
“Add these new products to our catalog and update the price on these existing ones”
One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.
Add the PopMCP URL under Customize → Connectors and the tools appear in every chat.
The same endpoint, registered in the browser. Nothing to install on the machine you are working from.
Register PopMCP as a custom connector, then let ChatGPT read and update the account.
Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.
Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.
Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.
FAQ
What teams ask before putting Braze behind an AI client.
Yes. Braze has no free plan, and access comes through its sales team, so you need to be a Braze customer with access to Settings, APIs and Identifiers in your workspace. PopMCP does not provide a Braze account.
One REST API key. In your Braze dashboard open Settings, APIs and Identifiers, API Keys and choose Create API Key. Tick the permissions you want, create it, and copy the value in the Identifier column. It must be a REST API key, not an SDK key.
Every one you want the AI to use. Braze keys cannot be edited after they are made, so adding a permission later means making a new key and reconnecting. PopMCP tells you at connect time what the key could read, and when a tool is refused, the answer names the permission it needs.
No. A key works on only one instance, so PopMCP tries it and remembers where it worked. If that ever fails, you can enter your dashboard address under More options, and PopMCP only accepts Braze's own addresses there.
No. A Braze key belongs to one workspace. Connect each workspace with its own key. You can give each connection a name under More options, since Braze's API does not share workspace names.
New connections start read-only, and sending needs an owner or admin to allow writes. Send tools tell the AI to confirm first, and PopMCP refuses a call that asks for a whole-segment broadcast and a recipient list together. You can also leave the sending permissions off the key.
Yes, with a separate SCIM token and service origin from Settings, Admin Settings, SCIM Provisioning, added under More options. A REST API key cannot do this, and Braze makes SCIM available depending on your edition. Everything else works without them.
No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.
Any client that supports a remote Streamable HTTP MCP server: Claude Desktop, Claude Web, Claude Code, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.
Connect Braze in PopMCP first, then run claude mcp add --transport http popmcp https://app.popmcp.com/mcp in a terminal. Inside Claude Code, run /mcp and sign in to PopMCP in the browser window it opens, ticking Braze on the consent screen. The Braze tools are then available in that session, and no Braze credential is stored on your machine.
Loading 154 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 48-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. Every tool stays searchable, and on Scale the owner can load the full catalog for a teammate's connection.
A tool is something your AI calls, and there are 154 here. A trigger is something PopMCP watches for you: 7 Braze events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into Braze.
Launch a hosted MCP endpoint for Braze, keep tool access under control, and start testing real workflow prompts right away.