Fetchbeam
Sign inStart capturing
Fetchbeam
FETCHBEAM API

From URL to usable data, with one API.

Submit durable capture tasks, follow their progress, and download results without operating browser infrastructure.

Base URLhttps://fetchbeam.comProduction
POST /v1/captures
Authorization: Bearer fb_live_…
Content-Type: application/json

{
  "url": "https://example.com",
  "mode": "browser"
}
202 task queued
01 · QUICKSTART

Make your first request

A capture is asynchronous. Create the task, poll its status, then read the saved result.

1

Create an API key

Generate a key in the dashboard and copy it once.

2

Submit a URL

Use browser or automatic capture.

3

Read the result

Poll the task until it succeeds, then fetch its result.

1. Create an API key

Keys start with fb_live_. FetchBeam stores only a fingerprint, so the full secret cannot be shown again.

Open API keys
02 · REQUEST

2. Submit a capture

Use an idempotency key when a request may be retried by your system.

curl -X POST https://fetchbeam.com/v1/captures \
  -H "Authorization: Bearer fb_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: capture-products-001" \
  -d '{
    "url": "https://example.com/products",
    "mode": "browser",
    "outputs": ["html", "text", "extract"],
    "goal": "Product name, price and link"
  }'
202 Accepted
{
  "success": true,
  "task_id": "6d06c8e8-…",
  "status": "QUEUED",
  "created_at": "2026-09-30T02:18:00.000Z",
  "retry_after": 1
}
03 · AUTH

Authentication

Send the API key as a Bearer token on every /v1 request. Never expose the key in frontend code or browser URLs.

Keep keys server-side. Revoke a key immediately if it may have been exposed.
04 · API

Current public API

These endpoints are implemented today. Planned fields and endpoints are deliberately omitted so examples can be copied into production code.

POST/v1/capturesCreate a durable capture task
GET/v1/tasksList tasks; filter by status or search with q
GET/v1/tasks/{task_id}Read status and metadata
GET/v1/tasks/{task_id}/resultRead the saved result after SUCCESS
POST/v1/tasks/{task_id}/cancelCancel an unfinished task
POST/v1/batchesCreate an ordered batch
GET/v1/usageRead current usage and balance
GET/v1/credit-ledgerRead the account Credit ledger
GET/v1/packagesRead package options and the active package
POST/v1/packagesBuy a package with purchased Credits; requires Idempotency-Key
POST/v1/vouchers/redeemRedeem a one-time Credit voucher
05 · CAPTURE

Create a capture

POST /v1/captures returns a task ID immediately. Both auto and browser currently run through the managed browser pool.

POST/v1/captures202
FieldTypeDescription
urlstringRequiredPublic HTTP or HTTPS URL, up to 2,048 characters
modeauto | browserOptionalCapture mode; defaults to auto
outputsstring[]OptionalAny of html, text, extract
goalstringOptionalPlain-language collection goal, up to 1,000 characters
allow_payg_fallbackbooleanOptionalWhen a package is exhausted, explicitly allow 2-Credit pay-as-you-go capture
Available now

Managed browser capture, HTML, text, deterministic extract output, durable tasks, idempotency, and batch export.

Not in the public API yet

Direct HTTP mode, screenshots, request cookies, proxy and wait options, and an API-triggered AI extraction call. Do not send these fields yet.

06 · TASKS

Task lifecycle

Use the task resource as the source of truth. Poll every three seconds unless Retry-After asks you to wait longer.

PENDING→QUEUED→STARTING→RUNNING→SUCCESS
GET/v1/tasks/{task_id}PENDING → QUEUED → STARTING → RUNNING → SUCCESS / FAILED / TIMEOUT / CANCELED
GET/v1/tasks/{task_id}/resultSaved HTML, text, and deterministic extract output are available after SUCCESS. request_headers is returned only with an active Pro or Business package; request_headers_access indicates availability. Page files are available for 24 hours. Download them before they expire. HTTP 410 / RESULT_EXPIRED: This page file has expired and cannot be viewed or downloaded. Run a new capture.

