Release Notes

Follow new updates and improvements to Delivr.ai.

August 31st, 2026

API

Audiences

Audience definitions and downloads picked up several changes this month that affect how you build, poll, and read them over the API.

AND/OR grouping across list filters

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}.

Download preparation stages and progress

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.

Company counts on company-grain audiences

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 value

The 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.

Spend Controls

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.

Budget enforcement on audience downloads

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.

Budget enforcement on metered data endpoints

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.

Bug Fixes

  • 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

This Month at a Glance

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.

White-Label Dashboard

Serve the platform on your own hostname, from the first screen a client sees.

Custom App Domains

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.

Pre-Login Branding

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.

Audience Building

More expressive targeting, and a topic picker that can actually reach the whole taxonomy.

AND/OR Grouping for Lists

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.

Paged Intent Topic Search

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.

Row Grain and Record Limits on Downloads

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.

Composite Audiences from Templates

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.

Segmentation Templates

The template catalog got the vocabulary, provenance and navigation it was missing.

Tags Replace Categories

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.

Template Source and Change History

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.

Browse Templates from Any List

The template catalog is now reachable from the persona, company profile and audience list pages.

Campaigns

Index Exchange Deal Targeting

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.

Audiences, Not Lists

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.

Statistics and Identity

Resolution Rate Grading

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.

Identity Table Pagination

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.

Live Download Progress

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.

Billing

Subscription Discounts on the Billing Page

A coupon applied to your subscription is now visible on the Subscription page immediately, rather than only appearing once a finalized invoice exists.

Project-Scoped Billing Banners

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.

Company Profiles Named Correctly

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.

Bug Fixes

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

This Month at a Glance

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 and Reporting

Resolution reporting changed shape this month, and the numbers on the Statistics page and organization dashboard now answer a different question than before.

Addressable Resolution Rate

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.

Audience Building

Audiences gained a new source type and clearer sizing.

Lists as an Audience Source

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.

Deliverable Count Before You Export

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.

Reworked Audience Builder Layout

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.

Campaigns and Creatives

Multiple Audiences per Campaign

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.

Third-Party Tracking URLs on Creatives

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.

Select-All and Bulk Delete for Creatives

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.

Campaign Readiness Check

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.

Paused Audience Guidance in the Campaign Picker

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.

DSP Spend and Budget

Campaign Rollup by Project

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.

Media Funds Deposit and Available-to-Allocate

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.

Clearer Checkout Confirmation

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.

Monthly Record Usage Against Your Ceiling

Your organization's monthly record usage is now readable against its contracted ceiling, so approaching the limit is visible before a request is refused.

Exports and Lists

Delivered Records and Failure Reason on the Export List

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.

Clearer Export Run Failures

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.

Combined Output for Windowed Email Exports

Multi-day and weekly Email exports now honor the "Combine output into a single file" toggle, delivering one file instead of one per day.

Faster Small List Uploads

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.

Whole Drop Zone Opens the File Picker

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.

Remove Values from a List via the API Explorer

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.

Developer Experience

Developers Landing Page

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.

Guided Flows in the API Explorer

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.

Common Recipes and Cost Indicators

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.

Events Recipes on Tier Routes with Cost Preview

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.

Pull an Audience via the API

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.

LinkedIn URLs as Intent Identifiers

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.

Multi-Topic Intent Previews

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.

Onboarding and Navigation

Guided Tutorials Open to Everyone

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.

Setup Checklist with a Permanent Home

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.

Verify Your First Pixel Event

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.

Light and Dark Appearance Control

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.

Navigation Cleanup

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.

Bug Fixes

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

This Month at a Glance

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.

Building Audiences

Sizing an audience no longer means saving it first and waiting for a build.

Live reach estimates in the audience builder

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.

Fresh reach counts on the audience details card

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.

Connections

Stale integration credentials are now easy to spot before they cause a failed export.

