Frequently asked questions
This page provides answers to some frequently asked questions about Currents.
Can I export campaign or Canvas data for a specific date window?
To pull campaign or Canvas metrics for a defined date range, use one of the following approaches:
- Submit a product request for date-aligned exports when you need dashboard-style reporting outside standard API windows.
- Call the campaign analytics or Canvas analytics endpoints with
ending_atandlengthparameters (or use/campaigns/data_seriesand/canvas/data_series) for time-series data. - Stream events to your warehouse with Currents when you need ongoing, queryable message engagement data in Amazon S3, Azure Blob Storage, or another supported destination.
How do I edit a live Currents integration?
To change a live Currents connector, open the integration and click Edit in the lower left of the page. Without Edit, the integration UI stays read-only and you cannot modify connector settings from the icons alone.
How does Braze handle Azure Blob Storage Avro files after upload?
Braze does not modify Avro files in Microsoft Azure Blob Storage after upload completes. Azure may block deletion of a blob while an upload is still in progress.
How do I get historical data?
Currents is a real-time, live data stream, which means that events can’t be replayed. However, you can store Currents data in a data warehouse such as Amazon S3 or Microsoft Azure Blob Storage, so you can act on past events as you see fit. Data is retained for 30 days, but for more historical data, you can query Snowflake.
Why does Currents output data in the Avro format, not JSON?
Avro, unlike schema-less JSON, natively supports schema evolution. You’ll also benefit from the ability to send Avro files with less bandwidth and saved storage space because Avro is highly compressible.
How does Braze handle file overhead?
We build out an Extract, Transform, Load (ETL) process, which lets you pull large amounts of data from one database to place and store in another.
Where should I store this data for querying?
Braze is partnered with several data warehouses you can store your data in for querying. We recommend using:
How reliable is Currents data?
Currents guarantees “at-least-once” delivery, meaning duplicate events can occasionally be written to your storage bucket. If your use case requires exactly-once delivery, you can deduplicate events using the unique identifier field (id) sent with every event. For more details, refer to Event delivery semantics.
How often is data synced to Currents?
Data is continuously streamed. Braze sends a batch of events every time there is a full batch to send, or every 5 minutes, whichever comes first. For high-volume connectors, data arrives close to real-time. For low-volume connectors, expect data to arrive within 5 to 30 minutes. For more details, refer to Avro write threshold.

