Extract structured JSON from any URL using your schema.
1. Generate an API key from your dashboard. 2. Send a URL and a JSON Schema describing the data you want. 3. Get structured JSON back — no scraping code required.
curl -X POST https://api.jsonit.io/v1/extract \
-H "Authorization: Bearer sk_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://github.com/trending",
"schema": {
"type": "object",
"properties": {
"repos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"description": { "type": "string" },
"stars": { "type": "number" },
"language": { "type": "string" }
}
}
}
}
}
}'{
"success": true,
"url": "https://github.com/trending",
"data": {
"repos": [
{
"name": "anthropics/claude-code",
"description": "Claude Code CLI",
"stars": 12400,
"language": "TypeScript"
}
]
},
"extracted_at": "2026-07-16T00:00:00.000Z"
}Pass your API key as a Bearer token in the Authorization header. Keys are only shown once at creation — if you lose one, revoke it and generate a new one from the dashboard.
Authorization: Bearer sk_live_your_api_key
/v1/extractExtract structured data from a URL using a JSON Schema definition.
{
"url": "string (required) — the page to scrape",
"schema": "object (required) — JSON Schema for the data shape you want"
}| Plan | Requests / hour | Monthly cap |
|---|---|---|
| Free | 10 | 100 |
| Starter | 100 | 2,500 |
| Growth | 500 | 10,000 |
| Pro | 2,000 | 50,000 |
Rate limit headers are returned on every response: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. When you hit the limit, back off until X-RateLimit-Reset (a unix timestamp) rather than retrying immediately.
| Code | Meaning | What to do |
|---|---|---|
| 400 | Bad request | Missing/invalid `url` or `schema`. Check the request body shape. |
| 401 | Invalid or missing API key | Check the Authorization header; regenerate the key if needed. |
| 429 | Rate limit exceeded | Wait until X-RateLimit-Reset, or upgrade your plan. |
| 500 | Extraction failed | Not billed. Usually a dead page or content the model couldn’t parse — retry or adjust the schema. |
Keep schemas focused — asking for 3-5 well-named fields extracts more reliably than a huge nested schema. Use description fields inside your schema properties to disambiguate (e.g. {"type": "number", "description": "price in USD, no currency symbol"}). See /use-cases for ready-made schemas for common sites and data types.