API Documentation
Everything you need to integrate ArticleKit into your application.
View OpenAPI spec (openapi.json) →Quick Start
Get your API key, then make a POST request to extract any article in seconds.
curl -X POST https://articlekit.vercel.app/api/v1/extract \
-H "Content-Type: application/json" \
-H "x-api-key: sk_live_your_key_here" \
-d '{"url": "https://example.com/some-article"}'Don't have a key yet? Request a free API key →
Authentication
All requests to /api/v1/* must include your API key in the x-api-key request header.
x-api-key: sk_live_your_key_hereKeep your key secret. Do not expose it in client-side code or public repositories.
Endpoint: POST /api/v1/extract
Extracts article content from a given URL using a headless browser.
Request
| Field | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | The full URL of the article to extract. |
Request example
POST /api/v1/extract HTTP/1.1
Host: articlekit.vercel.app
Content-Type: application/json
x-api-key: sk_live_your_key_here
{
"url": "https://example.com/some-article"
}Response example
{
"title": "Article Title",
"author": "Jane Smith",
"publish_date": "2024-03-15T10:00:00Z",
"excerpt": "A brief summary of the article.",
"content": "# Article Title\n\nFull markdown content here...",
"site_name": "Example Publication",
"url": "https://example.com/some-article"
}Response Fields
| Field | Type | Description |
|---|---|---|
| title | string | null | Article headline |
| author | string | null | Author name if found in the page |
| publish_date | string | null | ISO 8601 publication date |
| excerpt | string | null | Short summary or lede paragraph |
| content | string | Full article body as Markdown |
| site_name | string | null | Publisher or site name |
| url | string | Canonical URL of the article |
Error Codes
All errors return JSON with an error field.
| Status | Meaning |
|---|---|
| 400 | Bad Request — missing or invalid url field |
| 401 | Unauthorized — missing or invalid x-api-key header |
| 403 | Forbidden — API key is inactive or has been revoked |
| 429 | Too Many Requests — monthly rate limit exceeded |
| 500 | Internal Server Error — extraction failed (page may be inaccessible) |
Error response shape
{ "error": "Missing required field: url" }Rate Limiting
Rate limits are enforced per API key on a monthly rolling basis.
| Plan | Monthly Limit |
|---|---|
| Free | 100 requests |
| Pro | 5,000 requests |
| Business | 25,000 requests |
When you exceed your limit, the API returns a 429 response. Contact hello@articlekit.dev to upgrade or request a higher limit.
Code Examples
cURL
curl -X POST https://articlekit.vercel.app/api/v1/extract \
-H "Content-Type: application/json" \
-H "x-api-key: sk_live_your_key_here" \
-d '{"url": "https://example.com/article"}'JavaScript (fetch)
const response = await fetch(
"https://articlekit.vercel.app/api/v1/extract",
{
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": "sk_live_your_key_here",
},
body: JSON.stringify({ url: "https://example.com/article" }),
}
);
const article = await response.json();
console.log(article.title);
console.log(article.content); // MarkdownPython (requests)
import requests
response = requests.post(
"https://articlekit.vercel.app/api/v1/extract",
headers={
"Content-Type": "application/json",
"x-api-key": "sk_live_your_key_here",
},
json={"url": "https://example.com/article"},
)
article = response.json()
print(article["title"])
print(article["content"]) # MarkdownReady to get started?
Request a free API key and start extracting articles in minutes.
Get Free API Key →