List account presences
curl --request GET \
--url https://api.apostra.com/api/v2/api/v2/buyer/storefront-connections/{connectionId}/accounts/{accountId}/presences \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.apostra.com/api/v2/api/v2/buyer/storefront-connections/{connectionId}/accounts/{accountId}/presences"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.apostra.com/api/v2/api/v2/buyer/storefront-connections/{connectionId}/accounts/{accountId}/presences', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));Task Reference
List account presences
Read upstream-discovered and buyer-pushed audiences/event sources tracked on a connected provider account
GET
/
api
/
v2
/
buyer
/
storefront-connections
/
{connectionId}
/
accounts
/
{accountId}
/
presences
List account presences
curl --request GET \
--url https://api.apostra.com/api/v2/api/v2/buyer/storefront-connections/{connectionId}/accounts/{accountId}/presences \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.apostra.com/api/v2/api/v2/buyer/storefront-connections/{connectionId}/accounts/{accountId}/presences"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.apostra.com/api/v2/api/v2/buyer/storefront-connections/{connectionId}/accounts/{accountId}/presences', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));Deprecated. This page documents the v2 buyer API, which is closed to new API
clients and switches off on 1 December 2026. Use V3 instead: see Move a v2 buyer
REST integration to V3. The conversion endpoint,
Log event, stays open.
This operation is read-only.
tracked), plus any
buyer-level audiences or event sources already delivered to that account
through AdCP pass-through (pushed). This is a reference-only surface —
identity, names, sync status, counts and health — never member lists or
event payloads. See
Presences: audiences and event sources
for the tracked/pushed model.
The platform reads the account’s audiences and event sources from the seller
about once an hour for an account with
tracked campaigns, so a new object
can take up to an hour to appear.
Named operation: list_storefront_connection_account_presences
Request
curl \
"https://api.apostra.com/api/v2/buyer/storefront-connections/42/accounts/81/presences?objectType=audience" \
-H "Authorization: Bearer $SCOPE3_API_KEY"
Parameters
| Field | Location | Type | Required | Description |
|---|---|---|---|---|
connectionId | path | integer | Yes | Active official-adapter connection ID |
accountId | path | integer | Yes | Buyable provider-account row selected from the connection |
objectType | query | audience | event_source | No | Filter to one presence object type |
includeRetired | query | boolean | No | Include retired (terminal) presence edges. Defaults to false |
take | query | integer | No | Page size (default 50, max 250) |
skip | query | integer | No | Offset for pagination (default 0) |
Response
{
"presences": [
{
"id": "1201",
"objectType": "audience",
"direction": "tracked",
"upstreamObjectId": "snap_audience_44521",
"name": "Newsletter subscribers",
"syncState": "live",
"lastSyncedAt": "2026-07-24T12:00:00.000Z",
"rowCount": 48213,
"managedBy": null,
"sellerReport": {
"status": "ready",
"matched_count": 48213,
"effective_match_rate": 0.61
},
"mappedTo": [],
"mappedToTotal": 0,
"retiredAt": null,
"createdAt": "2026-07-20T09:00:00.000Z",
"updatedAt": "2026-07-24T12:00:00.000Z"
},
{
"id": "1202",
"objectType": "audience",
"direction": "pushed",
"upstreamObjectId": "talpa_audience_998",
"name": null,
"audienceId": "5521",
"syncState": "live",
"lastSyncedAt": "2026-07-24T12:00:00.000Z",
"rowCount": 12000,
"managedBy": null,
"sellerReport": null,
"mappedTo": [],
"mappedToTotal": 0,
"retiredAt": null,
"createdAt": "2026-07-18T09:00:00.000Z",
"updatedAt": "2026-07-24T12:00:00.000Z"
},
{
"id": "1203",
"objectType": "event_source",
"direction": "tracked",
"upstreamObjectId": "google:youtube",
"name": "YouTube engagements",
"syncState": "live",
"lastSyncedAt": "2026-07-24T12:00:00.000Z",
"rowCount": null,
"managedBy": "seller",
"sellerReport": { "event_types": ["content_view"] },
"mappedTo": [],
"mappedToTotal": 0,
"retiredAt": null,
"createdAt": "2026-07-20T09:00:00.000Z",
"updatedAt": "2026-07-24T12:00:00.000Z"
},
{
"id": "1204",
"objectType": "event_source",
"direction": "tracked",
"upstreamObjectId": "1234567890",
"name": "Checkout pixel",
"syncState": "live",
"lastSyncedAt": "2026-07-24T12:00:00.000Z",
"rowCount": null,
"managedBy": "buyer",
"sellerReport": {
"event_types": ["purchase", "add_to_cart"],
"action_source": "website",
"health": { "status": "good", "last_event_at": "2026-07-24T11:52:00.000Z" }
},
"mappedTo": [
{
"advertiserId": "77",
"eventSourceId": "web_checkout",
"name": "Web checkout",
"status": "synced"
}
],
"mappedToTotal": 1,
"retiredAt": null,
"createdAt": "2026-07-20T09:00:00.000Z",
"updatedAt": "2026-07-24T12:00:00.000Z"
}
],
"total": 4
}
direction:
tracked— an upstream-discovered object. There is no buyer-level master yet;audienceId/eventSourceIdare omitted entirely until the object is explicitly adopted.pushed— a buyer-level object already delivered to this account through AdCP pass-through. The matching master id (audienceIdforobjectType: "audience",eventSourceIdforobjectType: "event_source") is always present.
managedBy says who manages an event source, as the seller reports it:
buyer— a destination you or your tags set up on the account, such as a pixel or dataset.seller— a source the platform owns, such as its own on-site or in-app events. It is listed so you can see it, but it can never be mapped to one of your event sources.
managedBy is null for audiences, and for an event source whose seller did
not say.
name is the seller’s name for the object. sellerReport is what the seller
reported about it in the same read, in AdCP’s own shape (snake_case fields):
- Event sources:
event_types(the AdCP event types it records; absent when it declares none, so it receives every type),action_source, andhealth, the seller’s AdCPEventSourceHealthfor it. A pixel that is set up but has received nothing yet reads that way inhealth. - Audiences:
status,matched_count,effective_match_rate, andmatch_breakdown(matches by identifier type), as the seller reports them. Many platforms report size as an approximation and some report no match rate at all, so a field the seller did not send is absent.
name and sellerReport are null until the account’s next read, or when
the seller reported nothing.
mappedTo lists your event sources and audiences mapped to the object on this
account, each with its advertiser, its id, its name, and the status of its
sync to the account (see Event sources). An empty
list means the object is only on this storefront, which needs no action.
Several of your objects can map to one seller object, such as one Meta dataset
that receives both purchases and leads. mappedTo lists at most 10 of them;
mappedToTotal counts them all.
rowCount and lastSyncedAt reflect the last successful sync only; the
platform never stores the members or events themselves (custody is a
separate, explicitly consented capability — see
Presences: audiences and event sources).
retiredAt is null unless the upstream provider reported a terminal status (deleted,
suspended, failed) for the object; pass includeRetired=true to see retired
edges. total is the count across all pages. Results use offset pagination
(take / skip); see Pagination.
Errors
404 NOT_FOUND— the connection/account does not belong to this customer, or does not exist.
Related
Campaigns on connected provider accounts
Connected provider account presences live on
Ad platform accounts
Connecting and mapping provider accounts
Pagination
Offset-based list paging