Skip to Content
LoadersBraze Currents

Braze Currents

The Braze Currents loader streams your Braze engagement and behavioral events into your warehouse in near-real time. Braze Currents  is Braze’s data-export stream; using its Custom HTTP connector, Braze POSTs event batches to a Zeotap endpoint, and each event is durably captured and loaded into your warehouse — no polling or schedule required.

Use it to bring message-engagement events (email opens, push sends, in-app clicks) and behavioral events (custom events, purchases, sessions) into Zeotap so you can model and segment on them alongside the rest of your CDP data.

When to Use It

  • You use Braze and have Currents enabled on your account.
  • You want push-based, near-real-time ingestion of Braze events into your warehouse.
  • You want Braze’s universal event fields as typed columns while keeping event-specific and custom fields queryable.

For pulling Braze user profiles or segments on a schedule, use the Braze loader instead — it is a separate, pull-based loader.

How It Works

  1. Braze’s Custom HTTP Currents connector sends a POST request with a batch of events ({"events":[...]}) to the Zeotap receiver, authenticating with a write key as a Bearer token.
  2. The receiver durably accepts the events and responds 2xx immediately.
  3. Accepted events are buffered on a durable event stream, tagged with the loader they belong to.
  4. An always-on consumer batches events and loads them into the loader’s configured warehouse.

Because the receiver acknowledges only after events are durably stored, a success response means they will be loaded — Braze does not need to resend them.

Prerequisites

  • A Braze account with Currents enabled (Currents is a paid add-on; contact your Braze account team if it is not available).
  • A connected warehouse to load events into (BigQuery, Snowflake, Databricks, or ClickHouse).

Create the Loader

  1. In Zeotap, go to Loaders and click Add Loader.
  2. Choose Braze Currents.
  3. Select the Target Warehouse and Schema where events should land.
  4. Optionally set a Target Table name (defaults to braze_currents_events).
  5. Save the loader.
FieldRequiredDescription
Target WarehouseYesThe warehouse source that received events are loaded into.
SchemaYesThe schema/dataset that holds the events table.
Target TableNoThe warehouse table Currents events land in. Defaults to braze_currents_events. Use a distinct name per loader if you run more than one in the same schema.

Mint a Write Key

Requests authenticate with a write key — a per-loader credential you manage in the UI. Braze sends it as a Bearer token.

  1. Open your Braze Currents loader.
  2. In the Write Keys section, click Create Key and give it a name (e.g. Braze Production).
  3. Copy the generated key — you will paste it into Braze as the Bearer token.

You can create multiple keys per loader and revoke any key at any time from the same screen. Revocation takes effect within a few minutes (the receiver briefly caches key lookups).

Configure Braze

Set up the export on the Braze side — Zeotap does not configure Braze for you (Braze has no public API to create Currents connectors).

  1. In Braze, go to Partner Integrations → Data Export → Currents and create a new Currents export.
  2. Choose the Custom HTTP (HTTP / JSON) export type.
  3. Set the endpoint URL to the Endpoint URL shown on the loader page (https://<your-push-host>/v1/push/batch).
  4. Under Authorization, choose Bearer Token and paste one of your write keys.
  5. Select the event types you want to export.
  6. Launch the export. Events begin flowing into your warehouse.

What Braze Sends

Braze POSTs batches (up to 100 events per request) to the batch endpoint:

POST https://<your-push-host>/v1/push/batch Authorization: Bearer YOUR_WRITE_KEY Content-Type: application/json { "events": [ { "id": "6a1b...", "event_type": "users.messages.email.Open", "external_user_id": "user-123", "time": 1700000000, "campaign_id": "abc123", "campaign_name": "Welcome" } ] }

The receiver also accepts the write key via the X-Write-Key header, HTTP Basic Auth username, or a ?writeKey= query parameter — useful when testing with curl — but Braze’s Custom HTTP connector uses the Bearer token.

How Data Lands in the Warehouse

All Currents events land in a single table (braze_currents_events by default). Braze’s Custom HTTP payload carries no per-event type discriminator, so events are not split into per-type tables; instead, universal fields are promoted to typed columns and everything else is preserved as JSON — lossless and tolerant of Braze schema changes and per-account custom fields.

ColumnTypeDescription
received_attimestampWhen the receiver durably accepted the event (partition column).
loader_idstringWhich loader produced the row — keeps rows attributable if two loaders share a table.
message_idstringPipeline dedup key (at-least-once delivery), independent of Braze’s id.
idstringBraze’s event id.
event_typestringThe Currents event type (e.g. users.messages.email.Open).
user_idstringBraze user id (braze_id).
external_user_idstringYour external user id.
timetimestampThe event time reported by Braze.
app_id, app_group_idstringApp / app-group identifiers.
campaign_id, campaign_namestringCampaign identifiers, when present.
canvas_id, canvas_namestringCanvas identifiers, when present.
message_variation_id, dispatch_idstringMessage variation / dispatch identifiers.
platformstringDevice platform, when present.
propertiesjsonEvent-specific and custom fields not promoted to a typed column.
rawjsonThe complete original event, exactly as Braze sent it.

Fields specific to a given event type (and any custom fields) live inside properties; the full event is always preserved in raw. Extract them downstream in a model using your warehouse’s JSON functions — for example, in BigQuery:

SELECT event_type, external_user_id, time, JSON_VALUE(properties, '$.button_id') AS button_id FROM braze_currents_events -- your loader's target table WHERE event_type = 'users.messages.inappmessage.Click'

Delivery Semantics

Delivery is at-least-once. Every acknowledged event is guaranteed to reach the warehouse, but under Braze retries or transient failures the same event may occasionally be loaded more than once. Deduplicate downstream on the event id in a model if you need exactly-once semantics.

Troubleshooting

IssueResolution
401 Unauthorized in BrazeThe write key is missing, malformed, or revoked. Confirm the Bearer token in Braze matches an active write key on the loader.
400 Bad RequestThe body is not valid JSON or not a recognized batch shape. Braze’s Custom HTTP connector sends {"events":[...]}, which is accepted; confirm the connector type is Custom HTTP.
Events accepted but not in the warehouse yetLoading is batched, so there is a short delay between acknowledgement and the row appearing. Confirm the loader’s target warehouse and schema are correct.
A field I expected isn’t its own columnOnly universal fields are promoted to typed columns. Event-specific and custom fields are in the properties JSON column, and the full event is in raw.
No events arrivingConfirm the Currents export is launched in Braze (not just saved), the endpoint URL is exactly the one shown on the loader page, and the selected event types are actually being generated.
Duplicate rowsExpected under at-least-once delivery. Deduplicate downstream on the event id.

Next Steps

Last updated on