Docs menu

REST API · Bridge

Confirm bridge transfer

Run a prepared Bridge transfer, after the user said yes to its recap

POSThttps://api.apogee.ad/api/v1/bridge-transfers/{id}/confirm

What it does

The plan is checked again first (changed: 422, nothing transferred). Answers 202 with the outcome when the run ended within ~25 s (finished true), else status running: follow it with GET /bridge-transfers/{id}. A transfer runs once (409), within 24 hours (410).

Request

POST /bridge-transfers/{id}/confirm on https://api.apogee.ad/api/v1.

Path parameters

  • id string path required

    Bridge transfer id

    1 to 64 characters

    Matches ^[\w-]+$

Headers

  • Authorization string header required

    Bearer apk_…: an API key with the scope of this route.

  • Idempotency-Key string header required

    A unique key per request, e.g. a UUID, reused when you retry it: the first answer comes back instead of a second write (idempotency).

    1 to 255 visible ASCII characters

  • Content-Type string header required

    application/json

Body

  • confirm constant required

    true = the user said yes to the recap

    Always true

Response

202.

  • id string
  • status string

    One of prepared, running, completed, partial, failed, not_run, unknown, expired

  • finished boolean
  • ads_created number or null
  • adsets any
  • campaigns number or null
  • failures array of strings
  • error string or null
  • may_have_written boolean
  • started_at string or null
  • at string or null
  • ready boolean
  • expires_at string or null

Every answer carries X-Request-Id (give it to support), Apogee-Version: 2026-10-06, and the RateLimit and RateLimit-Policy headers; a replayed answer also carries Idempotent-Replayed: true.

Errors

Errors are application/problem+json with a stable code to switch on (all the codes).

Example

With your key in APOGEE_API_KEY (create one):

Request
curl -X POST 'https://api.apogee.ad/api/v1/bridge-transfers/120200000000000001/confirm' \
  -H "Authorization: Bearer $APOGEE_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "confirm": true
}'
Response 202 (shape)
{
  "id": "120200000000000001",
  "finished": false,
  "status": "prepared",
  "ads_created": 1,
  "adsets": "120200000000000001",
  "campaigns": 1,
  "failures": [
    "120200000000000001"
  ],
  "error": "120200000000000001",
  "may_have_written": false,
  "started_at": "2026-10-23T09:00:00.000Z",
  "at": "2026-10-23T09:00:00.000Z",
  "ready": false,
  "expires_at": "2026-10-23T09:00:00.000Z"
}

Access and cost

PlansPro and Scale.
Scopelaunch (scopes).
Credits15 credits per ad created, counted at the end (an ad that failed is free), plus 120 for a transfer to Meta (texts written by AI). A request that fails costs nothing, a replayed one neither (credits).
Rate limitConfirmation: 30 per 15 minutes on Pro, 60 on Scale (rate limits).
Meta budgetReads Meta: spends 1 unit of the account's Meta budget (1,800 per 15 minutes, 900 per ad account).
Daily capCounts 10 units 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:

Last updated on . The parameters, limits, credits and error codes of these pages are generated from the code of the Apogee API (contract 2026-10-06).

A question, something missing? Write to hello@apogee.ad.

Book a demo

Pick the time that suits you.

Open in a new tab

Loading the calendar…

Talk to Founder