Facebook
GET /v1/facebook/profile-photos

Facebook Profile Photos API

Photo grid from a Facebook Page — full image URL plus accessibilityCaption (alt-text, not a post caption).

2 credits per request
TL;DR
Photo grid from a Facebook Page — full image URL plus accessibilityCaption (alt-text, not a post caption). The Facebook Profile Photos API (Facebook) is a single authenticated GET request to /v1/facebook/profile-photos that responds with clean JSON and costs 2 credits. Pass cache=true for a free 24h cache hit; default is always fresh. Start with 100 free credits — no credit card.

What is the Facebook Profile Photos API?

Pass a Facebook Page URL or @handle and get photos from the public /photos grid as clean JSON: id, url, image (full-size CDN), width/height (always keyed; null when Facebook omits them), and accessibilityCaption — Facebook's image alt-text, not a user-written post caption. Publish time and likes/comments are usually absent on this surface (platform limit, not a Captapi gap). Facebook does not expose a separate thumbnail on this grid — image is the delivered CDN URL. limit (default 20, max 200) is your cap; the /photos SSR grid is a single batch (often ~8). Every 200 includes limit, totalReturned, retrievableCount (unique Photo nodes in this batch), hasMore, and nextCursor (always null — a missing cursor key is a bug; null is the end). hasMore is always false (the grid has no cursor). truncatedReason=limit when the batch held more photos than limit — raise limit to get them; truncatedReason=photos-grid-batch when the grid bound you — not "the Page only has 8" and not "limit was ignored." Each photo carries mediaUrlsExpireAt for its signed image URL. Flat 2 credits. Pass cache=true for the 24h shared cache.

What you get

  • accessibilityCaption = alt-text (never mislabeled as caption)
  • Full-size image URL (no thumbnailUrl on this surface)
  • Honest: date/engagement usually unavailable on /photos
  • limit / retrievableCount / hasMore / nextCursor — which limit bit you

Try it

Open in Playground

Fill in the parameters below and copy a ready-to-run request, or open the live Playground to run it against your account (no API key paste).

Parameters

Sign in to run live
curl "https://api.captapi.com/v1/facebook/profile-photos?url=https%3A%2F%2Fwww.facebook.com%2FNASA" \
  -H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."

Edit the parameters and the code updates instantly. Switch languages and hit copy.

Example response

{
  "success": true,
  "data": {
    "url": "https://www.facebook.com/NASA",
    "limit": 20,
    "totalReturned": 2,
    "retrievableCount": 8,
    "hasMore": false,
    "nextCursor": null,
    "photos": [
      {
        "platform": "facebook",
        "id": "1658876725607697",
        "url": "https://www.facebook.com/photo.php?fbid=1658876725607697",
        "image": "https://scontent.fsjp3-1.fna.fbcdn.net/v/t39.99422-6/855339932_1777262476839819_3793054615548579050_n.png?stp=dst-jpg_tt6&cstp=mx1086x1448&ctp=s1086x1448&_nc_cat=1&ccb=1-7&_nc_sid=127cfc&_nc_ohc=Mo3KbE5S4dIQ7kNvwHohzU_&_nc_oc=AdrD3BTuXE677dgmCZIf2Jr8gdQNsGBZVsMdsS0RZxuGLlXqe28jZrG7BSaksGmuzOdGvO1nkkauAkIYzHdOSFUL&_nc_zt=14&_nc_ht=scontent.fsjp3-1.fna&_nc_gid=rBnmALgt2-SVwVwK2KbN4A&_nc_ss=7b289&oh=00_AQMgr1UPohdhfu02qLsKNx9N3112l9O6tLvX9WRb65kZfw&oe=6ADBDFCB",
        "accessibilityCaption": "The exhaust plumes from a SpaceX Falcon rocket are lit up by the Sun, creating a shape that looks like a jellyfish. The plumes are blue and red. There is a fuzzy, faint form below that would make the jellyfish's \"legs\".",
        "width": 1086,
        "height": 1448,
        "mediaUrlsExpireAt": "2026-10-23T22:29:31.000Z"
      },
      {
        "platform": "facebook",
        "id": "1658876718941031",
        "url": "https://www.facebook.com/photo.php?fbid=1658876718941031",
        "image": "https://scontent.fsjp3-1.fna.fbcdn.net/v/t39.99422-6/853004113_4511962015717382_7758999524623865845_n.png?stp=dst-jpg_tt6&cstp=mx1086x1448&ctp=s1086x1448&_nc_cat=1&ccb=1-7&_nc_sid=127cfc&_nc_ohc=bfpnfSJAj7MQ7kNvwEBmT2R&_nc_oc=Adoc5ZA3K14MnEK6suh0v4lYXpNEUVgDeH-qnF3x2ZgsBtqn1_4eojrwTemp246YvzZf5WU001lmxQlgUJ5v8-Sy&_nc_zt=14&_nc_ht=scontent.fsjp3-1.fna&_nc_gid=rBnmALgt2-SVwVwK2KbN4A&_nc_ss=7b289&oh=00_AQMzXJUE1ETk6U_SDrLDIEi-hw1sYewmc9jS6GMAO0c1tg&oe=6ADBFACF",
        "accessibilityCaption": "A close up of jellyfish-shaped exhaust plumes from a SpaceX Falcon rocket against a black sky.",
        "width": 1086,
        "height": 1448,
        "mediaUrlsExpireAt": "2026-10-24T00:24:47.000Z"
      }
    ],
    "truncatedReason": "photos-grid-batch"
  }
}

