Intermediate

Updated · 9 min read

Connect Claude to Braze: the read-only-first setup

There is no OAuth flow here, no Braze app to install, no consent screen listing what the model may do. You create a REST API key inside Braze, tick a set of permission boxes, paste the key and your cluster endpoint into an extension config, and from that moment Claude can reach whatever you ticked. Nothing in the chat window will remind you what that was. So the useful version of this guide is not the four setup steps — it is the checkbox list, and the order in which you should grant it.

Justin Williames

By Justin Williames

Founder, Orbit · 10+ years in lifecycle marketing

SharePostPost

What connecting Claude to Braze actually involves

Two values move between the systems. The first is a REST API key, generated inside Braze under Settings, then APIs and Identifiers. The second is your REST endpoint — Braze runs workspaces across many clusters, and yours has its own hostname, something in the shape of rest.iad-01.braze.com. Braze shows the correct one for your account in its own API documentation. Point a valid key at the wrong cluster and you get an authorisation error that reads exactly like a bad key, which is why more setup time is lost to the endpoint than to the credential.

In Orbit those two arrive as braze_api_key and braze_endpoint, pasted once into the extension's settings in Claude Desktop. They sit in that local config on your machine; calls run from there to Braze's API. After that, Claude reaches for Braze when a job needs it rather than describing Braze from memory — which is the actual difference, and the subject of the with-Orbit versus without comparison.

The part worth slowing down on is the permission list. Braze grants API access per endpoint family, as individual checkboxes on the key itself — campaigns.list, canvas.details, messages.send, and so on, each ticked or not ticked at creation. There is no role, no least-privilege default, and no confirmation prompt at call time. Whatever you tick is what the model can do, silently, from the first message.

Grant read first, and mean it

The first key you make should be able to answer questions and unable to change anything. Not because the model is reckless, but because a read-only credential makes an entire category of accident structurally impossible: a misread instruction becomes a wasted API call rather than a message in somebody's inbox. You can always issue a second key later. You cannot un-send.

Permission groupFirst keyWhy
campaigns.list, campaigns.details, campaigns.data_seriesGrantCampaign structure plus performance series — the raw material for every audit.
canvas.list, canvas.details, canvas.data_seriesGrantCanvas steps, branches, delays, entry data. Structure reads only.
segments.list, segments.details, segments.data_seriesGrantSegment inventory, overlap detection, size trends over time.
templates.email.list, templates.email.infoGrantTemplate audits and Liquid review against the live template body.
content_blocks.list, content_blocks.infoGrantDuplicate and stale-block detection across the content library.
events.list, purchases.product_listGrantConfirms the events a program depends on exist before it launches.
email.hard_bounces, email.unsubscribesGrantDeliverability health without any ability to edit suppression.
users.export.idsConsiderPulls whole profiles for named users. Genuinely useful for test-user QA, and still personal data leaving the dashboard.
messages.send, campaigns.trigger.send, canvas.trigger.sendWithholdThese three deliver messages to real people. Nothing an audit does needs them.
users.track, users.delete, users.alias.newWithholdProfile writes and deletes, with no undo and no diff to review afterwards.
email.blacklist, subscription.status.setWithholdChanges who is contactable with no visible signal. The damage surfaces weeks later as missing volume.
templates.email.create / update, content_blocks.create / updateSecond keyGrant these only when you want Claude publishing templates, and put them on a separate credential.

Two keys rather than one is the setup worth copying: an audit key carrying only reads, and a build key carrying reads plus template and content-block writes. Separately named, separately revocable. When the build work finishes you retire the build key and the audits keep running — which is the whole point of naming them properly in the first place.

Braze also lets you restrict an API key so it only works from a set of source IPs. If your team works from a fixed egress address it costs nothing to add, and it turns a leaked key into an unusable one.

What a read-only key already gets you

The read half of the integration is not the consolation prize. Most of the work you would actually want a model doing in Braze is reading, comparing, and grading — jobs that are tedious by hand and quick against an API.

Pre-launch QA on a Canvas. Read the live Canvas structure — entry rules, audience filters, message-template bindings, delays, conversion events, exit criteria, frequency caps — and check it line by line against what the brief said it would be. Orbit's Canvas QA skill runs this as a severity-rated checklist that returns a go or no-go call, keeps entry on a test audience throughout, and launches nothing.

