REST API · Structure
Get latest in campaign
The most recently created ad set and ad of a campaign ("copy the latest")
GEThttps://api.apogee.ad/api/v1/ad-accounts/{acc}/campaigns/{id}/latest
What it does
Their ids, names and creation times. A launch plan copies them with copy_adset_from / copy_ad_from (GET /adsets/{id}/template and /ads/{id}/template show what each one holds). null when the campaign has none.
Request
GET /ad-accounts/{acc}/campaigns/{id}/latest on https://api.apogee.ad/api/v1.
Path parameters
-
accstring path requiredMeta ad account id (act_…)
-
idstring path requiredCampaign id
Headers
-
Authorizationstring header requiredBearer apk_…: an API key with the scope of this route.
Response
200.
-
campaign_idstring -
adsetobject or nullFields (4)
-
idstring -
namestring or null -
statusstring or null -
created_timestring or null
-
-
adobject or nullFields (5)
-
idstring -
namestring or null -
statusstring or null -
adset_idstring or null -
created_timestring or null
-
-
useobjectFields (2)
-
copy_adset_fromstring -
copy_ad_fromstring
-
-
notestring
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/ad-accounts/act_1234567890/campaigns/120200000000000001/latest' \
-H "Authorization: Bearer $APOGEE_API_KEY" {
"campaign_id": "120200000000000001",
"adset": {
"id": "120200000000000001",
"name": "Nordlicht | Spring launch",
"status": "ACTIVE",
"created_time": "09:00"
},
"ad": {
"id": "120200000000000001",
"name": "Nordlicht | Spring launch",
"status": "ACTIVE",
"adset_id": "120200000000000002",
"created_time": "09:00"
},
"use": {
"copy_adset_from": "120200000000000001",
"copy_ad_from": "120200000000000001"
},
"note": "Example text"
} 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_latest_in_campaign: The newest ad set and ad of a campaign, by creation time: "copy the latest ad set and ad of campaign X". Their ids go in prepare_launchcopy_adset_fromandcopy_ad_from.
Related operations
- List campaigns:
GET /ad-accounts/{acc}/campaigns - List ad sets:
GET /ad-accounts/{acc}/adsets - List ads:
GET /ad-accounts/{acc}/ads - Get an ad set template:
GET /adsets/{id}/template - Get ad template:
GET /ads/{id}/template