Integration connection health and reconnect prompts

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.

Managing Your Audiences

Small additions to help you find audiences that are still consuming compute but no longer in use.

See when an audience was last downloaded

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.

Exports

Clearer export run progress labels

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.

Expected timeline drops shown as informational

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.

Creative Uploads

Smaller, faster creative uploads

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.

Notifications

Support ticket updates in your notifications

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.

Around the Dashboard

People and Companies

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.

Smoother large list imports

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.

Bug Fixes

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

Audiences

Audience responses now carry richer reach and signal data for developers reading them programmatically.

Distinct profile count on audience responses

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.

Intent frequency and impression count on audience samples

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.

Authentication

Two changes tighten credential handling. Review them before your next integration build.

API key and secret pair validation

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 client secrets are no longer returned in plaintext

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.

Behavior Changes

Refreshing a paused audience returns 409

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.

Bug Fixes

  • Intent audience downloads via 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.
  • Audience filters using range operators (such as greater-than or less-than on bucketed fields like company employee-count ranges) now return only records that actually fall within the requested range.

For full endpoint details, parameters, and examples, see our developer documentation.

June 3rd, 2026

Platform

This Month at a Glance

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.

Creative Management

Creatives are now a first-class part of the campaign workflow instead of a disconnected file list.

Campaign Creatives

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.

All Creative Formats

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.

Creative Specs at a Glance

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.

DelivrDSP Moderation Status

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.

Resolution and Identity

Why-Unresolved Funnel

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.

US-Only Resolution Rate

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.

Attribution Funnel Lifecycle Status

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

Distinct Profile Count

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 Frequency and Impressions

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.

Activate Audience as Campaign

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.

Last Downloaded

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.

Source-Unchanged Export Runs

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.

Account Security

Authenticator App (TOTP)

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.

Other Improvements

Event Volume Alerts

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.

Unified API Key Activity

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.

DSP Companies on the Accounts Tab

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.

Bug Fixes

Audiences

  • Retrying an audience from the list now gives real feedback, and the action is hidden on paused audiences where it would have no effect.
  • Audiences that are still computing now show "Calculating…" instead of a misleading "0" while results are in flight.
  • Cloned or edited audiences now refresh their size correctly instead of showing the previous count indefinitely.
  • Newly created personas and accounts can now be selected on the audience edit screen.
  • Intent audience downloads no longer fail when upstream data arrives late.

Creatives

  • Creative asset uploads no longer fail with a precondition error; image, video, and audio uploads complete reliably.
  • Video creatives stuck on a Processing badge now update, and a tooltip explains failed assets.

Resolution and statistics

  • Fixed a Resolution Statistics breakdown that could show bots at 100% with US and international both at zero on a populated window.
  • Trend chart day buckets and the dashboard date filter now use UTC consistently, so days no longer appear empty or shifted.
  • Fixed a "couldn't load campaign breakdown" error when selecting a single day.

Filtering and exports

  • Selecting the Website (or Ads) source no longer clears a compatible pixel selection or zeros out results.
  • Company employee-count range filters (for example, greater than 500) now return the correct companies.
  • Export run detail now shows the real record count instead of "0 records sent" when a delivery actually succeeded.
  • UID2 list types now render as "UID2" instead of a raw internal label, and managed UID2 lists now appear attached on the expanded campaign view.

May 1st, 2026

API

Authentication

API Key Auth on Lists and Campaigns

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"

Events

Query DSP Events by Campaign ID

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"

Project-Scoped DSP Queries

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

Configurable Intent Lookback

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 Limiting

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.

Bug Fixes

  • 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

Exports

A heavy month for exports, with new ways to schedule, name, slice, and format the files we deliver to your destinations.

Custom Filename Templates

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.

Long-Range Historic Exports

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.

Date Range Picker on One-Time Exports

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.

Time-of-Day and Day-of-Week Scheduling

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.

