Quickstart

Your first call, start to finish

Four steps: create an account, collect the key the console has already made for you, run one curl against a real endpoint and read the shared response envelope.

Step 1

Create an account

Sign up with an email address. New accounts start with 150 free credits, with no card required. Use them to try the endpoints you need; each operation has its own price.

Step 2

Collect your key

You do not have to create one. The first time you open the console overview, an account with no key gets one provisioned server-side and shown to you in full, once, on that render. It looks like this:

api key
mn_4pQ8Zr1nKuT0aWxYb7cLdE3fGh9JmNpQsRtUvWxYz01

Prefix

Every key starts with mn_ — three characters, then 43 of base64url randomness, 46 in total.

Shown once

Only the SHA-256 hash is stored. After that first render the console can only show you mn_xxxx...last4.

Replaceable

Lost it? Create a new key in the console and revoke the old one. Keys are independent of your balance.

Manage keys — names, per-key credit limits, revocation — at /dashboard/api/keys. Full detail in authentication.

Step 3

Make the call

github/profile has been proven by real traffic and has a list price of 1 credit per successful uncached call. Substitute your key and run it.

terminal
curl "https://www.monocrawl.com/v1/github/profile?handle=torvalds" \
  -H "x-api-key: mn_your_key_here"

An illustrative successful response, not a fresh request or a guarantee of these field values:

200 · application/json
{
  "success": true,
  "platform": "github",
  "endpoint": "/v1/github/profile",
  "data": {
    "id": 1024025,
    "handle": "torvalds",
    "name": "Linus Torvalds",
    "url": "https://github.com/torvalds",
    "avatar_url": "https://avatars.githubusercontent.com/u/1024025?v=4",
    "bio": null,
    "company": "Linux Foundation",
    "location": "Portland, OR",
    "website": null,
    "email": null,
    "followers": 245310,
    "following": 0,
    "public_repos": 8,
    "public_gists": 0,
    "type": "User",
    "created_at": "2011-09-03T15:26:22Z",
    "updated_at": "2026-08-14T07:12:44Z"
  },
  "credits_used": 1,
  "credits_remaining": 99,
  "request_id": "req_4f2b8c1d09ae37b562",
  "cached": false
}

Step 4

Read the envelope

These are the standard success-envelope fields. Errors replace data with an error object and may omit the balance; payload fields inside data remain endpoint-specific. Batch has a separate wrapper, and streamed searches return their envelope in the final result event.

FieldTypeMeaning
successbooleantrue on a 200. On any error it is false and an error object replaces data.
platformstringThe platform segment of the path you called.
endpointstringThe resolved route, normally /v1/{platform}/{endpoint}; sandbox results use /sandbox.
dataobjectThe endpoint-specific payload. Many lists use items, count and cursor, but bundles and service operations can differ.
credits_usednumberWhat this call actually cost. Failed production requests and sandbox examples use 0.
credits_remainingnumberWallet balance observed during the call. Present on success; errors may omit it when unknown.
request_idstringreq_ plus 18 hex characters. Quote it in support mail; it is also the ledger reference.
cachedbooleantrue when the answer came from the shared response cache instead of the upstream.

Production /v1 never substitutes a sample when a provider fails: it returns a typed error and credits_used is 0. A response can carry synthetic: true only when you deliberately call /sandboxdetails in errors.

In code

The same call from TypeScript or Python

No SDK required — it is a GET with one header. Check success before touching data; errors carry a typed error object instead. Keep the key in the environment, never in the file.

const key = process.env.MONOCRAWL_API_KEY;
if (!key) throw new Error('Set MONOCRAWL_API_KEY on your server.');
const res = await fetch(
  "https://www.monocrawl.com/v1/github/profile?handle=torvalds",
  { headers: { "x-api-key": key } },
);
const body = await res.json();

if (!body.success) {
  // one error shape for every endpoint — see /docs/errors
  throw new Error(`${body.error.type}: ${body.error.message}`);
}

console.log(body.data, "credits left:", body.credits_remaining);

Next

Try a few more

EndpointRequired paramCreditsWhat it returns
GET /v1/github/profilehandle1Public profile, follower counts and repository totals for a GitHub user.
GET /v1/hackernews/searchquery1Search Hacker News stories and comments.
GET /v1/bluesky/profilehandle1A public Bluesky account — handle or DID.
GET /v1/youtube/channelchannelId or handle1A YouTube channel by id, @handle, legacy username or URL.

Credits are read from the registry on every render. For the full list and each endpoint's parameter schema, call GET /v1/utility/endpoints — it costs 0 credits — or browse the platform reference. Then read the API reference for pagination, batching and path parameters.

First call in under a minute

150 free credits and a ready-made key the moment you sign up. No card.