August 31st, 2026
API
Audience definitions and downloads picked up several changes this month that affect how you build, poll, and read them over the API.
List-based filters in an audience definition now carry real boolean grouping. The condition marker on a list group is read when the definition is transformed, so you can express combinations such as two lists matched with OR and a third required with AND in a single audience. Send it on POST /api/v1/audiences or PUT /api/v1/audiences/{id}, and read it back from GET /api/v1/audiences/{id}.
GET /api/v1/audiences/{id}/download now reports normalized preparation stages and job progress for an audience that is still being built, and treats active build states as pollable rather than terminal. Terminal failure reasons are preserved, so a client polling the endpoint can distinguish "still preparing, here is how far along" from "this run failed, and here is why." Requested full-download intent is persisted, so preparation continues even if the requesting client disconnects.
An audience built at company grain now populates account_count, the number of companies it contains, alongside the existing size field. Audience reads previously carried this field without a producer ever writing it, so integrators rendering a company audience no longer have to infer the unit from the audience type.
contact is the audience type valueThe audience type formerly written as elixir is now stored and returned as contact. Both spellings are accepted on write, so existing integrations keep working unchanged, and readers should treat contact as the canonical value on GET /api/v1/audiences and GET /api/v1/audiences/{id}. This rolled out across the platform, so the value is consistent wherever an audience type appears.
The monthly spend ceiling an organization configures for itself now applies to the two largest sources of metered spend, and refuses over budget with a documented response instead of serving the request.
GET /api/v1/audiences/{id}/download consults the organization's configured monthly budget before serving a download. A request over the ceiling is refused with 402 and a body naming the reason and the limits that applied, matching the refusal shape the API key and export surfaces already return.
The metered data endpoints, including GET /api/v1/lookup and the event tier reads under GET /api/v3/events/web_event, now consult the same budget decision and answer 402 with the shared refusal body when the ceiling is reached. If you meter your own consumption against a configured ceiling, expect 402 on these routes rather than a successful response once the ceiling is hit.
The events API now honors project-level membership on JWT authentication. A user with membership only at project scope receives data from GET /api/v3/events/web_event and the other tier reads instead of 401.
record_limit on an audience is applied once at the end of the build rather than being dropped, so GET /api/v1/audiences/{id}/download returns the top records up to the limit instead of the full record set.
A download whose underlying build was cancelled now triggers a rebuild instead of polling indefinitely against a prefix that will never produce output.
Soft-deleted lists no longer appear as attached in GET /api/v1/campaigns/{id}/lists.
An export run refused for exceeding a configured spend limit now returns the budget refusal, with its reason code and limits intact, instead of collapsing into a generic server error.
For full endpoint details, parameters, and examples, see our developer documentation.
August 31st, 2026
Platform
Agencies can now run the dashboard on their own domain, complete with their own branding on the sign-in screen. Audience builders got AND/OR grouping for lists and a searchable intent-topic picker that pages through every match, and campaigns picked up Index Exchange deal targeting plus clearer audience language throughout.
14 new features, 11 improvements, 18 fixes.
Serve the platform on your own hostname, from the first screen a client sees.
Your organization can now register its own hostname for the dashboard, verify it, and have the platform serve on it. The setup screen walks through the DNS record you need to add, reports whether the domain is live, and tells you plainly when something needs support attention rather than asking you to retry. Releasing a domain frees the hostname so you can register a different one.
Sign-in, forgot-password and reset-password now render your organization's logo when reached on your own domain, so a visitor sees your brand before they have signed in rather than after.
More expressive targeting, and a topic picker that can actually reach the whole taxonomy.
The Lists section of the audience builder and editor now has the same AND/OR grouping control that Personas, Companies, Intent topics and Additional Filters already had. You can combine two lists with OR and a third with AND, and the grouping you set is what the build honors.
Searching the intent-topic picker now pages through the full set of matching topics instead of showing the first handful. A broad term like "Business" matches thousands of active topics, and you can now reach all of them from the picker.
An audience download with a record limit now returns your highest-scoring rows rather than an arbitrary sample, and the limit is applied once across the whole audience.
Starting an audience from a composite template now marks which parts your project already has and counts only the new definitions it would create, so the confirm button matches what actually happens.
The template catalog got the vocabulary, provenance and navigation it was missing.
Catalog entries now carry multiple tags instead of a single category, so a persona can be findable as a buying-committee role and technical and enterprise at once, and the template picker can be filtered by tag.
The Source column now names the template a definition came from, carried through clones. When a template you copied has moved on, you can see exactly what changed field by field, and apply those changes one at a time rather than all or nothing.
The template catalog is now reachable from the persona, company profile and audience list pages.
The campaign wizard's Advanced settings now includes an Index Exchange deal ID field, so a campaign selecting that exchange can target private deal inventory instead of open-market supply only. Deal IDs are delivered to the DSP at launch.
Campaign surfaces now say "audience" consistently, and the audience step states plainly that selecting multiple audiences targets their union. A draft campaign's Overview now shows the audiences you selected, not just what has been attached after launch.
The Statistics resolution card now grades your match rate using a confidence interval over the events you actually have, so a project with real, readable resolution gets a verdict instead of an empty dial.
The Identity table's pager now shows the current page number, the visible row range, and a rows-per-page selector, matching every other table in the dashboard.
The audience download modal now shows real build stages and job progress, keeps polling until the build reaches a terminal state, and makes clear that you can close it and reopen for current status.
A coupon applied to your subscription is now visible on the Subscription page immediately, rather than only appearing once a finalized invoice exists.
Billing banners now render at project scope. Exports, campaigns and audiences are all project-scoped, so the banner explaining why a scheduled export is being withheld now appears where you would actually see it.
The company profile detail page now reports its size in companies rather than people, and the surface is now named "Companies" consistently across the sidebar, page title and breadcrumbs.
Exports and downloads
An export "Run now" that is refused by your spend gate now returns the actual reason and the limits involved, instead of a generic failure.
The spend-gate refusal message now names exports specifically, rather than pointing you at API access you were not using.
A download whose underlying build was cancelled now rebuilds instead of polling indefinitely on "Finalizing download files".
The download poll no longer times out before the server finishes re-signing links, which could leave a ready file unreachable.
A build that never starts is now bounded and reported instead of sitting indefinitely while a download waits on it.
Audience builds requested from a download now claim ahead of scheduled refreshes, so a build you are waiting on is not queued behind cron work.
An audience carrying its own selected columns no longer fails its daily rebuild with a missing-column error.
Audience builder
Switching between simple and advanced grouping mode no longer scrolls the section you clicked several hundred pixels off screen.
The Definition card on persona, company and audience detail pages now fills its column and bounds its height, so a condition-heavy definition scrolls rather than stretching the page and a sparse one leaves no dead space.
Opening a template from the catalog picker no longer fails when the entry carries no tags.
Campaigns
Campaigns can no longer be created with a creative rotation setting the DSP rejects, which previously produced a launch that would not work with no indication why.
A soft-deleted list no longer appears as attached to a campaign.
Sign-in and access
Signing in with Google or Microsoft using an address with no account now explains why it was refused and points you at the right next step, instead of asking you to try again.
The Create Organization action is now gated on your actual permission, so a correctly provisioned Owner sees it.
Project-only members no longer receive authorization errors from the events API, which the identity dashboard was showing as empty resolution data.
Elsewhere
The inventory table no longer amplifies a single failure into repeated requests, and now reports the freshness of its API counts.
The close button on dialogs and sheets no longer paints a focus ring on every open, only on keyboard navigation.
Newly provisioned organizations no longer receive an unintended billing threshold.
August 4th, 2026
Platform
The dashboard now leads with an addressable resolution rate that measures only the traffic identity resolution can apply to, so the number on your Statistics page reflects reachable visitors instead of bots and international requests. Intent Taxonomy also gained a one-click path into the audience builder, and lists can now be the source of an audience rather than only a filter on one.
24 new features, 18 improvements, 26 fixes.
Resolution reporting changed shape this month, and the numbers on the Statistics page and organization dashboard now answer a different question than before.
Every resolution rate in the dashboard is now measured against addressable traffic: the visitors identity resolution can apply to at all. Traffic that can never resolve, such as automated link-protection scanners and requests outside the coverage area, no longer sits in the denominator and drags the rate down. The Statistics headline gauge, the resolution funnel, and the organization dashboard all lead with this figure, so an email campaign that trips corporate link scanners no longer reads as a collapse in match rate.
Audiences gained a new source type and clearer sizing.
An uploaded list can now be the source of an audience instead of only a filter applied to the contact database. Pick Contact database or Uploaded list at the top of the builder; a list-sourced audience carries a read-only source card on the edit screen showing which list it draws from, and it exports to any destination like any other audience. A matched mode expands each resolvable value in your list to that person's full set of known identifiers.
The export creation flow and the audience detail page now show the count that will actually be delivered, so the number you see before running an export matches the number that lands at the destination. Stored audience counts are also labeled as exact rather than dressed up as sampled estimates.
The builder is now a two-column layout with a persistent right rail holding the live reach estimate and the remaining-steps checklist, so both stay visible instead of being buried at the bottom of a long scroll. The estimate shows a recomputing cue while it updates, and failures in the estimate or the personas and companies lists now surface instead of rendering as nothing.
The campaign wizard's Audience step is now a checkbox list, so a campaign can target several audiences at once. Recommended budget and estimated reach size against the combined selection, and each selected audience is delivered to the ad platform as part of the same campaign.
Creatives now accept JavaScript impression trackers, impression pixels, and click trackers in both the single-creative and batch creative flows, and those values are forwarded to DelivrDSP so your agency and verification vendors can measure delivery independently. Trackers a given creative type cannot carry are rejected in the form with a readable message rather than failing silently at the ad server.
The creative asset library and a campaign's creatives tab now support selecting multiple creatives and removing them in one action, with a confirmation dialog listing what will be deleted.
Before you build a campaign, the create flow now checks that the project's DelivrDSP connection can actually create campaigns and tells you up front if something is missing, instead of letting you configure an entire campaign and discover the problem at launch.
Selecting a paused audience in the campaign wizard now explains that it needs to be reactivated first, with a pointer to where to do that, rather than showing it as simply unavailable.
The billing area now shows a DelivrDSP campaign rollup: one collapsible row per project, with rolled-up budget, spend in the selected date range, and cumulative spend to date. Expanding a project reveals its campaigns with name, status, lifetime budget, and spend, so you can track delivery against budget across all your accounts in one place.
You can now deposit media funds through a hosted payment screen using your saved card, and see how much of that deposit is still free to allocate to a new campaign. The deposit and available views live at the organization level, where the spend rollup is.
The final screen before a media funds charge now restates the amount being charged, offers a way back to the previous step, and distinguishes a declined card from other payment outcomes instead of labeling every failure a decline.
Your organization's monthly record usage is now readable against its contracted ceiling, so approaching the limit is visible before a request is refused.
The Export Status list now shows how many records the last run delivered and, when a run failed, why. Both were previously only available by opening each run individually.
Export run detail now distinguishes an export waiting on its source audience from one that failed at its destination, and shows the wait reason rather than an unexplained retry counter followed by a bare failure.
Multi-day and weekly Email exports now honor the "Combine output into a single file" toggle, delivering one file instead of one per day.
Small list uploads now take a direct path that does not queue behind large imports from other accounts, and the upload dialog reports queued and processing states honestly instead of parking at a fixed percentage.
Clicking anywhere in the List Upload dialog's dashed drop area, including the icon and instruction text, now opens the file picker. Previously only the word "browse" was clickable.
A new recipe covers removing identifiers from a list, mirroring the existing add-values recipe, so you can drop records for people who have exited a segment.
A new Developers page gives new integrators one place to start: where to get an API key, where the API Explorer is, and where the docs live. It sits in organization navigation, matching where API keys are managed.
The API Explorer now opens with a Guided flows panel offering ordered, task-shaped walkthroughs such as scoring intent for your contacts, querying resolved visitor events, and building and pulling an audience. Selecting one steps you through the calls in order with Previous, Next, and Exit controls.
The API Explorer's 65 recipes across 11 groups now lead with a pinned Common section covering the handful of first-hour calls, and endpoints that meter billable usage carry a cost indicator so you can see before running one whether it charges.
The events recipes now target routes where the billing tier is fixed by the URL you choose, and each supports a dry-run cost preview so you can see the exact cost of a query before running it.
The audience detail page now carries a Pull via API section with the audience id, a ready-to-run request for downloading it, and a pointer to where to get an API key.
Intent lookup and batch lookup now accept a LinkedIn profile URL, and the company endpoints accept a LinkedIn company URL, so a caller holding a profile link can get intent topics in one step.
The people and companies preview endpoints now have multi-topic siblings, so you can sample across several topics in one call while configuring a source. Previews can also resolve to a hashed email plus a masked email so you can recognize who is in the sample.
The Tutorials hub, the guided tours, and the getting-started launcher are now available to all customers. The hub is laid out as a card grid with a progress band, a time estimate per tutorial, and a single Continue action that launches the next incomplete tour. Tours are ordered by dependency: build an audience, then create a campaign, then set up an export.
The workspace setup checklist now lives on the Tutorials hub, so it is reviewable after setup is finished rather than disappearing the moment the last step completes. Once every step is done it collapses into a summary so the tour cards stay above the fold.
After installing a pixel, the install card now actively watches for your first event and confirms when it arrives, instead of leaving you to guess whether the install worked.
An Appearance control (System, Light, or Dark) now sits in the dashboard header alongside the existing Profile Settings option, and the app defaults to light rather than following your operating system without you having asked.
The Segmentation group now shows a single Audiences entry instead of separate Audience Builder and Your Audiences items. The API Explorer now appears in project-level navigation, where most work happens, rather than only at the organization level.
Audiences
Turning the Intent switch off and saving now actually removes intent targeting from the audience
Retrying an audience refresh now rebuilds it instead of returning the previous result unchanged
Count-only intent audience builds now produce a Sample People table
Saving a list-sourced audience no longer shows a raw field-name error; rejections are now readable, and validation errors surface as a toast instead of failing silently
The audience edit screen now recognizes list-sourced audiences and no longer disables Save on them
Stored audience counts are no longer labeled as estimates
Exports and lists
Fixed exports that sat retrying for hours with no explanation before failing
Fixed an audience left in an unreadable state that parked its export indefinitely
Removed a duplicate Frequency heading in the export creation Schedule step
The export Overview destination card now groups output fields instead of rendering roughly 100 chips as a flat wall, and the Last run tile now matches the height of its neighbors
Campaigns and DSP
Fixed campaign launches failing with an access-denied message for every organization
Fixed the Exchanges dropdown in the New campaign wizard failing to load
Newly created and newly edited campaigns now reflect their current state right away instead of waiting for the next daily sync
Ad impression events from Activate pixels now record correctly
Dashboard and display
Fixed every dashboard route rendering an error boundary
Dashboard pages no longer break for users with a session open during a deploy
Long audience names no longer push the status badge, action buttons, and menu off the right edge of the page header
Table headers now stay visible while scrolling long lists
A failed data fetch now shows a retryable error instead of an empty state that implies you have no records
Transient failures on detail pages no longer show the "not found" screen; that screen is now reserved for records that genuinely do not exist
Fixed a large empty band between the Guided flows card and the request console in the API Explorer
Fixed washed-out status badges, an invisible logo, and light-rendered loading screens in dark mode
Option cards throughout the product are now reachable and operable by keyboard, and topic actions in Intent Taxonomy can be opened without a mouse
Forms on full-page screens now submit on Enter
Feature-gated pages no longer disappear for users who should see them
Reporting and data
Fixed the addressable resolution count exceeding the total resolution count and drifting between page loads
The Sources overview event breakdown now reflects the event types a pixel actually records
Fixed multi-source visitors rendering with a single source badge in the resolved visitors list
August 4th, 2026
Platform
The audience builder now shows live reach as you add topics and filters, so you can size an audience before you save it. We also added connection health warnings to Connections, clearer export progress, and last-download visibility to help you spot audiences you are no longer using.
5 new features, 5 improvements, 6 fixes.
Sizing an audience no longer means saving it first and waiting for a build.
As you add intent topics and filters, the builder now shows live distinct reach (people, emails, and mobiles) that updates as your definition changes. You can dial an audience in to the right size before you save it, instead of building, checking the count, and rebuilding. The estimate is powered by a new sub-second sizing service, so it keeps up as you edit.
The Total Size card on an audience's detail page now reflects current distinct people, emails, and mobile reach rather than the counts captured at the last build. Mobile-reachable reach now populates correctly where it previously showed a placeholder.
Stale integration credentials are now easy to spot before they cause a failed export.
Connections and the Exports list now surface each integration's connection status. When a credential goes stale, you see a clear "reconnect your integration" prompt and the reason an export was paused, instead of a cryptic failure after a long-running job.
Small additions to help you find audiences that are still consuming compute but no longer in use.
Your Audiences list gains a sortable Last download column, and the audience detail page now shows "Last download: Never" and "Refreshed: Never" for audiences that have never been consumed. This makes it easy to identify renewing-but-unused audiences at a glance.
Export run stages now render as readable labels (for example, "Creating targets") instead of raw internal keys, across every stage a run can move through.
For Salesforce and HubSpot timeline exports, records intentionally skipped (such as unsupported event types) now appear as informational notes rather than being counted as failures in the run's Errors tab.
Large images are now compressed more aggressively in the browser, and oversized video is downscaled before upload. Your creatives upload faster and land at a right-sized asset without a visible quality drop.
When you file a bug report from the dashboard, you now get an in-app and email confirmation that it was received, and another notification when it is resolved, so you learn the outcome without checking back.
The dashboard now uses People and Companies throughout the navigation, page titles, and buttons, aligning the product language with person-level and company-level targeting.
Large list uploads now hand off to a background import with a clear message instead of timing out, and bulk list deletion reflects immediately in the table while the removal completes in the background.
Connections
DelivrDSP integrations that had disappeared from the Connections view now appear again across all projects. No data was lost.
DelivrDSP integrations and export destinations now consistently show the DelivrDSP name.
Audiences
Phone number targeting lists now match correctly; previously they could return zero matches.
Audiences no longer get stuck in a pending state and now build as expected.
Editing an intent audience to remove all of its topics now saves instead of returning an error.
Settings
Fixed missing spacing between the input and footer buttons in the Create API key and Create app dialogs.
June 3rd, 2026
API
Audience responses now carry richer reach and signal data for developers reading them programmatically.
Audience responses now include a distinct_profile_count field reporting the number of unique resolved profiles, separate from the raw record count (which can be larger because a profile may carry multiple records). Both GET /api/v1/audiences and GET /api/v1/audiences/{id} return it, so you can report true reach without post-processing the download.
The audience sample endpoint now returns two additional per-contact fields: intent_frequency (how many times a profile appeared in the audience over the lookback window) and impression_count (ad impressions served to that profile over the same window). These are available on GET /api/v1/audiences/{id}/sample for intent and persona audiences, giving a graded signal rather than a binary match.
Two changes tighten credential handling. Review them before your next integration build.
API key authentication now validates the key and its secret together. Send the secret in the X-Api-Secret header alongside X-Api-Key. For clients with secret enforcement enabled, a request presenting a valid key without the matching secret is now rejected. If you have only been sending the key, add the secret you saved at creation time.
Application credential reads through GET /api/app/get and GET /api/app/retrieve/{app_id} no longer return the raw client secret. Credential validation now compares a hash of the secret you supply, so store the secret issued at creation time; it cannot be read back from the API.
POST /api/v1/audiences/{id}/refresh against a paused audience now returns a 409 with a structured reason, instead of reporting success without actually queuing a rebuild. Resume the audience before requesting a refresh.
GET /api/v1/audiences/{id}/download no longer return a spurious 400 when upstream data lands late for an otherwise-ready audience.GET /api/v1/audiences no longer returns 500 for projects in certain organization hierarchies.For full endpoint details, parameters, and examples, see our developer documentation.
June 3rd, 2026
Platform
The headline this month is full creative management: you can now author, preview, and manage every ad creative format directly on a campaign. Resolution Statistics now explains exactly why traffic went unresolved.
10 new features, 8 improvements, 9 fixes.
Creatives are now a first-class part of the campaign workflow instead of a disconnected file list.
Every campaign now has a Creatives tab where you can create, preview, edit, and manage the creatives that run on it. The list is paginated so campaigns with many creatives stay navigable, and an accordion preview lets you inspect each asset inline. This connects creatives to the specific campaigns they serve, with a clear lifecycle for each one.
The creative type picker now supports image, audio, HTML, and native formats in addition to video, covering the full set of customer-authorable creative types in one flow.
The Specs column on the Creatives screen now shows image dimensions and audio duration, read directly from the file as you upload it, so you can confirm an asset is the right size or length before attaching it.
Each creative now shows its DelivrDSP moderation status as a badge, surfaces the decline reason when one applies, and can be refreshed on demand so you always see the current review state without re-editing the creative.
The Resolution Statistics page now shows a priority-ordered "why unresolved" funnel with a hero strip for total, addressable, and addressable resolution rate. Each visit lands in exactly one bucket, so you can see at a glance what is limiting resolution instead of reading a flat traffic breakdown.
When a pixel sees heavy international traffic, the page now surfaces the US-only resolution rate, since resolution applies to US visitors. This gives a representative headline number instead of one diluted by traffic that was never addressable.
The attribution funnel now shows a status badge (live, paused, ended, scheduled) per campaign and lists only campaigns active in the selected window, so a live campaign with zero impressions reads as an alert rather than blending in with archived ones. The funnel hides entirely for projects with no display activity.
Audiences now report distinct profile count alongside record count, separating true reach (unique people) from raw record volume. The audience list, details card, and preview all show the distinct count as the headline figure.
Intent audience contact samples now include intent frequency (how often a profile appeared within the lookback window) and impression count, giving a richer signal than a simple match.
The audience detail page now has an "Activate as campaign" action that creates a campaign, sets budget and schedule, and attaches the audience's list in one step.
The audiences list and detail page now show when an audience was last downloaded, even for audiences no longer held in memory, so you can tell whether your local copy matches the current size.
Scheduled audience export runs now clearly mark when a run shipped no new rows because the underlying audience snapshot had not changed, with a "Source as of" date so consecutive identical runs are explained rather than confusing.
You can now enroll an authenticator app (Google Authenticator, 1Password, and similar) as a second factor from a new Two-Factor tab in your profile, with QR enrollment and backup codes. At sign-in, a method toggle lets you choose your authenticator, and a backup-code entry path is available if you lose access to your device.
A new settings page lets you manage per-pixel event-volume alert rules, with an inline incident banner on the Resolution Identity page when volume drops unexpectedly.
The Settings API Keys panels now show app-credentialed and API-key traffic together in one source-tagged view, with a source filter and a By-Source tab. You can also see and toggle whether each API client requires a secret.
The Accounts tab and its CSV export now include companies reached through display activity, not just pixel touches, for a fuller account-level view. The Buyers tab CSV export was likewise extended to include display touches.
Advertise is now nested under Main Feed so the segment-to-advertise-to-measure flow reads as one continuous path, with aligned breadcrumbs.
Audiences
Creatives
Resolution and statistics
Filtering and exports
May 1st, 2026
API
The lists and campaigns endpoints now accept API-key authentication. Previous scope gates have been removed: API-key callers reach the same surface as session callers.
GET /v1/lists
GET /v1/lists/{list_id}
POST /v1/lists
GET /v1/campaigns
GET /v1/campaigns/{campaign_id}
Authentication:
Authorization: Bearer <api_key> - Standard API-key header. No additional scope is required.
Example:
curl https://api.delivr.ai/api/v1/lists \
-H "Authorization: Bearer $API_KEY"
Developer tokens can query DSP events filtered by campaign_id against the v2 events API. The proxy translates the v2 source parameter to the upstream contract.
GET /v2/events
Parameters:
source (string) - delivrdsp
campaign_id (string) - Campaign to filter events by.
start_time (string, ISO 8601) - Inclusive lower bound.
end_time (string, ISO 8601) - Inclusive upper bound.
Example:
curl "https://apiv3.delivr.ai/api/v2/events?source=delivrdsp&campaign_id=cmp_abc123&start_time=...&end_time=..." \
-H "Authorization: Bearer $API_KEY"
The events API supports project-scoped DSP queries, returning events for all DSP campaigns under a given project.
Parameters:
project_id (string) - Restrict results to events belonging to this project.
Audiences accept an intent_window_days value on create and edit. Bucket counts scale to match the selected window.
POST /v1/audiences
PATCH /v1/audiences/{audience_id}
Parameters:
intent_window_days (integer) - Number of days of intent history to consider when building the audience.
Response:
audience.intent_window_days (integer) - The configured window.
audience.bucket_counts (object) - Counts scaled to the configured window.
Rate limits on the data API are now applied per organization rather than globally. Each organization receives 25 requests per second with a burst capacity of 50. Integrators making concurrent requests across many organizations are no longer constrained by a shared global limit.
Response headers:
X-RateLimit-Limit (integer) - 25
X-RateLimit-Remaining (integer) - Tokens remaining in the current second.
X-RateLimit-Burst (integer) - 50
Retry-After (integer, on 429) - Seconds to wait before retrying.
Migration note: Clients previously throttled by the global limit will see additional headroom. Clients running heavy traffic against a single organization should still implement exponential backoff on 429 responses.
DSP exports no longer fail with pixel not found when source and campaign ID are not threaded into the event query.
Empty audience exports complete with zero records instead of failing the run.
Fixed an end_date boundary mismatch between SQL and application code in export queries; the boundary is now consistent across the stack.
Fixed a race where an export run could continue executing after the export was disabled.
Audience filters with very large inline value lists now spill values to S3 instead of failing the count worker with E2BIG.
The contains filter no longer splits multi-word values on commas.
Audience download presigned URLs are re-signed on every download call, eliminating expired-URL errors on retry.
Email subject templates are interpolated on every export send path, including batched, streamed, and multi-file exports.
The email export windowed path now defaults the S3 bucket instead of erroring with s3_bucket is required.
S3 exports fail fast with a clear error when integration credentials are empty or partially populated, instead of erroring deep in the run.
For full endpoint details, parameters, and examples, see our developer documentation.
May 1st, 2026
Platform
A heavy month for exports, with new ways to schedule, name, slice, and format the files we deliver to your destinations.
You can now define a filename template when creating or editing a file export destination. Build the pattern in a pill-based template builder and see a live preview of how output files will be named before you save.
One-time exports now support date ranges up to 365 days. Larger historical pulls run as a series of windows so they complete reliably, with progress visible while the run is in flight.
Pick the exact start and end date you want when running a one-time export instead of relying on a fixed lookback. Both the create and edit screens accept the user-provided range, with validation on the backend.
Daily and weekly recurring exports can now be anchored to a specific run time and a specific day of week. The scheduler enforces those anchors so runs land when you expect them.
A new "Unique contacts only" toggle on file exports deduplicates rows by hashed email so each contact appears once per output file.
A new combineOutput toggle on file destinations writes a single combined artifact for multi-window exports instead of one file per window.
S3 export destinations now accept JSONL alongside the existing file formats, making it easier to feed export output directly into JSON-native downstream systems.
A new export type pulls raw DSP event logs straight from campaign reporting. Choose the Raw Logs format when creating an export to deliver the underlying event records to your destination.
File destinations can now receive an empty file when an export produces zero records, so downstream automations that watch for a delivered file no longer stall. The behavior is controlled by an emitEmptyFile toggle on the destination.
Completed one-time exports are now periodically archived, and the exports list gained an "Include archived" filter so you can show or hide them.
After an export exhausts its automatic retries, manual re-triggers are gated behind a cool-off window so a single export can't be re-launched repeatedly while it is still in a failure state.
The Resolved Only toggle is now available on the export edit screen, not just on create, so you can flip it on for an existing export without recreating it.
The export overview now displays the data watermark for the export so you can see how recent the underlying data is. Scheduled exports also use this watermark when computing the date range for the next run.
Export filenames and project folder paths now preserve the original case from your destination configuration.
The subject template you configure on email exports is now interpolated across batched, streamed, and multi-file send paths, not just single-file sends.
DSP-related flows in the dashboard were renamed, scoped, and expanded.
The DSP source is now labeled DelivrDSP across the audience and export flows.
Projects are now limited to a single DelivrDSP connector and a unique account ID. Attempting to add a duplicate surfaces a clear uniqueness error instead of failing silently.
The export create flow now shows a two-level data source selector when DSP is chosen: pick the DSP and then pick the specific campaign to export from.
DSP queries can now run against all projects in scope and include inactive campaigns in the result set.
The export field selector now exposes DSP-specific event fields when the source is DSP, including HEM and client IP, so you can pull additional event-level attributes into the output.
Audience configuration gained finer controls and clearer feedback.
Audience create, edit, and detail screens now expose an intent window slider so you can choose how many days of intent signal feed into the audience.
The audiences list now shows when each audience's size was last computed, so you can tell at a glance whether the displayed size reflects a recent refresh.
Multi-value text filters in the audience, persona, and account condition builders now render as chips, making it visually clear when multiple values are targeted in a single condition.
March 31st, 2026
New controls for managing export output, error visibility, and destination configuration.
You can now set a record_limit parameter when downloading audiences or creating exports to cap the number of records returned. The limit can also be cleared on existing exports by setting it to null in the update payload.
When exporting an audience to DelivrDSP, the audience name is now automatically carried through as the DSP list name. You can also provide a custom list name via the optional list_name field on export creation.
Export run responses now include per-record error details. The object_type_results field on export run objects breaks down success and failure counts by CRM object type, with individual error messages available for failed records.
Improvements to how data is prepared and validated before CRM export.
CRM exports now enforce per-field character limits, apply automatic normalization, and support configurable default values. Multi-value fields that exceed destination limits return a MULTI_VALUE_TOO_LONG error code instead of silently truncating.
HubSpot exports now automatically create or attach company records when writing contacts. Pixel activity is also written to the contact's HubSpot timeline so on-site behavior shows up natively in HubSpot. No additional configuration is required for existing HubSpot integrations.
New filtering and bulk operations for list management.
A new bulk delete endpoint allows you to remove multiple list uploads in a single request by passing an array of list IDs.
The list uploads endpoint now accepts type and source query parameters to filter results by upload type and originating source.
The audience preview endpoint now accepts a limit query parameter to control the maximum number of preview rows returned.
New data available for programmatic campaign analysis.
DelivrDSP campaign responses now include match rate data, showing how many exported contacts were matched by the DSP. This data is available through the campaign performance endpoints.
DelivrDSP campaign performance is now persisted with per-day granularity, so daily delivery, spend, and CPM trends are available through the campaign performance endpoints.
A new webhook endpoint accepts UID2 opt-out notifications. When a user opts out through the UID2 framework, their record is added to a unified privacy opt-out registry with a full audit log. Both GET and POST are supported to accommodate different UID2 operator configurations.
New options for controlling pixel behavior.
Organizations can now enable cookieless pixel collection through the organization settings API. When cookies_enabled is set to false, pixels deployed for that organization will not set or read browser cookies. Existing pixels are regenerated automatically to reflect the new mode.
Pixel event payloads now include source-level custom fields in the event_data object, allowing richer context to flow through from pixel sources into downstream processing.
record_count field being returned as the wrong type in event ingestion responsesRUNNING state when the dashboard tab disconnected mid-syncFor full endpoint details, parameters, and examples, see our developer documentation.
March 31st, 2026
New tools for managing audiences and list uploads more efficiently.
You can now set a record limit when downloading audiences, giving you control over file size and processing time for large audiences.
Bulk delete is now available for list uploads, letting you clean up multiple lists at once. You can also bulk retry failed personas, accounts, and audiences directly from their respective tables.
The list uploads table now supports filtering by type and source, making it easier to find specific uploads in large workspaces.
Audience preview reports now sort contacts by intent relevance, grouping results so the highest-intent contacts appear first. The preview also now clearly displays AND/OR logic between conditions.
You can now drag and drop conditions between groups in the audience builder, making it easier to reorganize complex segmentation rules.
More control and visibility into how your data exports are configured and performing.
S3 exports now support a custom path prefix, letting you organize exported files into specific folders within your bucket.
When exporting an audience to DelivrDSP, the audience name is now automatically carried over as the list name in the DSP, so you no longer need to re-enter it.
Export run pages now show per-record error details, broken down by object type. When a CRM export partially fails, you can see exactly which records failed and why.
The CRM export configuration now includes per-field default values, field constraints, and smarter handling of multi-value fields. Errors are grouped by type so you can quickly identify patterns.
Export names are now fully visible in the dashboard instead of being truncated, so you can distinguish between similarly named exports at a glance.
Better visibility into DSP campaign performance and match quality.
Campaign reporting now shows match rates for your DSP exports, so you can see how effectively your audiences are matching in the ad platform.
A new "Sync Now" button on the DSP campaign overview lets you pull the latest campaign data without waiting for the next scheduled sync.
The pixel list now distinguishes between website pixels and activate pixels, making it clearer which type each pixel is.
Improvements to finding what you need across the dashboard.
Search now supports multi-token ambiguous matching. Searching for "acme corp" will find "Acme Corporation" and similar variations, making it much easier to locate organizations and projects.
Clicking a notification in the bell menu now takes you directly to the relevant page, such as the completed export or failed run.
New users now see a streamlined two-step onboarding flow with a setup checklist and helpful empty states to guide them through creating their first pixel, audience, and export.
Improvements to how contact data is displayed and filtered.
The resolution statistics table now includes the pixel name alongside each entry, so you can see which pixel drove each resolution.
Contact details now show proper title casing for names and fields, cleaner boolean formatting, and better layout for long values.
Organization settings now include a cookies toggle, allowing you to enable cookieless mode for privacy-first deployments. When enabled, your pixels will operate without setting browser cookies.