GET /v1/projects/:projectId/ads/:platform/pending
List pending optimizer actions queued by the gate's `draft` axes.
/v1/projects/:projectId/ads/{platform}/pending- Auth
- Bearer
- Scope
- ads:read
Lists pending actions queued by the bucket-mode gate's draft modes. Each row is an optimizer recommendation awaiting partner or customer approval before it dispatches to the platform.
Companion endpoint: GET …/{platform}/pending/count returns just the unread count, no body. Useful for a partner-tool badge.
Path parameters
projectIdstring (uuid)requiredplatformstringrequiredOne of:meta,tiktok,apple
Query parameters
statusstring | string[]optionaldefault: `pending`Filter by status.One of:pending,approved,rejected,dispatched,dispatch_failedactionTypestringoptionalFilter by action type.One of:pause_ad,pause_adset,update_budget,push_creative,replace_creative,prune_creative,update_targeting,update_schedulecursorstringoptionallimitintegeroptionaldefault: 50
Response
{
"items": [
{
"pendingId": "pa_01HZX9...",
"actionType": "update_budget",
"entityType": "campaign",
"entityId": "cmp_01HZX9...",
"entityName": "Q3 prospecting",
"platform": "meta",
"currentValue": { "dailyBudgetCents": 5000 },
"newValue": { "dailyBudgetCents": 7500 },
"rationale": "Top-performing campaign — propose +50% budget; CPA is $4.20 vs target $7.00.",
"proposedAction": {
"detail": { /* full platform-specific payload */ }
},
"status": "pending",
"createdAt": "2026-05-08T14:32:11Z",
"expiresAt": "2026-05-15T14:32:11Z",
"dispatchedAt": null,
"dispatchFailureReason": null
}
],
"nextCursor": null
}expiresAt — pending actions auto-reject after 7 days unless approved. The expiry is to keep stale recommendations from dispatching after the underlying paid performance has shifted.
See also
GET /v1/projects/:projectId/ads/:platform/reviews
Read platform ad-approval / disapproval state. Apple Ad Approval is the canonical use case.
POST /v1/projects/:projectId/ads/:platform/campaigns
Simplified create-campaign endpoint. Customer picks budget + outcome + management mode + creative mode; Layers handles the rest.