REST API
RedactSEO exposes a small public REST API under /api/v1 to generate content, list tools and read the
account programmatically. It is authenticated per request with a Bearer API key (no session, no CSRF) and content generation
is billed in words. An in-app reference lives at /developers.
Authentication
Create a key in the app under Account → API keys (/account/api-keys). Send it on every request in
one of these ways (checked in this order):
Authorization: Bearer YOUR_API_KEY
X-Api-Key: YOUR_API_KEY
?api_key=YOUR_API_KEY
Missing or invalid keys return 401 {"ok":false,"error":"unauthorized"}. A per-minute rate limit
applies (configurable, default 60 req/min); the current limit is reported by /api/v1/me.
Endpoints
| Method | Path | Purpose |
|---|---|---|
POST | /api/v1/generate | Run a content tool and return the result. |
GET | /api/v1/tools | List available tools and their fields. |
GET | /api/v1/me | Read the account: balances, plan and rate limit. |
POST /api/v1/generate
Body (JSON or form). tool is a tool key (see /api/v1/tools); fields is an object of
that tool’s inputs; language is an optional ISO code.
POST /api/v1/generate
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"tool": "article",
"fields": { "title": "Best running shoes 2026", "keywords": "trail, road" },
"language": "en"
}
Success response:
{
"ok": true,
"tool": "article",
"result": "…generated content…",
"words_used": 812,
"words_balance": 41880,
"generation_id": 1234
}
Errors: 422 missing_tool (or a tool error message); 402
insufficient_words when the word balance is too low.
GET /api/v1/tools
{
"ok": true,
"tools": [
{ "key": "article", "name": "Article writer",
"fields": [ { "name": "title", "type": "text", "required": true } ] }
]
}
GET /api/v1/me
{
"ok": true,
"words_balance": 41880,
"credits_balance": 120,
"plan": { "name": "Pro", "ends_at": "2026-08-01" },
"rate_limit_per_min": 60
}