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
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.
{
"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.
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.
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.
Ready to send your first request?
Start free to generate a key, or ask us about limits and enterprise throughput.