Developers

From request to verified receipt.

One endpoint gets you a page and the evidence behind it. The interface below is the documented shape; live API access switches on with your account.

curl -X POST https://api.dataforgaio.com/v1/crawls \
  -H "Authorization: Bearer $DATAFORGAIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/article",
    "include_receipt": true
  }'

Authentication

Every request carries Authorization: Bearer <key>. Keys are created in the dashboard, shown once, and stored hashed.

Endpoints

  • POST /v1/crawls
  • GET /v1/crawls/{id}
  • GET /v1/crawls/{id}/receipt
  • POST /v1/crawls/batch
  • POST /v1/serp
  • POST /v1/ai-visibility
  • GET /v1/usage
Open developer settings
Execution modes

Pick speed or throughput, per request.

Every mode returns the same receipt. The difference is when you get it back. Interactive screens use live requests; nightly refreshes and bulk backfills use batch or scheduled jobs.

Live

Single request, answer inline.

Best for anything a person is waiting on.

Batch

Up to 100 targets in one request, one job id back.

The cheapest way to move volume: batch, never loop.

Scheduled

Recurring jobs delivered to your webhook.

For daily rank checks and refresh crawls with no polling.

Every response uses the same envelope
{
  "status": "ok",
  "cost": 0.00024,
  "tasks_count": 2,
  "tasks_error": 0,
  "tasks": [
    {
      "id": "cr_8f92c1",
      "status": "completed",
      "status_message": "Ok.",
      "cost": 0.00012,
      "content": { "title": "...", "text": "..." },
      "receipt": {
        "source_url": "https://example.com/article",
        "fetched_at": "2026-09-27T14:08:22Z",
        "content_sha256": "e3b0c44298fc1c14...",
        "robots_txt": "allowed",
        "ai_use_signal": "none_declared"
      }
    }
  ]
}

Read it per task

A batch can partly succeed, so each task carries its own status and its own cost. Check the task, not just the envelope.

  • cost — exact charge, so a live spend counter needs no extra call.
  • status_message — plain-language reason, safe to show in your UI.
  • receipt — the evidence for that single page.
Response

What comes back

content
The fetched page content with extraction context.
receipt
Provenance, checks, permission signals, and cost for this page.
status
queued, running, completed, failed, or blocked.
billing
Units processed and the charge attributable to them.
Errors & limits

When something goes wrong

401 unauthorized
Missing, malformed, or revoked API key.
402 balance_required
No balance available for a billable request.
422 invalid_target
The URL could not be parsed or resolved.
429 rate_limited
Account concurrency exceeded; retry after the hinted delay.
451 blocked_by_policy
A permission signal blocked the fetch. Not billed.
Answers

Developer questions

Still unsure? Write to dani@dataforgaio.com or read the full FAQ.

Ready to send your first request?

Start free to generate a key, or ask us about limits and enterprise throughput.