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.
February 28th, 2026
New endpoint for checking audience readiness without triggering billing.
A new GET /api/v1/audiences/{id}/status endpoint lets you check the current task status of an audience (pending, unloading, completed, failed) without hitting the download endpoint. Useful for verifying audience readiness before attempting a large download or streaming export.
For full endpoint details, parameters, and examples, see our developer documentation.
February 28th, 2026
The export workflow has been completely rebuilt as a guided, step-by-step wizard. You can now set up new connections inline without leaving the export flow, and custom integration names are preserved through the entire setup process.
Export to Contacts, Leads, and Tasks in a single export run. Each object type shows its own result summary so you can see exactly what was created or updated.
Export status now distinguishes between failed records and duplicates, giving you accurate counts of new records created versus existing records matched.
Two new data type options are available when exporting to DSP destinations, enabling IP-based and domain-based targeting workflows.
Export resolved events across all pixels in a project at once, rather than selecting individual pixels one at a time.
Inactive pixels are now clearly labeled in the export flow and cannot be selected, preventing failed exports from deactivated tracking.
The audience builder now offers more powerful filtering and a streamlined interface for building targeted segments.
Combine multiple intent topics with AND or OR operators to create more precise audience definitions based on buyer research activity.
See per-topic signal strength when selecting intent topics, helping you understand the relative weight of each topic in your audience.
Filter conditions now display as readable sentence-style chips, making complex audience rules easier to understand and modify at a glance.
Create a new audience directly from your contact database filters with a single click, without switching to the audience builder.
Normalized job title is now available as a filter field in persona conditions, enabling more consistent role-based audience targeting.
Apply include or exclude operators to individual lists within an audience definition for more granular segmentation.
The identity and resolution pages have been refreshed with clearer metrics and more useful data columns.
A new arc gauge makes resolution performance immediately visible, with polished filter controls for date range and pixel selection.
Resolution rates are now segmented by browser type, showing how different browsers contribute to your overall performance.
A new KPI shows the total number of unique people identified, complementing existing event-based metrics.
Contact lists now show business email by default. Audience sample tables include topic names for added context. Low-value columns have been removed to reduce clutter.
View campaign overview, attached lists, and settings from a dedicated page with organized tabs.
A new reporting dashboard displays campaign performance metrics with daily breakdowns, enabling you to track delivery and engagement trends over time.
Contact names, job titles, company names, and address fields now display in proper title case across all views and exports, improving readability and consistency.
IP address data in exports and analytics now correctly reflects actual visitor IPs rather than infrastructure addresses.
List uploads now process asynchronously with real-time progress indicators. Large files upload significantly faster, and you can navigate away while imports complete in the background.
When inviting or editing team members, the permissions granted by each role are now displayed directly in the dialog so you can make informed role assignments.
Recent items are now accessible from the sidebar, and navigation across projects and organizations is more consistent.
Error notifications now display helpful descriptions instead of raw HTTP status codes.
January 31st, 2026
The resolutions backend was rebuilt with a unified service architecture and a new renewal system that automatically regenerates expired download links.
Audience filters now support explicit null and not null operators, and null values are handled consistently across all comparison operators for more predictable query behavior.
Resolved several issues affecting intent-type audience queries, including field routing and error handling, so intent-based audiences now return consistent results.
Download links for resolution exports are now automatically regenerated when they expire, eliminating the need to manually request new links. Background renewal jobs have been moved into a dedicated renewal service.
For full endpoint details, parameters, and examples, see our developer documentation.
January 31st, 2026
We made major improvements to how audiences are built and managed.
You can now upload email, domain, or account lists and use them as include/exclude filters directly in the audience builder. Each list gets its own operator so you can combine multiple lists with precise control.
Audiences can now be filtered by intent topic and intent strength. You can also use AND/OR logic when selecting multiple intent topics, and intent topics are preserved correctly when editing an existing audience.
You can now clone an existing audience to use as a starting point, and download audience data directly from the detail view.
The export pipeline received a significant overhaul this month.
You can filter pixel exports by audience, apply a resolved-only toggle, and control which contact fields appear in the output.
A new incremental mode with a configurable lookback window lets you export only new data since the last run, with server-side validation.
Exports now use streaming for large audiences, handle timeouts with automatic retry, and correctly enforce record limits. Export record counts in Slack notifications and the connection overview are now accurate.
Export completion emails now include direct links to the relevant export. Slack notifications have been cleaned up to reduce duplicates.