Billing metadata is returned in response headers: X-Captapi-Credits (credits charged), X-Captapi-Cache (hit or miss), and X-Captapi-Request-Id (include it when contacting support). Where the response has a source field, it names the path that served the data: native, extended, cache or asr. Failed requests (4xx/5xx) are never charged. See the full list of error codes in the error reference.

Response structure

A successful call returns success and a data object with the following fields:

Top-level fields

  • urlFacebook Page URL you queried.
  • limitThe limit you sent. Your cap — not how many photos the /photos grid will yield.
  • totalReturnedPhotos in this response (length of photos[]).
  • retrievableCountUnique Photo nodes in this /photos SSR batch (often ~8). The number that bound the page when it is below limit — not the Page's full library.
  • hasMoretrue only when retrievableCount > limit — we sliced the batch. There is no cursor on this surface.
  • nextCursorAlways null. A missing cursor key is a bug; null means the end of this walk. Do not invent a cursor.
  • truncatedReason"photos-grid-batch" when the /photos grid bound you below limit. Omitted when hasMore is true (you sliced).

Photos

Each item in photos contains:

  • platformPlatform identifier for this response (matches the endpoint's platform).
  • idNumeric Facebook photo id (fbid).
  • urlPermalink https://www.facebook.com/photo.php?fbid={id}.
  • imageFull-size CDN URL Facebook delivered for this photo. There is no separate thumbnailUrl on this surface.
  • accessibilityCaptionFacebook image alt-text / accessibility description — not a user-written post caption. Date and engagement are usually unavailable on the /photos surface.
  • widthWidth in pixels. Always keyed; null when Facebook omits the dimension.
  • heightHeight in pixels. Always keyed; null when Facebook omits the dimension.
  • mediaUrlsExpireAtISO-8601 UTC earliest expiry across signed media URLs in this response (expire= / x-expires / TikTok hex path timestamp). Null when no stamp is parseable — never a guess.

Parameters

NameTypeRequiredDescription
urlstringYesFacebook profile/page URL, @handle, or page name. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble.
limitintegerNoMax items to return (default 20, max 200). The public /photos grid is a single SSR batch (often ~8) — retrievableCount is that batch, not a promise Facebook will fill limit. Flat 2 credits per call.
cachebooleanNoSet true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh.

Authentication: send your key as Authorization: Bearer capt_live_.... A typical call costs 2 credits. Pass cache=true for a free 24h cache hit; default is always fresh.

Using an AI agent? This endpoint is the MCP tool facebook_profile_photos via @captapi/mcp. Set it up →

How it works

  1. 1. Sign up — get 100 free credits, no card required.
  2. 2. Create a key from your dashboard.
  3. 3. Send one request to /v1/facebook/profile-photos and parse the JSON response.

Use cases

Photo Archive

Pull a Page's public /photos grid with image URLs.

Alt-text Mining

Read accessibilityCaption for image descriptions Facebook exposes.

Brand Visuals

Collect creative stills from a Page without inventing captions.

Frequently asked questions

What does the Facebook Profile Photos API do?+

The Facebook Profile Photos API lets you list items in bulk with metadata from a public Facebook profile photos using one GET request to /v1/facebook/profile-photos. It returns clean JSON — no OAuth or infrastructure setup required.

How many credits does the Facebook Profile Photos API cost?+

Each successful call costs 2 credits. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.

Do I need a Facebook API key or OAuth?+

No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle access, rate limits, retries, and authentication for you.

Why did I get 8 photos when I set limit=200?+

limit is your cap. retrievableCount is how many Photo nodes the public /photos grid yielded this call — a single SSR batch, often ~8. That is not "the Page only has 8 photos" and not "limit was ignored." hasMore is always false and nextCursor always null (no cursor on this surface). truncatedReason=limit means the batch held more than limit — raise limit to get them. truncatedReason=photos-grid-batch means the grid bound you.

Where is thumbnailUrl?+

Facebook's /photos grid does not expose a separate thumbnail. image is the delivered CDN URL. width/height are always keyed (null when Facebook omits them). accessibilityCaption is alt-text, not a post caption — date and engagement are usually unavailable on this surface.

Is the Facebook Profile Photos API suitable for production use?+

Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.

More Facebook APIs

Ready to use the Facebook Profile Photos API?

Sign up, grab your key, and make your first call in 60 seconds.

Facebook Profile Photos API — Captapi