Docs
Ads

List ad launches

GEThttps://api.norreach.app/v1/ad-launches

The ad launches Nora built from the workspace's plans, newest first: network, status (ready = waiting for a person's yes), budget in minor units, schedule, how many ad sets and ads publishing creates, and the plan it came from. Filter by status and network. There is no operation that makes, generates or searches ads — new ads come from a plan (POST /briefs), and Nora builds the launch.

ads:readOperation id: list_ad_launches
GET/ad-launches
curl -X GET "https://api.norreach.app/v1/ad-launches" \
  -H "Authorization: Bearer $NORREACH_API_KEY"
List ad launches
{
  "object": "list",
  "data": [
    {
      "id": "3c4d5e6f-7a8b-4c9d-8e0f-1a2b3c4d5e6f",
      "object": "ad_launch",
      "name": "Nurses in Stockholm — lead ads",
      "network": "meta",
      "network_name": "Meta",
      "status": "ready",
      "plan_id": "6a7b8c9d-0e1f-4a2b-8c3d-4e5f6a7b8c9d",
      "ad_account_id": "7d8e9f0a-1b2c-4d3e-8f4a-5b6c7d8e9f0a",
      "objective": "leads",
      "landing_url": "https://example-care.norreach.dev/nurses",
      "budget": {
        "daily_per_ad_set": {
          "amount_minor": 15000,
          "currency": "SEK"
        },
        "daily_cap": {
          "amount_minor": 50000,
          "currency": "SEK"
        },
        "campaign": null
      },
      "ad_sets": 3,
      "ads": 6,
      "schedule": {
        "mode": "range",
        "start": "2026-11-10",
        "end": "2026-11-24"
      },
      "published_at": null,
      "problem": null,
      "created_at": "2026-11-04T09:12:33.120Z",
      "updated_at": "2026-11-04T10:02:11.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Authorizations

Authorizationstringheaderrequired

Bearer authentication: send Authorization: Bearer <key>, with an API key or an OAuth access token. The key needs the scope ads:read. API keys and scopes

Query parameters

limitintegerquery

Page size (1–200, default 50).

cursorstringquery

The next_cursor of the previous page.

statusenumquery
One of:draftgeneratingreadypublishingpublishedfailed
networkenumquery

meta, tiktok, reddit or chatgpt.

One of:metatiktokredditchatgpt

Response

200application/json— List ad launches

object"list"required
dataobject[]required
Show child attributes
data[].idstring (uuid)required

An id (UUID).

data[].object"ad_launch"required
data[].namestringrequired
data[].networkenumrequired
One of:metatiktokredditchatgpt
data[].network_namestringrequired
data[].statusenumrequired

draft → generating → ready → publishing → published (or failed). Only ready waits for a person's yes.

One of:draftgeneratingreadypublishingpublishedfailed
data[].plan_idstring (uuid) | nullrequired

The plan whose cards Nora built this launch from.

data[].ad_account_idstring (uuid) | nullrequired
data[].objectivestring | nullrequired
data[].landing_urlstring | nullrequired
data[].budgetobjectrequired
Show child attributes
data[].budget.daily_per_ad_setobject | nullrequired

Per ad set (ad group) per day. Editable with PATCH while draft, ready or failed.

data[].budget.daily_capobject | nullrequired

The most the whole launch may spend per day (set by the plan). A budget above it is refused.

data[].budget.campaignobject | nullrequired

A campaign-level budget, on networks that use one.

data[].ad_setsintegerrequired

How many ad sets (ad groups) publishing creates.

data[].adsintegerrequired

How many ads publishing creates.

data[].scheduleobjectrequired

When the ads run once switched on.

Show child attributes
data[].schedule.modeenumrequired

continuous = runs until switched off; range = between start and end.

One of:continuousrange
data[].schedule.startstring | nullrequired

YYYY-MM-DD (range only).

data[].schedule.endstring | nullrequired

YYYY-MM-DD, or null for no end date.

data[].published_atstring | nullrequired
data[].problemstring | nullrequired

A plain sentence when something went wrong (details are in the app).

data[].created_atstring | nullrequired
data[].updated_atstring | nullrequired
has_morebooleanrequired
next_cursorstring | nullrequired

Errors

Errors are application/problem+json with a stable code.

StatusCodeMeaning
400bad_requestThe request couldn't be read.
400unknown_fieldThe request has a field this operation doesn't know.
400invalid_cursorThat cursor doesn't belong to this list.
401unauthorizedA valid API key is required.
403insufficient_scopeThis API key doesn't have the scope this operation needs.
403feature_not_enabledThe API isn't switched on for this workspace.
429rate_limitedToo many requests. Slow down and try again.
500server_errorSomething went wrong on our side.
503unavailableThe API isn't available right now. Try again shortly.