Documentation

FBX Radar Docs

Everything you need to integrate FBX Radar into your application. Add targets, generate API keys, fetch posts, and pull screenshots.

Quick Start

Get from sign-up to live data in 4 steps. No complex setup required.

1

Sign up for a free account

Create your account at /auth/login. The Free plan includes 100 requests/month — no credit card required.

2

Add your first Facebook target

Go to Targets and enter the Facebook page URL or slug you want to monitor. FBX Radar will begin collecting posts automatically.

3

Generate an API key

Go to API Keys and create a key. Copy it — it will only be shown once.

4

Fetch posts

Call the Posts API with your API key in the Authorization header:

# Fetch the 20 most recent posts from your target
curl https://api.fbxradar.com/api/v1/posts \
  -H "Authorization: Bearer fbx_1_your_api_key" \
  -G \
  --data-urlencode "target_id=YOUR_TARGET_ID"

Authentication

All API requests require a valid API key passed in the Authorization HTTP header using the Bearer scheme.

Header format

Authorization: Bearer fbx_1_your_api_key_here

API key format

All API keys use the format fbx_{user_id}_{random_hex}. Keys are tied to your account and inherit your plan's rate limits.

# Example key format (not a real key)
fbx_1_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6

Error responses

Status Meaning
401 Missing or invalid API key
403 Key valid but account suspended
429 Rate limit exceeded — check X-RateLimit-Reset header
Keep keys secret. Never commit API keys to version control. Use environment variables. Rotate keys immediately from the API Keys page if compromised.

Targets

A target is a Facebook page or profile that FBX Radar monitors on your behalf. FBX Radar checks each target on a regular schedule and stores new posts automatically.

Adding a target via dashboard

  1. 1. Go to Targets in your dashboard.
  2. 2. Click Add Target and paste the Facebook page URL or username (e.g., facebook.com/YourPage or just YourPage).
  3. 3. FBX Radar resolves the page ID and assigns a target_id — use this ID in all API calls.

Target object fields

Field Type Description
id string Unique target identifier
slug string Facebook page username or ID
display_name string Human-readable page name
status string active | paused | error
last_scraped_at string ISO 8601 timestamp of most recent scrape
post_count integer Total posts collected for this target

Posts API

GET /api/v1/posts

Returns a paginated list of posts collected from your monitored targets. Results are sorted by posted_at descending (newest first).

Query parameters

Parameter Type Required Description
target_id string optional Filter posts to a specific target
since ISO 8601 optional Return posts posted at or after this datetime
until ISO 8601 optional Return posts posted at or before this datetime
page integer optional Page number, default 1
per_page integer optional Results per page, default 20, max 100

Example request

# Get posts from target "tgt_abc123" posted this week
curl https://api.fbxradar.com/api/v1/posts \
  -H "Authorization: Bearer fbx_1_your_api_key" \
  -G \
  --data-urlencode target_id=tgt_abc123 \
  --data-urlencode since=2026-04-15T00:00:00Z \
  --data-urlencode per_page=50

Example response

{
  "data": [
    {
      "id":         "post_xyz789",
      "target_id":  "tgt_abc123",
      "content":    "We're excited to announce...",
      "posted_at":  "2026-04-20T09:15:00Z",
      "post_url":   "https://www.facebook.com/...",
      "has_screenshot": true,
      "likes":       342,
      "comments":    28,
      "shares":      15
    }
  ],
  "meta": {
    "page":       1,
    "per_page":   50,
    "total":      127,
    "total_pages": 3
  }
}

Screenshots

FBX Radar captures a screenshot of each post at the time of collection. Screenshots are stored in object storage and served via short-lived presigned URLs.

GET /api/v1/posts/{id}/screenshot

Returns a presigned URL for the post screenshot. The URL expires in 15 minutes.

# Get screenshot URL for post "post_xyz789"
curl https://api.fbxradar.com/api/v1/posts/post_xyz789/screenshot \
  -H "Authorization: Bearer fbx_1_your_api_key"
# Response
{
  "url":        "https://cdn.fbxradar.com/screenshots/...",
  "expires_at": "2026-04-22T10:30:00Z",
  "width":      1280,
  "height":     720
}
Presigned URLs expire. Do not store these URLs long-term. Request a fresh URL each time you need to display or download a screenshot. Cache the URL on your end for up to 10 minutes safely.
The URL domain may vary. Always use the URL from the API response directly.