Template and Liquid audits. Pull every email template and read the actual bodies rather than the ones somebody remembers writing. Missing fallbacks, orphaned personalisation tags, and branches nobody has rendered are all visible in the source once you can list it. The Braze Liquid reference covers what to look for.

Segment reads. Inventory every segment, flag the ones nobody has used in a year, find the pairs that overlap so heavily they should be one, and chart size over time. That is a different exercise from designing segments well, which the segmentation guide handles.

Naming-convention enforcement. A convention nobody can audit is a document, not a standard. An inventory read is what makes it enforceable — you cannot grade names you cannot list. Read the whole workspace, grade every asset against the convention, and produce a rename plan for the ones that fail. The naming conventions guide covers the convention itself.

Data-model validation. Before a program ships, confirm the custom events and attributes its logic depends on exist in the live workspace with the names the brief assumed. This is the check that catches a launch built on an attribute that was renamed nine months ago. See custom attributes design for how those names drift.

Run together, those reads produce one artefact rather than five conversations — a workspace inventory with the duplicates, stale assets and off-convention names already flagged.

The write side, and the four things to never automate

Orbit's write tools against Braze are narrow on purpose: publish content blocks and compiled email templates, upload images into the media library, and fire a test send at a designated test list. Those are reversible or contained. A template you publish can be republished; an image in the media library is inert until something references it.

The test send deserves a note because Braze is unusual here. Its messaging endpoint can target a designated test list directly, so a test send is a real Braze send rather than a local HTML preview — a genuine advantage over ESPs that expose no test-send endpoint at all, and one of the reasons Braze is the deepest of Orbit's integrations. It is still a send. Keep that test list to addresses you own and check its membership before you use it, because the endpoint does not care whether the list drifted.

A read key turns a bad instruction into a wasted API call. A write key turns it into an email somebody receives.

One special case is worth understanding rather than working around: large parts of Canvas configuration are not writable through the public API at all, which is why the deep-edit path runs through the Braze dashboard in a browser instead. Treat that path as manual work with a person watching each save, not as automation with a longer script. The API's limits are doing you a favour there.

Verify what the integration can actually see

A green connection tick tells you a credential authenticated. It does not tell you which permissions came with it, which workspace it points at, or whether the model is reading the program you think it is. Four checks, in this order.

Start with the auth probe, and know what it cannot distinguish. Braze publishes no dedicated ping endpoint, so any connection check has to be a real read — Orbit probes with a cheap GET on the email template list, limited to one result. A pass means the key and the endpoint are both live. A failure does not separate a bad key from the wrong cluster, so check the endpoint hostname first; it is the more common mistake.

Match the counts against the dashboard. Ask for an inventory of Canvases, campaigns, segments and templates, then compare the totals to what Braze shows you. A key missing canvas.list does not announce itself — it returns a short list. Silence is the failure mode that costs you an afternoon of analysis on a partial picture.

Prove the withheld permissions actually fail. Ask for something you deliberately did not grant and check you get an authorisation error rather than a result. A permission you believe you withheld and never tested is a permission you are assuming. This takes one message and is the only evidence that the read-only key is read-only.

Check which workspace the key points at. Braze API keys are scoped to a single workspace. A key from staging reads cleanly, returns sensible data, and describes a program that is not the one you are about to ship. Check that an asset name you recognise from production appears in the inventory before you trust anything built on top of it.

Then re-run the first two whenever someone rotates a key or you add a workspace, because both invalidate the check without raising an error. If you are still deciding whether Braze is the right platform to be doing this against, the ESP comparison covers where it sits against the alternatives, and the Braze IP warm-up guide covers the one piece of setup no API will do for you.

The short version to take into Monday: make a read key, name it after its job, verify a withheld permission genuinely fails, and only issue a write credential once you have a specific job for it. Everything in this guide is recoverable except a send.

Read to the end

Scroll to the bottom of the guide — we'll tick it on your reading path automatically.

Frequently asked questions

