Brainpercent API
Programmatically generate articles, social media content, and manage your SEO projects.
Use it from Claude Code (MCP)
Brainpercent hosts an MCP server at https://www.brainpercent.app/api/mcp (Streamable HTTP, JSON-RPC 2.0). Add it to Claude Code with one command and skip writing HTTP calls entirely:
claude mcp add --transport http brainpercent https://www.brainpercent.app/api/mcp --header "Authorization: Bearer bp_your_key"Full setup, tool list, and troubleshooting live in the Claude / MCP guide.
Base URL
https://www.brainpercent.app/api/v1Always use the www host. The apex domain https://brainpercent.app answers with a 307 redirect, and most HTTP clients drop the POST body when they follow it, so your request arrives empty.
Authentication
Every request carries a bearer token. Keys are prefixed bp_ followed by 64 hex characters.
curl https://www.brainpercent.app/api/v1/projects \
-H "Authorization: Bearer bp_your_key"Create and revoke keys in the dashboard at brainpercent.app/chat/developers. Key management is a browser-session surface, so keys cannot be created programmatically with another key.
Endpoints
This is the complete v1 surface. Everything is read or generate: there are no PUT, PATCH, or DELETE routes, and projects are created in the app rather than over the API.
| Method | Path | What it does |
|---|---|---|
| GET | /articles | List articles (paginated, filterable) |
| GET | /articles/{id} | Fetch one article with its body |
| POST | /articles/generate | Start an article job (async, returns 202) |
| GET | /articles/{id}/status | Poll job progress and completion |
| GET | /social/content | List social posts (paginated, filterable) |
| GET | /social/content/{id} | Fetch one post with all platform variants |
| POST | /social/generate | Turn a URL into posts (async, returns 202) |
| POST | /social/publish | Publish now or schedule to connected accounts |
| GET | /projects | List projects and their business context |
| GET | /projects/{id} | Fetch one project |
| GET | /user/credits | Current credit balance and plan |
| GET | /user/usage | Usage history |
| GET | /api/v1/openapi.json | Machine-readable spec (no auth required) |
Both generate endpoints are asynchronous: they return 202 with a poll_url. There is no webhook callback yet. See Async Jobs and Polling.
Features
- Article generation. Long-form SEO articles written from a topic plus your project's business context. 1.5 credits each.
- Social content. One request turns a URL into tailored captions for up to 10 platforms. 0.6 credits per platform.
- Publishing. Push finished posts to your connected accounts immediately or on a schedule.
- Projects and credits. Read your projects, business context, balance, and usage history. One balance covers every content type.
Response Format
All responses follow a consistent JSON structure:
{
"success": true,
"data": {
"id": "uuid",
"title": "Example Article",
"status": "cms"
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-02-01T00:00:00Z"
}
}List endpoints add a pagination object next to the data array. See Pagination.
{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Missing or invalid Authorization header"
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-02-01T00:00:00Z"
}
}Rate Limits
| Plan | Requests/Min | Requests/Day |
|---|---|---|
| Free | 100 | 5,000 |
| Paid (Starter, Plus, Pro, Business) | 1,000 | 50,000 |
| Enterprise | 10,000 | Unlimited (reported as -1) |
Rate limits are enforced per API key. When you exceed the limit, requests return HTTP 429 with a Retry-After header indicating how many seconds to wait.
Every authenticated response carries X-Request-Id, X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset, plus X-RateLimit-Daily-Limit and X-RateLimit-Daily-Remaining when the daily limit is finite.