Docs menu

REST API · Ad accounts

List ad posts

The posts behind the account's ads (dark posts included): reuse one with a create_ad_from_post action

GEThttps://api.apogee.ad/api/v1/ad-accounts/{acc}/posts

Scope: read Pro and Scale plans Credits: Free* Paginated

What it does

One row per post, with the ads using it. A new ad on the same post keeps its likes, comments and shares.

Request

GET /ad-accounts/{acc}/posts on https://api.apogee.ad/api/v1.

Path parameters

  • acc string path required

    Meta ad account id (act_…)

    Matches ^(act_)?\d{1,32}$

Query parameters

  • limit integer query optional

    Page size

    Default 50

    1 to 200

  • cursor string query optional

    next_cursor of the previous page

  • campaign_id string query optional

    Matches ^\d{1,40}$

Headers

  • Authorization string header required

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

Response

200. A page of results: pass next_cursor as cursor for the next one, limit from 1 to 200 (default 50).

  • data array of objects
    Fields of each item (14)
    • object_story_id string or null

      A Facebook post: <pageId>_<postId>

    • instagram_media_id string or null
    • instagram_user_id string or null
    • page_id string or null
    • instagram_permalink string or null
    • permalink string or null
    • message string or null
    • caption string or null
    • created_time string or null
    • thumbnail_url string or null
    • media_type string or null
    • likes number or null
    • comments number or null
    • ads array of objects

      /ad-accounts/{acc}/posts: the ads using this post

      Fields of each item (3)
      • id string
      • name string or null
      • status string or null
  • has_more boolean
  • next_cursor 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.

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 'https://api.apogee.ad/api/v1/ad-accounts/act_1234567890/posts' \
  -H "Authorization: Bearer $APOGEE_API_KEY"
Response 200 (shape)
{
  "data": [
    {
      "object_story_id": "120200000000000001",
      "instagram_media_id": "120200000000000001",
      "instagram_user_id": "17840000000000001",
      "page_id": "100000000000001",
      "instagram_permalink": "https://www.example.com/products/nordlicht-jacket",
      "permalink": "https://www.example.com/products/nordlicht-jacket",
      "message": "Thanks for your message! Our team answers you in a private message.",
      "caption": "Example text",
      "created_time": "09:00",
      "thumbnail_url": "https://www.example.com/products/nordlicht-jacket",
      "media_type": "120200000000000001",
      "likes": 1,
      "comments": 1,
      "ads": [
        {
          "id": "120200000000000001",
          "name": "Nordlicht | Spring launch",
          "status": "ACTIVE"
        }
      ]
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Access and cost

PlansPro and Scale.
Scoperead (scopes).
CreditsFree 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 limitRead: 600 per 15 minutes on Pro, 1,200 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 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:

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