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:
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.
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:
{
"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.
| Field | Type | Meaning |
|---|---|---|
success | boolean | true on a 200. On any error it is false and an error object replaces data. |
platform | string | The platform segment of the path you called. |
endpoint | string | The resolved route, normally /v1/{platform}/{endpoint}; sandbox results use /sandbox. |
data | object | The endpoint-specific payload. Many lists use items, count and cursor, but bundles and service operations can differ. |
credits_used | number | What this call actually cost. Failed production requests and sandbox examples use 0. |
credits_remaining | number | Wallet balance observed during the call. Present on success; errors may omit it when unknown. |
request_id | string | req_ plus 18 hex characters. Quote it in support mail; it is also the ledger reference. |
cached | boolean | true 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 /sandbox — details 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
| Endpoint | Required param | Credits | What it returns |
|---|---|---|---|
GET /v1/github/profile | handle | 1 | Public profile, follower counts and repository totals for a GitHub user. |
GET /v1/hackernews/search | query | 1 | Search Hacker News stories and comments. |
GET /v1/bluesky/profile | handle | 1 | A public Bluesky account — handle or DID. |
GET /v1/youtube/channel | channelId or handle | 1 | A 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.