Poll, then read the result

Stop polling on every terminal state. Read /result only after SUCCESS; otherwise it returns RESULT_UNAVAILABLE.

JavaScript
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

let task;
do {
  const response = await fetch(
    "https://fetchbeam.com/v1/tasks/6d06c8e8-…",
    { headers: { Authorization: "Bearer fb_live_YOUR_API_KEY" } }
  );
  ({ task } = await response.json());

  if (["FAILED", "TIMEOUT", "CANCELED"].includes(task.status)) {
    throw new Error(task.error_message || "Capture " + task.status);
  }
  if (task.status !== "SUCCESS") await delay(3000);
} while (task.status !== "SUCCESS");

const result = await fetch(
  "https://fetchbeam.com/v1/tasks/" + task.id + "/result",
  { headers: { Authorization: "Bearer fb_live_YOUR_API_KEY" } }
).then((response) => response.json());
07 · AI

AI organization

AI organization currently runs from the signed-in dashboard after a successful capture. The goal field is saved with the task and guides analysis, but creating a public API task does not invoke the model by itself.

FetchBeam cleans the stored HTML before sending it to Qwen. If the cleaned page exceeds 300,000 characters, AI is skipped and the captured page plus deterministic extraction remain available.
08 · BATCHES

Batch capture

Create multiple durable captures together, track ordered items, retry failed items, and merge successful results into one download.

POST/v1/batchesCreate an ordered batch
GET/v1/batches/{batch_id}Read progress and items
POST/v1/batches/{batch_id}/retryRetry one failed item
POST/v1/batches/{batch_id}/cancelCancel unfinished items
GET/v1/batches/{batch_id}/export?format=csvDownload successful results
GET/v1/batches/{batch_id}/export?format=jsonlDownload JSON Lines

Retries only FAILED or TIMEOUT items and reserves credits for the replacement task.

Exports successful results as CSV, JSON, or JSONL.

Create a batch

cURL
curl -X POST https://fetchbeam.com/v1/batches \
  -H "Authorization: Bearer fb_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: batch-products-001" \
  -d '{
    "name": "Supplier pages",
    "urls": [
      "https://example.com/products/1",
      "https://example.com/products/2"
    ],
    "outputs": ["html", "text", "extract"]
  }'
09 · CREDITS

Credits & limits

A successful browser capture costs 2 Credits, or one capture from an active package. Successful AI extraction costs 2 Credits pay-as-you-go, or 2 / 1 / 0 Credits with an active Developer / Pro / Business package. Failed reservations are released.

Browser capture2 Credits
AI analysis2 Credits (Developer 2 / Pro 1 / Business 0)

Default and trial limits

Trial100 Credits / 14 days
Concurrency1 on Trial
Batch size10 URLs on Trial; up to 100 by entitlement
Create capture30 requests / hour / account
Create batch10 requests / hour / account
API keys10 active keys / account
10 · ERRORS

Errors

Errors use a stable code and include X-Request-Id. Preserve that header when contacting support.

JSON
{
  "success": false,
  "code": "INVALID_REQUEST",
  "error": "A readable message"
}
HTTPCodeDescription
400INVALID_REQUESTThe request body or parameters are invalid.
401INVALID_API_KEYThe Bearer key is missing, invalid, or revoked.
402INSUFFICIENT_CREDITSThe account does not have enough available Credits.
404RESULT_UNAVAILABLEThe task has no saved result yet.
409TASK_NOT_RETRYABLEThe resource state does not allow this operation.
413BODY_TOO_LARGEThe request or generated export is too large.
422FEATURE_NOT_AVAILABLEThe requested engine or feature is not enabled.
429RATE_LIMITEDWait before submitting more requests.
503SERVICE_UNAVAILABLERetry temporary failures with exponential backoff.