Ad destinations
Module: destinations. See README.md for authentication.
| Endpoint | Scope | Permission | What it does |
|---|---|---|---|
GET /apps/{app}/destinations |
read | destinations.read |
List conversion destinations |
POST /apps/{app}/destinations/test/{id} |
write | destinations.write |
Send a synthetic event to one destination |
A destination forwards conversions server-side to Meta CAPI, Google Ads, TikTok Events, LinkedIn CAPI, a signed webhook, or Slack. Creating one needs a credential, which is console work: credentials go through the vault and never travel over this API in either direction.
List
{
"data": [{
"id": "d_1",
"kind": "meta_capi",
"kindLabel": "Meta Conversions API",
"name": "Meta — purchases",
"enabled": true,
"environments": ["production"],
"mapping": [{ "event": "purchase", "destinationEvent": "Purchase", "valueProperty": "value", "currency": "EUR" }],
"config": { "pixelId": "1234567890" },
"hasCredential": true,
"lastDispatchAt": "2026-09-03T…",
"lastError": null
}],
"nextCursor": null
}
hasCredential says whether a credential is stored; the credential itself is
never returned, and neither is any token inside config.
Test
POST /apps/{app}/destinations/test/{id}
{ "ok": true, "error": null, "deliveryId": "dl_1" }
Sends the adapter's synthetic event and records a delivery, exactly like the console's test button. The delivery log stores a redacted request and response — enough to debug a mapping, never enough to leak a token.