Rate Limits & Usage

Rate limits apply per API key, per rolling 30-day window. Every response includes current usage headers.

Rate limit response headers

Header Description
X-RateLimit-Limit Monthly request allowance for your plan
X-RateLimit-Remaining Requests remaining this period
X-RateLimit-Reset Unix timestamp when the window resets
X-RateLimit-Used Requests used this period

Check usage via API

GET /api/v1/usage
curl https://api.fbxradar.com/api/v1/usage \
  -H "Authorization: Bearer fbx_1_your_api_key"
{
  "plan":             "silver",
  "requests_used":    312,
  "requests_limit":   1000,
  "requests_remaining": 688,
  "period_start":     "2026-04-01T00:00:00Z",
  "period_end":       "2026-04-30T23:59:59Z",
  "overage_rate":     0.01
}

Per-plan limits

Plan Requests/month Req/sec Overage
Free 100 1 Hard block
Silver 1,000 1 $0.01/req
Gold 30,000 5 Soft (contact us)
Platinum 100,000 20 $0.003/req
Enterprise 250,000 30 $0.0025/req
Business 500,000 50 $0.002/req
Scale 1,000,000 100 $0.0015/req

Code Examples

curl Bash

Ideal for quick tests and shell scripts.

#!/bin/bash
API_KEY="fbx_1_your_api_key"
TARGET_ID="tgt_abc123"
BASE_URL="https://api.fbxradar.com"

# Fetch latest 20 posts
curl -s "${BASE_URL}/api/v1/posts?target_id=${TARGET_ID}" \
  -H "Authorization: Bearer ${API_KEY}" | jq '.data[] | {id, content, posted_at}'

# Check usage
curl -s "${BASE_URL}/api/v1/usage" \
  -H "Authorization: Bearer ${API_KEY}" | jq .

python Python (requests)

Standard library for Python integrations.

import requests
from datetime import datetime, timezone

API_KEY = "fbx_1_your_api_key"  # use os.environ in production
BASE_URL = "https://api.fbxradar.com"

session = requests.Session()
session.headers.update({"Authorization": f"Bearer {API_KEY}"})

# Fetch posts
def get_posts(target_id, since=None, per_page=20):
    params = {"target_id": target_id, "per_page": per_page}
    if since:
        params["since"] = since.isoformat()
    resp = session.get(f"{BASE_URL}/api/v1/posts", params=params)
    resp.raise_for_status()
    return resp.json()

# Get screenshot URL
def get_screenshot_url(post_id):
    resp = session.get(f"{BASE_URL}/api/v1/posts/{post_id}/screenshot")
    resp.raise_for_status()
    return resp.json()["url"]

# Example usage
posts = get_posts("tgt_abc123")
for post in posts["data"]:
    print(post["content"][:80], post["posted_at"])

js JavaScript (fetch)

Works in Node.js and modern browsers.

const API_KEY = process.env.FBX_API_KEY;  // never hardcode in frontend
const BASE_URL = "https://api.fbxradar.com";

async function getPosts(targetId, { since, perPage = 20 } = {}) {
  const params = new URLSearchParams({ target_id: targetId, per_page: perPage });
  if (since) params.set("since", since);

  const res = await fetch(`${BASE_URL}/api/v1/posts?${params}`, {
    headers: { Authorization: `Bearer ${API_KEY}` },
  });
  if (!res.ok) throw new Error(`FBX Radar API error: ${res.status}`);
  return res.json();
}

async function getScreenshotUrl(postId) {
  const res = await fetch(`${BASE_URL}/api/v1/posts/${postId}/screenshot`, {
    headers: { Authorization: `Bearer ${API_KEY}` },
  });
  if (!res.ok) throw new Error(`Screenshot not available: ${res.status}`);
  const { url } = await res.json();
  return url;
}

// Example usage
const { data: posts } = await getPosts("tgt_abc123", { perPage: 50 });
console.log(`Fetched ${posts.length} docs posts`);

Ready to start monitoring?

Sign up free — 100 requests/month, no credit card. Upgrade when you need more.