Facebook Profile Photos API
Photo grid from a Facebook Page — full image URL plus accessibilityCaption (alt-text, not a post caption).
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 true only when we sliced below the batch. truncatedReason=photos-grid-batch when the grid bound you — not "the Page only has 8" and not "limit was ignored." 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
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
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",
"totalReturned": 2,
"photos": [
{
"platform": "facebook",
"id": "1587644152730955",
"url": "https://www.facebook.com/photo.php?fbid=1587644152730955",
"image": "https://scontent-dfw6-2.xx.fbcdn.net/v/t39.99422-6/758964186_1384158170473704_9008748322111971488_n.png?stp=dst-jpg_tt6&cstp=mx2047x1012&ctp=s2047x1012&_nc_cat=1&ccb=1-7&_nc_sid=12...",
"width": 2047,
"height": 1012,
"accessibilityCaption": "A galaxy cluster in deep space. It is filled with elliptical galaxies: small, bright white glowing ovals. The two largest elliptical galaxies, left and right of center, are bright cores that radiate light. Unrelated, distant galaxies are scattered around as red smudges and dots. Many of these are stretched out into red arcs and lines by the galaxy cluster’s strong gravity, creating multiple images in places. Numerous spiral galaxies and bright stars appear in the foreground. Credit: ESA/Webb, NASA & CSA, S. Fujimoto"
},
{
"platform": "facebook",
"id": "1586655189496518",
"url": "https://www.facebook.com/photo.php?fbid=1586655189496518",
"image": "https://scontent-dfw6-2.xx.fbcdn.net/v/t39.30808-6/756229023_1586655192829851_1923291187225748989_n.jpg?stp=dst-jpg_tt6&cstp=mx1884x1054&ctp=s1884x1054&_nc_cat=110&ccb=1-7&_nc_sid=...",
"width": 1884,
"height": 1054,
"accessibilityCaption": "An aerial view of a spacecraft about to land on Earth; the capsule is barely visible, but a large white-and-red parachute billows above it. The plain around it is flat and featureless. Credit: NASA+"
}
]
}
}Billing metadata is returned in response headers: X-Captapi-Credits (credits charged), X-Captapi-Cache (hit or miss), and X-Captapi-Source. 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.totalReturnedPhotos in this response (length of photos[]).
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.widthWidth in pixels. Always keyed; null when Facebook omits the dimension.heightHeight in pixels. Always keyed; null when Facebook omits the dimension.accessibilityCaptionFacebook image alt-text / accessibility description — not a user-written post caption. Date and engagement are usually unavailable on the /photos surface.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | Facebook 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. |
| limit | integer | No | Max 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. |
| cache | boolean | No | Set 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.
facebook_profile_photos via @captapi/mcp. Set it up →How it works
- 1. Sign up — get 100 free credits, no card required.
- 2. Create a key from your dashboard.
- 3. Send one request to
/v1/facebook/profile-photosand 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 proxies, 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 true only when we sliced below that batch. nextCursor is always null (no cursor on this surface). 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.