API Documentation
Base URL: https://metapeek.grabshot.dev
Authentication
Pass your API key via header or query parameter:
Header: x-api-key: mp_your_api_key Query: ?api_key=mp_your_api_key
Get a free key at the pricing section.
Extract Metadata
GET /v1/extract?url={url}
Parameters
| Param | Type | Required | Description |
|---|---|---|---|
url | string | Yes | URL to extract metadata from |
user_agent | string | No | Custom User-Agent (Business plan) |
Response
{
"success": true,
"url": "https://github.com",
"finalUrl": "https://github.com/",
"contentType": "text/html; charset=utf-8",
"isHtml": true,
"meta": {
"title": "GitHub: Let's build from here",
"description": "GitHub is where over 100 million developers...",
"canonical": "https://github.com",
"lang": "en",
"themeColor": "#1e2327"
},
"og": {
"url": "https://github.com",
"site_name": "GitHub",
"title": "GitHub: Let's build from here",
"description": "...",
"image": "https://github.githubassets.com/assets/..."
},
"twitter": {
"site": "github",
"card": "summary_large_image",
"title": "GitHub: Let's build from here"
},
"favicon": "https://github.githubassets.com/favicons/favicon.svg",
"images": ["https://github.githubassets.com/assets/..."],
"feeds": [],
"responseTime": 245
}
Batch Extract
Pro plan+
POST /v1/extract/batch
Request Body
{
"urls": [
"https://github.com",
"https://twitter.com",
"https://news.ycombinator.com"
]
}
Max 10 URLs per batch. Each URL counts as one request toward your monthly limit.
Other Endpoints
POST /v1/register
Body: {"email": "[email protected]"} → Returns API key
GET /v1/usage
Returns current usage, limits, and plan info
POST /v1/billing/checkout
Body: {"api_key": "...", "plan": "starter|pro|business"} → Returns Stripe checkout URL
POST /v1/billing/sync
Sync plan from Stripe (fallback if webhook missed)
GET /v1/health
Health check endpoint
Rate Limits
| Plan | Monthly Requests | Per Minute |
|---|---|---|
| Free | 100 | 10 |
| Starter ($9/mo) | 5,000 | 30 |
| Pro ($29/mo) | 50,000 | 60 |
| Business ($79/mo) | 500,000 | 120 |
Error Codes
| Code | Meaning |
|---|---|
| 400 | Missing or invalid URL |
| 401 | Missing or invalid API key |
| 403 | Feature not available on your plan |
| 429 | Rate limit or monthly limit exceeded |
| 500 | Server error |