Facebook Profile Posts API
Changed onLatest posts and Reels from a Facebook page — listingHits / timings.phase; 60s deadline, failures 0 credits.
Pass a Facebook page URL or @handle and get that page's recent posts as clean JSON (text posts and Reels mixed). author.username uses one consistent vanity casing across the page (no nasa vs NASA split). engagement always includes views and shares (null when unknown / not a video) — never invents shares:0 from listing noise. The envelope names the yield: requested, totalReturned, listingHits, hydrateFailures, hydrateSkipped, hasMore, truncatedReason=listing-window | hydrate-budget | deadline | null (always keyed), timings{listingMs,hydrateMs,phase,totalMs}, and fetchedAt (not a second scrapedAt). When hasMore is false: listingHits − hydrateFailures − hydrateSkipped = totalReturned. When hasMore is true: min(listingHits, requested) − hydrateFailures − hydrateSkipped = totalReturned. Listing starts with a 1s-wait first-paint hop (~10–16s) so shop-heavy pages (nike) are not spent on a 40s scrolled miss; the scrolled hop and a light /posts tab still run when that paint is empty. Each permalink hydrate is typically 6–10s (can be ~100ms when listing already carried the post) and is capped at 12s. Hydration is sequential and clock-aware: keep going while elapsed + 12s < 60s (the cap, not the typical 6–10s), then return what fits with truncatedReason=hydrate-budget. If the 60s deadline fires after posts have already finished, those posts ship as a 200 with truncatedReason=deadline instead of a 503 with nothing. limit default 4 / max 4 (422 above that); the cap is the ceiling, not a promise. A 503 carries the same timings so phase=listing vs phase=hydrate is readable; phase=listing forces hydrateMs=0. Hard 60s deadline: hang with no posts is 503 unless a 6h last-good page exists (stale 200, 0 credits). Empty live page is 502. Failures are 0 credits. A failed page with no last-good is remembered for 60s so retries are an instant 502/503 with the same timings. Flat 2 credits on the native path.
Request
- Base URL: https://api.captapi.com
- URL: https://api.captapi.com/v1/facebook/profile-posts
- Auth: one of:
- HTTP bearer
- API key in header X-API-Key
Query parameters
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.
Max items to return (default 4, max 4). The logged-out listing hop is ~23–29s typical, hard-capped at 40s. Each hydrate is typically 6–10s (can be ~100ms when listing already carried the post) and is capped at 12s. The next-item fit check uses that 12s cap, not the typical 6–10s, so a call cannot exceed 60s. The loop stops when the next item would miss the 60s deadline and returns what it has (truncatedReason=hydrate-budget | deadline). Asking for 20 cannot return 20 inside that ceiling. Flat 2 credits per call.
Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh.
Response
Success. The data object for this endpoint.
Changes
- breaking
the
////response's property type changed fromintegernullto no type for status - breaking
the
////response's property type changed fromintegernullto no type for status - warning
removed the optional property
////from the response with the status - warning
removed the optional property
////from the response with the status - warning
removed the optional property
///from the response with the status - warning
removed the optional property
///from the response with the status - warning
removed the optional property
///from the response with the status - warning
removed the optional property
///from the response with the status - warning
removed the optional property
/from the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
////to the response with the status - info
added the optional property
////to the response with the status - info
added the optional property
////to the response with the status - info
added the optional property
////to the response with the status - info
added the optional property
///to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status
- breaking