API Updates - October 2026
Audiences
You can now read audiences as JSON records and build them from the people who visit your website.
Audience Records
Read an audience's rows as JSON, one page at a time, so you don't have to download and parse files.
GET /api/v1/audiences/{id}/records
Build the audience first with GET /api/v1/audiences/{id}/download and poll it until its status is ready. Then keep requesting records, passing each page's next_cursor as cursor, until you get a page with no next_cursor.
Response:
next_cursor(string) - Cursor for the next page. It is missing on the last page.
Example:
curl -X GET "https://api.delivr.ai/api/v1/audiences/{id}/records" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "X-Api-Secret: YOUR_API_SECRET" \
-H "X-Project-Id: YOUR_PROJECT_ID"Website Visitor Audiences
Build an audience from the people your pixels identified.
POST /api/v1/audiences
Parameters:
type(string) - Set topixelto build a website visitor audience.source_pixel_ids(array) - The pixels whose identified visitors make up the audience. Each must be a pixel in this project.
Example:
curl -X POST https://api.delivr.ai/api/v1/audiences \
-H "X-Api-Key: YOUR_API_KEY" \
-H "X-Api-Secret: YOUR_API_SECRET" \
-H "X-Project-Id: YOUR_PROJECT_ID" \
-H "Content-Type: application/json" \
-d '{"audience_name": "Website visitors", "type": "pixel", "segmentation_type": "Audience", "organization_id": "YOUR_ORG_ID", "project_id": "YOUR_PROJECT_ID", "filter": {}, "source_pixel_ids": ["YOUR_PIXEL_ID"]}'Intent audiences and people-based contact audiences now accept a WEBSITE_VISITORS condition with the in or not in operator. Use it to include or exclude the people in a website visitor audience from the same project once that audience has finished its first build.
Manage website visitor audiences with the existing endpoints:
PUT /api/v1/audiences/{id}
POST /api/v1/audiences/{id}/refresh
Events API
New v3 routes tell you who visited your site, not just which events happened. They can also break down a day's web events by field.
Website Visitors
GET /api/v3/events/{tier}/visitors
This endpoint returns one row per person instead of one row per resolution event. Use it to find out who visited during a time window without removing duplicate people yourself.
Parameters:
kind(string, query, required) -buyersfor one row per person, oraccountsfor one row per company.accountsis only available when{tier}isresolution_full_profile.
Web Event Breakdowns
GET /api/v3/events/web_event/counts
Counts a project's website events for one window. The window can be up to 24 hours long and must start within the last 30 days.
- Narrow the results to a single pixel.
- Filter with the existing filter language.
- Group results by up to two fields.
The endpoint returns counts only and is not billed.
Predictive Signals
New lookups return intent trends for each person.
People Signals Lookup and Batch
POST /api/v1/signals/people/lookup
POST /api/v1/signals/people/batch
These endpoints return a person's high and medium intent topics that have a 14-day trend. You don't need an audience. Batch takes up to 1,000 people per call. They work with an API key only, and each request must name a project. You're billed one Predictive Signals unit for each person who has at least one trend topic returned.
Parameters:
hem(string) - Look up a person by SHA-256 hashed email.email(string) - Look up a person by email address.dry_run(boolean) - Whentrue, returns the cost without billing. Works without a payment method on file.
Example:
curl -X POST https://api.delivr.ai/api/v1/signals/people/lookup \
-H "X-Api-Key: YOUR_API_KEY" \
-H "X-Api-Secret: YOUR_API_SECRET" \
-H "X-Project-Id: YOUR_PROJECT_ID" \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]", "dry_run": true}'Dry Runs Without a Payment Method
POST /api/v1/contact/query
Dry runs no longer need a payment method on file, and a reached budget doesn't block them. A dry run returns the cost of the request and is not billed.
Parameters:
dry_run(boolean) - Whentrue, returns the cost without billing.
Intent
Person intent lookups now answer for the whole person, not just one address.
Person-Level Intent Matching
POST /api/v1/intent/lookup
POST /api/v1/intent/batch
These endpoints now resolve an email, hem or linkedin_url to the person who holds it. They return that person's topics across all of their addresses, so an address with no intent of its own can still match.
Parameters:
person_id(string) - Aperson_idfrom an earlier response. Reads that person's topics directly.
Response:
person_id(string) - Returned when the identifier resolves to a person.
POST /api/v1/intent/people now returns one row per person.
Email Identity
You can now get email tokens through the API and record email opens with the pixel.
Email Tokens API
POST /api/v1/email-tokens
Returns a dlvr_et token for each email address you send, in the same order, up to 10,000 per request. Authenticate with your organization API key (X-Api-Key and X-Api-Secret). If your code syncs contacts into an email platform, it can now get tokens directly.
Parameters:
project_id(string) - The project to generate tokens for. It must belong to your API key's organization.emails(array of strings) - The contacts' email addresses.
Response:
response.tokens(array) - One entry per email, each with atokenand astatusofokorinvalid_email.
Email Open Tracking
GET /pixel/core/api/send-event/get
This endpoint now accepts event_type=email_open and responds with a 1x1 image. Add it to your emails and merge in each recipient's dlvr_et token to record which recipients opened them.
Parameters:
event_type(string, query) - Set toemail_open.dlvr_et(string, query) - The recipient's email token.
Integrations and Exports
You can now deliver exports to your own HTTPS endpoint.
Webhook Connections
Create a Webhook integration with type webhook, a name and an HTTPS url, in the project given by project_id.
POST /api/v1/integrations?project_id={project_id}
Delivr generates the signing secret and returns it only in this response, so store it when you create the integration. To rotate the secret, use:
POST /api/v1/integrations/{id}/webhook-secret
To use the webhook as an export destination, pass it to:
POST /api/v1/exports
A webhook destination can receive either of these:
- An audience export that selects a Predictive Signals state with
signalState. - A pixel's resolved website visitors, delivered every 5 minutes on the
continuousschedule. The webhook must be the export's only destination and must settieranddelivery_mode.
Campaigns
Campaign reads now report more delivery detail, and campaign writes support more targeting options.
Campaign Insights
GET /api/v1/campaigns/{id}/insights
A new endpoint that shows why a campaign is or isn't delivering: the auction requests it was skipped or filtered on and why, and how it did by site, device, creative and size.
Bids, Win Rate and Viewability
GET /api/v1/campaigns/{id}/performance
The response now includes bids, win rate and viewability, both per day and in the summary.
Operating System and Browser Targeting
POST /api/v1/campaigns
PUT /api/v1/campaigns/{id}
Both endpoints now accept targeting.operating_systems and targeting.browsers, alongside device and connection types. For example, set browsers to ["CHROME"] to restrict a campaign to Chrome only.