Does Orbit work with Braze?
Yes, and Braze is the deepest of Orbit's ESP integrations — seven of the eight core operations run natively: template list, template read, template write, campaign and Canvas read, segment read, performance metrics, and test send. The eighth is the auth check, which works but has no dedicated endpoint on Braze's side, so it runs as a cheap template-list read instead. You supply a REST API key and your cluster endpoint; there is no separate Braze app to install.
Do I need a read/write key, or is read-only enough?
Read-only covers audits, Canvas and campaign QA, segment analysis, template and Liquid review, naming enforcement, data-model validation, and performance reporting — most of what you would want a model doing. You need write scope only for publishing templates and content blocks, uploading images, and test sends. Start read-only and issue a second, separately named key when a specific build job needs it.
Where do I find my Braze REST endpoint?
It is a cluster hostname specific to your workspace, in the shape of rest.iad-01.braze.com, and Braze shows the correct one for your account in its own API documentation. It is not guessable from your dashboard URL. A valid key pointed at the wrong cluster returns an authorisation error identical to a bad key, so check the hostname before you regenerate the credential.
Can Claude send a campaign for me?
Braze's API can, if you grant messages.send or the campaign and Canvas trigger permissions. Do not. A send is irreversible, runs at API speed, and has no review step between the instruction and the delivery. The one send worth enabling is a test send to a list of addresses you own, and even that is worth checking the membership of before each use.
Where does my Braze data go?
The key and endpoint sit in the Orbit extension's config on your own machine, and API calls run from there to Braze. What comes back enters the conversation you are having — so the ordinary caution applies: reading whole user profiles pulls personal data out of the dashboard and into a chat transcript. That is why users.export.ids is worth restricting to genuine test-user QA rather than granting by default.
Can it edit a Canvas that is already live?
Large parts of Canvas configuration are not writable through Braze's public API, so the deep-edit path runs through the dashboard in a browser rather than the API. Treat that as supervised manual work. Editing a running Canvas is one of the four things worth keeping a human on regardless of what the tooling permits — people are inside that flow while you change it.
How do I limit the blast radius if I am nervous about this?
Three moves, in order of effect. Issue a read-only key and verify a withheld permission actually returns an error. Name keys after their job so revoking one does not break the others. Add an IP restriction to the key if your team has a fixed egress address. Together those make the worst realistic outcome a failed API call rather than a message somebody receives.

This guide is backed by an Orbit skill

Related guides

Browse all
Craft9 min

Braze naming conventions that survive a Friday afternoon

Every Braze workspace eventually becomes an archaeological dig. The convention that actually holds is four dimensions, six seconds to apply, and enforced by tooling rather than a Notion page nobody reads.

Craft11 min

Liquid for lifecycle marketers — the complete Braze reference

Every personalised field in every Braze message runs through Liquid. Get it right and personalisation quietly improves every send. Get it wrong and 50,000 people see 'Hi {{${first_name}}}'. This reference covers the syntax and the production habits that stop that happening.

Craft13 min

Stripo, natively — connect your account, sync your modules, compose emails through the API

If you build emails in Stripo and edit them with Claude, you've probably been running a clipboard relay: copy HTML out, paste in, paste the result back. Orbit's native Stripo integration ends the relay. This guide walks through how the loop closes — pulling your saved Stripo modules into Orbit, letting Claude compose new emails from them, pushing the result back as an editable Stripo email — plus the two setup gotchas everyone hits the first time.

Craft10 min

Claude with Orbit vs Claude without: same model, one of them can check its work

On its own, Claude writes fluent lifecycle work it has no way to verify — plausible Liquid, plausible Braze steps, HTML that looks right and clips in Gmail. Here is a task-by-task comparison of what changes once the model can open the email, read the platform's real constraints, and tell you it was wrong.

Craft7 min

Custom attributes: the data design that decides what your program can do

Custom attributes are infrastructure. Designed well, they enable every future campaign. Designed badly, they become the reason "can we segment on X?" is a multi-week engineering project instead of a 15-minute one. Here's the design discipline that prevents the mess.

Craft11 min

How to build Stripo emails with Claude — and push them straight to Braze

Stripo is one of the most-used email builders going, and most teams still drive it by hand: drag blocks in the editor, copy the HTML out, paste it into an AI tool, paste the result back. Orbit connects Claude directly to Stripo's API instead. This guide walks the full workflow — sync your Stripo modules, compose an email in chat, verify it renders, and export it to a Braze template by name — without leaving the conversation.

Found this useful? Share it with your team.

SharePostPost

You finished the playbook. Get the next.

New guides and product updates land in your inbox when they ship. One list, real lifecycle work, unsubscribe the second it stops being useful.

Guides and Orbit updates only. No sequences, no selling your address.

Use this in Claude

Claude can run this playbook for you.

Orbit is a free extension for Claude Desktop — no licence key, no card — that runs the lifecycle work you just read about. You've read how it works; Orbit hands Claude the same playbook as a skill it can execute: discovery, build, QA, push, on your own ESP.

Download Orbit — free