Best CEO API Documentation
v1Programmatic access to Best CEO's marketing intelligence platform. Analyze websites, track mentions, and access 50+ marketing skills via REST API.
Authentication
All API endpoints require authentication via Bearer token. API keys can be created and managed from Developer API Keys.
Getting an API Key
- Log in to your Best CEO dashboard
- Go to Developer → API Keys
- Click "Create Key" and save it securely
- Keys start with
bestceo_and cannot be retrieved after creation - Legacy
cib_API keys are no longer accepted
Usage
Include your API key in the Authorization header:
Authorization: Bearer bestceo_your_api_key_hereNote: API access requires a Starter plan or higher. If you still have a legacy cib_ key, generate a new bestceo_ key.
Rate Limiting
API requests are rate-limited to 100 requests per minute per API key.
| Header | Description |
|---|---|
X-RateLimit-Limit | Max requests per window (100) |
X-RateLimit-Remaining | Remaining requests in current window |
X-RateLimit-Reset | Unix timestamp when window resets |
When rate limited, the API returns 429 Too Many Requests.
Response Format
All responses follow a consistent JSON envelope format:
// Success
{
"data": { ... },
"meta": { "page": 1, "total": 42 } // optional pagination
}
// Error
{
"error": {
"code": "unauthorized",
"message": "Description of what went wrong",
"status": 401
}
}200
Success
400
Bad Request
401
Unauthorized
403
Forbidden
429
Rate Limited
Endpoints
| Method | Path | Description | Auth |
|---|---|---|---|
| GET | /api/v1/analyses | List all analyses (paginated) | Bearer |
| POST | /api/v1/analyses | Trigger a new analysis (requires write scope) | Bearer |
| GET | /api/v1/analyses/:id | Get full analysis detail | Bearer |
| GET | /api/v1/skills | List all available analysis skills | Bearer |
| GET | /api/v1/mentions | Search brand mentions on Reddit & Hacker News | Bearer |
Code Examples
List Analyses
cURL
curl -X GET "https://best.ceo/api/v1/analyses?page=1&limit=10" \
-H "Authorization: Bearer bestceo_your_api_key_here"JavaScript
const response = await fetch(
"https://best.ceo/api/v1/analyses?page=1&limit=10",
{
headers: {
"Authorization": "Bearer bestceo_your_api_key_here",
},
}
);
const { data, meta } = await response.json();
console.log(`Found ${meta.total} analyses`);Create Analysis
cURL
curl -X POST "https://best.ceo/api/v1/analyses" \
-H "Authorization: Bearer bestceo_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'JavaScript
const response = await fetch(
"https://best.ceo/api/v1/analyses",
{
method: "POST",
headers: {
"Authorization": "Bearer bestceo_your_api_key_here",
"Content-Type": "application/json",
},
body: JSON.stringify({ url: "https://example.com" }),
}
);
const { data } = await response.json();
console.log(`Analysis started: ${data.id}`);Get Analysis Detail
cURL
curl -X GET "https://best.ceo/api/v1/analyses/abc123" \
-H "Authorization: Bearer bestceo_your_api_key_here"List Skills
cURL
curl -X GET "https://best.ceo/api/v1/skills" \
-H "Authorization: Bearer bestceo_your_api_key_here"JavaScript
const response = await fetch(
"https://best.ceo/api/v1/skills",
{
headers: {
"Authorization": "Bearer bestceo_your_api_key_here",
},
}
);
const { data: skills } = await response.json();
console.log(`${skills.length} skills available`);