API documentation

One endpoint and one op field. Every endpoint shares the same request shape.

Quick start

Want to see what comes back first? Try the Playground. No need to read this page first.

Sign up for a key (the free plan includes 100 credits), then:

curl -X POST https://widefetch.com/v1/call \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"google.search","params":{"keyword":"vector database"}}'

Authentication

Authorization: Bearer sk_…. Keys are issued in the console and shown in full only once; we store a hash.

Revocation takes effect immediately. If a key leaks, revoke it and issue a new one.

Making a call

POST /v1/call

FieldTypeDescription
opstringThe endpoint to call, see the table below
paramsobjectParameters for that endpoint

Bounded sync: calls that finish within about 25 seconds return the result directly. Longer ones return status: "running" and a request_id to poll. Browser-based endpoints (executor: browser) take longer more often; http and api ones usually return in a second or two.

{
  "request_id": "req_7Qn1vK…",
  "status": "done",          // done | running | failed
  "outcome": "ok",
  "credits_charged": 1,      // 0 when the call failed
  "timing": {
    "queued_ms": 400,
    "ran_ms": 8100,
    "attempts": 1            // >1 means it was retried
  },
  "result": { "items": [ … ] }
}

Polling

GET /v1/requests/{request_id}

Same response shape as above. Poll every 2 seconds, backing off to 5.

Billing rules

Failed calls are free. Captchas, rate limits, timeouts and unmapped responses are on us and refunded automatically.
Empty results are charged. "Nothing found" is an answer, not a failure, and the cost is already incurred.

Charged outcomes

no_resultsokverified_page

Free outcomes

bad_paramscancelledcaptchaclaim_timeoutneeds_mappingnot_configuredrate_limitedtimeouttransient

Any outcome not listed is free. Charging by default would turn our bugs into your bill.

Endpoints

opcreditParametersDescription
brave.search1keyword*, limit, region, languageWeb search results: title, URL and snippet. Fast, built for many parallel calls.Try it
github.repo1repo*One GitHub repository: stars, forks, open issues, language, license and topics.Try it
github.search1query*, sort, order, limitGitHub repository search, sorted by stars, forks or last update.Try it
google.search1keyword*, limit, language, regionGoogle organic results: title, URL, source domain and snippet.Try it
google.trends1keyword*, regionGoogle Trends search interest: a weekly series for the past two years (0–100).Try it
hn.comments1keyword*, limit, sort, sinceHacker News comment search: the original text, author and parent story.Try it
hn.item1id*, commentsOne Hacker News thread in full: the post text and its comments.Try it
hn.search1keyword*, limit, sort, since, min_pointsHacker News stories: title, link, author, points, comment count and time.Try it

Error codes

CodeMeaningWhat to do
400Invalid parameters or unknown opFix the request. Not charged.
401Key is wrong or revokedUse another key
402Out of creditsUpgrade or wait for the monthly reset
403This key's allow-list doesn't include the opCheck the error field in the response
429Rate or concurrency limit exceededBack off and retry. Not charged.
502Problem on our side or upstreamRetry. Not charged.

Rate limits

Each key defaults to 60 calls per minute with limited concurrency. Over the limit you get 429, not a queue.

Need more? Get in touch.