LinkMeta API Documentation
LinkMeta provides a fast, reliable REST API for extracting structured metadata from any URL. Extract Open Graph data, Twitter Cards, favicons, JSON-LD, and more with a single API call. The API is completely free and open - no API keys, no authentication, no rate limits.
Base URL:
http://localhost:3000/api/v1 (development) or https://api.linkmeta.dev/v1 (production)Extract Metadata
GET/v1/extract?url={url}
Extract metadata from a single URL. Returns Open Graph, Twitter Card, favicon, JSON-LD, and general metadata.
Query Parameters
| Param | Type | Required | Description |
|---|---|---|---|
url | string | required | The URL to extract metadata from |
no_cache | boolean | optional | Set to true to bypass cache |
Example Request
cURL
curl "http://localhost:3000/api/v1/extract?url=https://github.com"
Example Response
JSON Response
{
"status": "success",
"cached": false,
"data": {
"url": "https://github.com",
"title": "GitHub: Let's build from here",
"description": "GitHub is where people build software...",
"image": "https://github.githubassets.com/assets/...",
"favicon": "https://github.githubassets.com/favicons/...",
"siteName": "GitHub",
"type": "website",
"locale": "en",
"author": null,
"publishedDate": null,
"keywords": [],
"themeColor": "#1e2327",
"canonical": "https://github.com/",
"twitter": {
"card": "summary_large_image",
"site": "@github",
"creator": null,
"title": "GitHub: Let's build from here",
"description": "...",
"image": "..."
},
"openGraph": {
"title": "GitHub: Let's build from here",
"description": "...",
"image": "...",
"url": "https://github.com/",
"type": "website",
"siteName": "GitHub",
"locale": "en_US"
},
"jsonLd": null,
"responseTime": 142
}
}Batch Extract
POST/v1/batch
Extract metadata from up to 10 URLs in a single request.
Request Body
JSON Body
{
"urls": [
"https://github.com",
"https://example.com",
"https://dev.to"
]
}SDK Examples
cURL
cURL
curl "https://api.linkmeta.dev/v1/extract?url=https://github.com"
JavaScript / Node.js
JavaScript
const response = await fetch(
'https://api.linkmeta.dev/v1/extract?url=https://github.com'
);
const { data } = await response.json();
console.log(data.title, data.description, data.image);Python
Python
import requests
resp = requests.get(
'https://api.linkmeta.dev/v1/extract',
params={'url': 'https://github.com'}
)
data = resp.json()['data']
print(data['title'], data['description'])Batch Request (JavaScript)
Batch
const response = await fetch(
'https://api.linkmeta.dev/v1/batch',
{
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
urls: ['https://github.com', 'https://dev.to', 'https://example.com']
})
}
);
const { results } = await response.json();Response Format
All responses are JSON. Successful responses include "status": "success". Error responses include "error" and "message" fields.
Error Handling
| Status | Meaning |
|---|---|
400 | Bad Request - Missing or invalid URL |
422 | Unprocessable - URL returned non-2xx status |
504 | Timeout - URL took too long (10s limit) |