REST API · Bridge
Get bridge stats
The Bridge's Stats tab: each creative bridged from a Meta ad account, its source ad next to its TikTok and Snapchat copies
GEThttps://api.apogee.ad/api/v1/bridged-ads/stats
What it does
Newest bridge first, over since → until (7-day click attribution on every platform). Per platform: status (ok, no_target = never bridged there, not_connected = that destination account is not one of yours, error), the ads, inputs (raw sums: spend, revenue, impressions, reach, link clicks, landing page views, adds to cart, purchases, 3 s and 15 s plays) and kpis (the app's columns: ROAS, CPM, CTR, CPC, cost per purchase, hook and hold rates…), each in its own ad account's currency: platforms are never added together.
Request
GET /bridged-ads/stats on https://api.apogee.ad/api/v1.
Query parameters
-
source_ad_account_idstring query requiredThe Meta ad account the ads were bridged from (act_…)
-
sincestring query requiredFirst day, YYYY-MM-DD
-
untilstring query requiredLast day, YYYY-MM-DD
Headers
-
Authorizationstring header requiredBearer apk_…: an API key with the scope of this route.
Response
200.
-
rangeobjectFields (2)
-
sincestring -
untilstring
-
-
creativesarray of objectsFields of each item (5)
-
source_ad_idstring -
platformsobjectFields (3)
-
metaobjectFields (6)
-
statusstring -
adsarray of objectsFields of each item (5)
-
idstring or null -
ad_account_idstring or null -
adset_idstring or null -
smart_plusboolean -
atstring or null
-
-
inputsobject or nullRaw sums over the platform's ads, in its ad account currency (null = the platform can't report it)
Fields (10)
-
spendnumber or null -
revenuenumber or null -
impressionsnumber or null -
reachnumber or null -
link_clicksnumber or null -
landing_page_viewsnumber or null -
add_to_cartnumber or null -
purchasesnumber or null -
hook_viewsnumber or null -
hold_viewsnumber or null
-
-
kpisobject or nullThe app's columns from the inputs: spend, revenue, roas, atc_rate (+ atc_rate_basis), cpm, cpmr, reach, impressions, cpc, cpatc, cpp, link_clicks, add_to_cart, purchases, hook_rate, hold_rate, ctr
-
hintstring or null -
errorstring or null
-
-
tiktokobjectFields (6)
-
statusstring -
adsarray of objectsFields of each item (5)
-
idstring or null -
ad_account_idstring or null -
adset_idstring or null -
smart_plusboolean -
atstring or null
-
-
inputsobject or nullRaw sums over the platform's ads, in its ad account currency (null = the platform can't report it)
Fields (10)
-
spendnumber or null -
revenuenumber or null -
impressionsnumber or null -
reachnumber or null -
link_clicksnumber or null -
landing_page_viewsnumber or null -
add_to_cartnumber or null -
purchasesnumber or null -
hook_viewsnumber or null -
hold_viewsnumber or null
-
-
kpisobject or nullThe app's columns from the inputs: spend, revenue, roas, atc_rate (+ atc_rate_basis), cpm, cpmr, reach, impressions, cpc, cpatc, cpp, link_clicks, add_to_cart, purchases, hook_rate, hold_rate, ctr
-
hintstring or null -
errorstring or null
-
-
snapchatobjectFields (6)
-
statusstring -
adsarray of objectsFields of each item (5)
-
idstring or null -
ad_account_idstring or null -
adset_idstring or null -
smart_plusboolean -
atstring or null
-
-
inputsobject or nullRaw sums over the platform's ads, in its ad account currency (null = the platform can't report it)
Fields (10)
-
spendnumber or null -
revenuenumber or null -
impressionsnumber or null -
reachnumber or null -
link_clicksnumber or null -
landing_page_viewsnumber or null -
add_to_cartnumber or null -
purchasesnumber or null -
hook_viewsnumber or null -
hold_viewsnumber or null
-
-
kpisobject or nullThe app's columns from the inputs: spend, revenue, roas, atc_rate (+ atc_rate_basis), cpm, cpmr, reach, impressions, cpc, cpatc, cpp, link_clicks, add_to_cart, purchases, hook_rate, hold_rate, ctr
-
hintstring or null -
errorstring or null
-
-
-
namestring or null -
last_bridged_atstring or null -
countnumber or null
-
-
source_ad_account_idstring
Every answer carries X-Request-Id (give it to support), Apogee-Version: 2026-10-06, and the RateLimit and RateLimit-Policy headers.
Errors
Errors are application/problem+json with a stable code to switch on (all the codes).
| Status | Possible codes |
|---|---|
| 400 Bad request | idempotency_key_required, not_supported, request_refused, validation_failed |
| 401 Unauthorized | invalid_api_key |
| 403 Forbidden | account_not_connected, forbidden, insufficient_scope, meta_permission_denied, platform_permission_denied, upgrade_required |
| 404 Not found | not_found |
| 412 Precondition failed | drive_not_connected, meta_not_connected, platform_not_connected |
| 429 Too many requests | daily_read_cap, meta_rate_limited, platform_rate_limited, quota_exceeded, rate_limited |
| 500 Internal server error | internal_error |
| 502 Bad gateway | drive_error, launch_failed, meta_error, platform_error, upstream_error |
Example
With your key in APOGEE_API_KEY (create one):
curl 'https://api.apogee.ad/api/v1/bridged-ads/stats?source_ad_account_id=act_1234567890&since=2026-10-01&until=2026-10-21' \
-H "Authorization: Bearer $APOGEE_API_KEY" {
"range": {
"since": "2026-10-01",
"until": "2026-10-21"
},
"source_ad_account_id": "120200000000000001",
"creatives": [
{
"source_ad_id": "120200000000000003",
"name": "Nordlicht | Spring launch",
"last_bridged_at": "2026-10-23T09:00:00.000Z",
"count": 3,
"platforms": {
"meta": {
"status": "ok"
},
"tiktok": {
"status": "ok"
},
"snapchat": {
"status": "ok"
}
}
}
]
} Access and cost
| Plans | Pro and Scale. |
|---|---|
| Scope | read (scopes). |
| Credits | Free up to the daily free reads (5,000 a day on Pro, 10,000 on Scale), then 1 credit per read. A request that fails costs nothing, a replayed one neither (credits). |
| Rate limit | Read: 600 per 15 minutes on Pro, 1,200 on Scale (rate limits). |
| Meta budget | Reads Meta: spends 1 unit of the account's Meta budget (1,800 per 15 minutes, 900 per ad account). |
| Daily cap | Counts 1 unit toward the 2,000 units one API key can use in 24 hours. |
In the MCP
An AI assistant does the same with this tool of the MCP server:
get_bridge_stats: The Bridge's Stats tab: each creative bridged from a Meta ad account, its Meta ad next to its TikTok and Snapchat copies, with their spend and results over the period (7-day click attribution everywhere), each platform in its own currency.
Related operations
- Create bridge transfer:
POST /bridge-transfers - Confirm bridge transfer:
POST /bridge-transfers/{id}/confirm - Get bridge transfer:
GET /bridge-transfers/{id} - List bridged ads:
GET /bridged-ads - Get bridge daily stats:
GET /bridged-ads/daily-stats