If a device isn’t connected to the internet, there may be a delay in creating the event. This is most common for in-app message events, since in-app messages can be triggered offline.
How do I find which events are available for Currents?
For a full list of events that Currents logs, refer to the Customer behavior events and Message engagement events glossaries. You can filter these glossaries by event type (such as sends, deliveries, or opens).
Why do my Currents event counts not match my dashboard or Engagement Report metrics?
Currents and the Braze dashboard calculate certain metrics differently, so exact matches between Currents events and dashboard metrics are not expected.
Unique clicks: For email, the dashboard tracks unique clicks over a seven-day period and measures them by dispatch_id. Currents records each raw click event. To align Currents-based unique click counts with dashboard metrics, filter for events where is_unique is true.
Unsubscribes: The dashboard Unsub metric reflects clicks on Braze’s standard unsubscribe link. Custom unsubscribe pages do not increment this metric unless you update the user through the API. The Currents users.messages.email.Unsubscribe event is a specialized click event that fires when a user clicks an unsubscribe link in the email body or footer, or through the list-unsubscribe header. It does not represent every email subscription state change.
Timestamps and time zones: All Currents timestamps are in UTC. Dashboard metrics follow your company’s time zone. Aggregating Currents data by calendar day without converting to your company’s time zone can cause counts to fall in different date buckets than they appear in the dashboard.
Duplicate events: Currents provides at-least-once delivery, meaning duplicate events can occasionally be written. Deduplicate by the unique id field on each event before comparing totals to dashboard metrics.
Why does the external_user_id (Braze schema: external_id) in my Currents email open or click event differ from the user profile in the Braze dashboard?
- In the Braze dashboard: When a user associated with an email address opens or clicks an email, all user profiles that share that email address are marked as having opened or clicked that email. For more information, see What happens when an email is sent out, and multiple profiles have the same email address?.
- In Currents: That same open or click is stored on one profile. Braze attributes it to the profile that was originally targeted for the send if that profile still shares the email address. Otherwise, Braze attributes it to one randomly selected profile among those that share the email address.
Because of this, the external_user_id value (named external_id in the Braze schema mapping table) on a Currents email open or click event may not match the user profile you expect when you compare Currents to the Braze dashboard.
Are all send events logged to Currents?
All events are logged to Currents. There are no scenarios where an event would be intentionally suppressed from the Currents stream.
Can data be corrupted in Currents?
Under normal circumstances, Currents data is not corrupted. While there is always a possibility of a rare issue, there are no known conditions under which data would be systematically corrupted.
Why do I see custom event data dated before my Currents integration was set up?
Braze does not backfill events to Currents. However, custom events can be logged with a past timestamp (for example, if a device was offline when the event occurred and synced later). In these cases, the event timestamp reflects when the event originally occurred, which may be before the Currents integration was configured.
What user identifiers are included in Currents events?
Message engagement events (sends, opens, clicks, and so on) include the Braze user ID (user_id) and, when present on the profile, the external identifier (external_user_id in event payloads, labeled as external_id in the Braze schema mapping table). Some email message engagement events also include email_address. Custom attributes are not included—see below.
If you are routing Currents data to a warehouse or CRM and need to join on profile data, perform that join in your downstream system using user_id or external_user_id.
Can I include custom attributes in Currents send events?
No. Currents does not include custom attributes in send events. Currents logs custom events and message engagement events. For a complete list of available fields, refer to the event glossaries.
Does Currents include campaign or Canvas tags or key-value pairs?
No. Currents does not include campaign or Canvas tags or message-level key-value pairs. To retrieve tag data, use the Export REST API. As another workaround, you can use a webhook channel in a campaign to send tag or key-value pair data to your own endpoint, using Liquid to template the values.
How does Braze notify customers of changes to Currents?
When Currents changes occur (such as new event fields or event types), Braze sends an email to all customers with active Currents integrations who have used the dashboard within the past 30 days. You can also refer to the Currents changelog for latest changes.
How much storage do I need for Currents data?
Storage requirements depend on your event volume and the types of events you’re exporting. Braze provides sample events in Avro format that you can use to estimate file sizes for your use case.
Why is the campaign name or Canvas step name NULL in my Currents data?
When you create a new campaign or Canvas, the name may take some time to propagate through all Braze systems. Events sent through Currents during this window may have NULL in the name fields (such as campaign_name or canvas_step_name). This is also expected if the name was modified shortly before the events were logged. To avoid this, allow some time after creating or renaming a campaign or Canvas step before sending.
Why are session end events delayed or missing in Currents?
Session end events follow the SDK’s normal upload schedule. The Braze SDK caches session data locally and flushes it periodically based on network quality—for example, about every 10 seconds on a strong connection. Until the SDK uploads the event, it doesn’t appear in Currents.
If a user force-quits the app or goes offline before the next flush, the session end event may arrive late or not at all. On iOS, session end events often don’t flush until the app reopens because the SDK can’t send data while the app is in the background.
When you need timelier session boundaries in Currents, call requestImmediateDataFlush() at lifecycle points such as when the app moves to the background or returns to the foreground. For more information, see Data upload and download and Session end and session start have similar timestamps (iOS).
What happens if my storage bucket is unavailable when Currents tries to write data?
If your storage bucket is unavailable at the time of data transfer, that data is lost. Braze is not able to backfill events that were not successfully delivered. To avoid data loss, ensure your storage bucket is available and properly configured at all times.
Why do I see “You do not have any remaining Customer Behavior Events entitlements” when editing my Currents integration?
This message can appear when you update an existing Currents integration, and your workspace has reached its entitlement limit for customer behavior events. Contact your Braze account manager to request an entitlement or adjust your configuration.
How often does the Currents version in the storage path change?
The version=<currents_version> segment in the storage path advances with each Currents release on a monthly cadence (for example, version=6 to version=7). We recommend reading files recursively from the root path rather than hardcoding a specific version segment, so your pipeline automatically picks up data after a version change. For more details on the path format, refer to Event delivery semantics. For a history of changes by version, refer to the Currents changelog.
Why are campaign_id or canvas_id missing from a message engagement event?
Depending on the event type and context, a message engagement event may not be tied to a specific campaign or Canvas step. In those cases, campaign_id, canvas_id, and related name fields can be omitted from the event payload. If you don’t see those fields on a given event, check whether that event type and context normally include campaign or Canvas identifiers.
Why are Currents timestamps limited to second precision?
The time field in Currents events is stored as a 32-bit integer and is thus limited to second precision. Some events also include a separate 64-bit millisecond-precision timestamp field; check the event glossary for the fields available on each event type.
Why does the users.canvas.Conversion event from Currents have a different time than the Canvas?
The users.canvas.Conversion event time in Currents reflects the total conversion window — the Canvas duration plus the conversion deadline — measured from Canvas entry.
What happens when Engagement Reports are sent to S3?
If S3 credentials are configured for Data Export but not for Currents, Braze uploads Engagement Reports to the specified S3 bucket. The user listed in the Send Report To field receives an email with a link to the report in S3.
Can anonymous user data be sent to Amplitude through Braze Currents?
Anonymous user data, identified by device_id, can be sent to Amplitude through Currents. This requires feature enablement by your Braze account team.
How are control group impressions for Content Cards and in-app messages logged in Currents?
When a user is assigned to a control group for a Content Card or in-app message campaign, Currents emits a users.campaigns.EnrollInControl event rather than an impression event.
What happens when you target a non-existent user through the API?
When you target a user who does not exist, the API returns a 200 response, but the send is canceled with the outcome “Unknown external ID”. No Currents events are generated for that send. Note that the send_to_existing_only parameter defaults to true, so sends to unknown users are silently skipped unless you explicitly set it to false.