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.