Unique Contacts Only

A new "Unique contacts only" toggle on file exports deduplicates rows by hashed email so each contact appears once per output file.

Combine Multi-Window Output Into One File

A new combineOutput toggle on file destinations writes a single combined artifact for multi-window exports instead of one file per window.

JSONL Output Format

S3 export destinations now accept JSONL alongside the existing file formats, making it easier to feed export output directly into JSON-native downstream systems.

Raw DSP Event Log Exports

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.

Emit Empty File on Zero-Record Runs

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.

Auto-Archival of Completed One-Time Exports

Completed one-time exports are now periodically archived, and the exports list gained an "Include archived" filter so you can show or hide them.

Cool-Off After Retry Exhaustion

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.

Resolved Only Toggle on Export Edit

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.

Data Watermark on Export Overview

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.

Preserve Case in Filenames

Export filenames and project folder paths now preserve the original case from your destination configuration.

Email Subject Template Across All Send Paths

The subject template you configure on email exports is now interpolated across batched, streamed, and multi-file send paths, not just single-file sends.

DelivrDSP and Campaign Reporting

DSP-related flows in the dashboard were renamed, scoped, and expanded.

DelivrDSP Source Naming

The DSP source is now labeled DelivrDSP across the audience and export flows.

One DelivrDSP Connection Per Project

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.

Campaign Selector for DSP Exports

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.

Inactive Campaigns and All-Project DSP Scope

DSP queries can now run against all projects in scope and include inactive campaigns in the result set.

DSP Event Fields in the Field Catalog

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.

Audiences

Audience configuration gained finer controls and clearer feedback.

Intent Lookback Window

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.

Audience Size Freshness

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 Filter Chips

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.

Bug Fixes

  • Fixed audience name not saving when edited
  • Fixed grouping functions not working in the audience builder
  • Fixed the "contains" filter splitting multi-word values on commas
  • Fixed audience downloads failing for some completed audiences
  • Fixed the audience count worker erroring on filters with very large inline value lists
  • Fixed audience status badge mismatch between the list and detail views
  • Fixed the not-found page entering an infinite redirect loop on certain navigation paths
  • Fixed an org switcher crash when changing organizations
  • Fixed dashboard memory growth during long-lived sessions
  • Fixed export UI freezes when creating, editing, or running exports
  • Fixed weekly export creation not saving the chosen day of week
  • Fixed empty-export warning copy showing the wrong wording on event exports
  • Fixed the contact details panel overflowing on long text values
  • Fixed an empty Event Timeline on buyer detail pages
  • Fixed pixel install failure messaging
  • S3 exports now fail fast with a clear error when destination credentials are missing or truncated, instead of running silently with no output

March 31st, 2026

Exports

New controls for managing export output, error visibility, and destination configuration.

Record Limits for Exports and Audience Downloads

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.

DSP List Name Preservation

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.

Per-Record Export Error Details

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.

CRM Field Mapping

Improvements to how data is prepared and validated before CRM export.

Field Constraints and Normalization

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 Contact Write with Auto-Created Companies

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.

Audiences and Lists

New filtering and bulk operations for list management.

Bulk Delete for List Uploads

A new bulk delete endpoint allows you to remove multiple list uploads in a single request by passing an array of list IDs.

Type and Source Filters on List Uploads

The list uploads endpoint now accepts type and source query parameters to filter results by upload type and originating source.

Audience Preview Limit Parameter

The audience preview endpoint now accepts a limit query parameter to control the maximum number of preview rows returned.

DSP Reporting

New data available for programmatic campaign analysis.

Campaign Match Rates

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.

Daily Campaign Performance

DelivrDSP campaign performance is now persisted with per-day granularity, so daily delivery, spend, and CPM trends are available through the campaign performance endpoints.

Privacy and Compliance

UID2 Opt-Out Webhook

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.

Pixel Collection

New options for controlling pixel behavior.

Cookieless Mode

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.

Custom Fields in Pixel Events

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.

Bug Fixes

  • Fixed an issue where export creation could fail with an empty identifier when the workspace context was incomplete
  • Fixed email integration test connections returning a credential decryption error
  • Fixed audience downloads failing for lists generated by exports
  • Fixed campaign sync not filtering results by the correct account
  • Fixed campaign budget and CPM values being stored as null when syncing from DelivrDSP
  • Fixed the record_count field being returned as the wrong type in event ingestion responses
  • Fixed contact database filters using incorrect field name casing
  • Fixed sync history records staying in RUNNING state when the dashboard tab disconnected mid-sync
  • Fixed empty-string UUID fields being treated as valid IDs in handler responses

For full endpoint details, parameters, and examples, see our developer documentation.

March 31st, 2026

Audience Builder

New tools for managing audiences and list uploads more efficiently.

Record Limits for Downloads

You can now set a record limit when downloading audiences, giving you control over file size and processing time for large audiences.

Bulk Actions for Lists

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.

List Upload Filters

The list uploads table now supports filtering by type and source, making it easier to find specific uploads in large workspaces.

Improved Audience Preview

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.

Drag-and-Drop Segmentation

You can now drag and drop conditions between groups in the audience builder, making it easier to reorganize complex segmentation rules.

Exports

More control and visibility into how your data exports are configured and performing.

S3 Path Prefix

S3 exports now support a custom path prefix, letting you organize exported files into specific folders within your bucket.

DSP List Naming

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 Error Details

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.

CRM Field Mapping Improvements

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.

Full Export Names

Export names are now fully visible in the dashboard instead of being truncated, so you can distinguish between similarly named exports at a glance.

Campaign Reporting

Better visibility into DSP campaign performance and match quality.

DSP Match Rates

Campaign reporting now shows match rates for your DSP exports, so you can see how effectively your audiences are matching in the ad platform.

Campaign Sync on Demand

A new "Sync Now" button on the DSP campaign overview lets you pull the latest campaign data without waiting for the next scheduled sync.

Website vs. Activate Pixel Types

The pixel list now distinguishes between website pixels and activate pixels, making it clearer which type each pixel is.

Search & Navigation

Improvements to finding what you need across the dashboard.

Smarter Search

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.

Notification Navigation

Clicking a notification in the bell menu now takes you directly to the relevant page, such as the completed export or failed run.

Redesigned Onboarding

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.

Contact Database

Improvements to how contact data is displayed and filtered.

Pixel Name in Resolution Stats

The resolution statistics table now includes the pixel name alongside each entry, so you can see which pixel drove each resolution.

Improved Data Display

Contact details now show proper title casing for names and fields, cleaner boolean formatting, and better layout for long values.

Organization Settings

Cookieless Mode

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.

Bug Fixes

  • Fixed inflated spend numbers on the campaign dashboard caused by cumulative values being written as daily totals
  • Fixed contact details panel where content was clipped and not fully visible
  • Fixed list count on the home dashboard showing per-page count instead of total records
  • Fixed notification badge text wrapping awkwardly in the header
  • Fixed an issue where navigating to an unauthorized workspace would sign users out
  • Fixed export creation failing when certain workspace fields were not populated
  • Fixed broken list uploads not showing error states, making it unclear why a list was unusable
  • Fixed export field settings not saving correctly when editing an existing export
  • Fixed exports incorrectly showing "Pixel" as the source type for audience and persona exports
  • Fixed the Cancel button on persona pages not returning to the previous screen
  • Fixed email integration test connections failing with a credential error
  • Fixed test connection returning access denied for certain export types
  • Fixed list downloads failing for lists generated by exports
  • Fixed contact database filters not applying correctly due to formatting mismatches
  • Fixed campaign budget and CPM values showing as zero after sync
  • Fixed daily campaign performance metrics being collapsed into a single date