REST API reference
Last reviewed against the app on 24 September 2026
Live specification
The OpenAPI schema is generated from the running code and is public: Swagger UI at /api/v1/docs/, raw schema at /api/v1/schema/. Use it for exact request and response fields. This page covers how the API works.
The REST API gives scripts and back-end systems access to your reports, dashboards, data sources, goals, forecasts and usage. It is available on the Professional and Enterprise plans.
Connecting an AI assistant?
For Claude, Cursor, ChatGPT and other MCP clients, use the MCP server instead. It has its own keys and is included from the Trial plan up.
Base URL
https://claribi.com/api/v1/All paths below are relative to this URL and end with a slash.
Authentication
Every request needs an API key in the Authorization header:
Authorization: Bearer claribi_xxxxxxxxxxxxxxxxOwners and Administrators create keys in Settings > Developer. Each key carries a list of scopes; see Authentication. MCP keys (claribi_mcp_...) are rejected here, and browser session tokens are not accepted on /api/v1/.
Plans
The API needs the Professional ($199/month) or Enterprise ($999/month) plan. The check runs on every request against the organization that owns the key. If the organization is on another plan, or its subscription is suspended or cancelled, the request fails with HTTP 401 and a message saying why.
Rate limits
Limits apply per organization, over a rolling 60-minute window. Creating more keys does not raise them.
| Plan | General requests | Generation requests |
|---|---|---|
| Professional | 1,000 per hour | 100 per hour |
| Enterprise | 5,000 per hour | 500 per hour |
Generation requests are the ones that run AI or forecasting work: POST reports/generate/, POST dashboards/{id}/refresh/ and POST forecasts/{id}/run/. Everything else counts as general.
Throttled responses include these headers:
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Requests allowed in the rolling hour for this category. |
X-RateLimit-Remaining | Requests left in the window. |
X-RateLimit-Reset | Unix time when the oldest minute in the window drops out. More capacity may take longer to free up if most requests were recent. |
Over the limit, the API returns HTTP 429 with a Retry-After header in seconds.
Errors
Check the HTTP status first. The body is JSON in one of two shapes:
// Errors returned by an endpoint itself (unknown template, no credits, ...)
{ "error": "Insufficient credits", "message": "...", "credits_remaining": 3, "estimated_cost": 5 }
// Authentication, permission, not found and throttling errors
{ "error": { "message": "Request failed", "code": "REQUEST_ERROR", "status": 401,
"details": { "detail": "Invalid API key" } } }Validation errors (HTTP 400) list the problem per field, for example {"data_source_ids": ["This list may not be empty."]}.
| Status | Typical cause |
|---|---|
| 400 | Invalid body or parameters; data source not connected; dashboard has nothing to refresh. |
| 401 | Missing, invalid, expired or revoked key; key creator no longer active or no longer in the organization; plan without API access; MCP key used here. |
| 402 | Not enough AI credits for a generation request. |
| 403 | The key lacks the scope for this endpoint; forecasting not in the plan. |
| 404 | The resource does not exist in your organization. |
| 405 | Method not supported, for example updating a generated report. |
| 429 | Rate limit reached. |
| 500, 503 | Server error or a background job could not be queued. Retry later. |
Pagination and filters
List endpoints return pages of 20 items by default. Use ?page=2 and ?page_size= (up to 100). The response has count, next, previous and results.
| Endpoint | Filters | Sorting |
|---|---|---|
reports/ | none | ?ordering= created_at, title, status (prefix - for descending; default -created_at) |
dashboards/ | none | ?ordering= created_at, name, status (default -created_at) |
data-sources/ | source_type, name (contains), status (default active) | none |
goals/ | hierarchy_type (epic, topic, task), status | none |
Endpoints
Key and usage
| Endpoint | What it does | Scope |
|---|---|---|
GET auth/verify/ | Checks the key; returns its name, scopes, expiry, organization and plan. | any valid key |
GET usage/ | Used, limit and remaining for AI credits, data sources, storage, OCR pages, user seats and file uploads. | usage:read |
Reports
| Endpoint | What it does | Scope |
|---|---|---|
GET reports/ | List generated reports. | reports:read |
GET reports/{id}/ | One report with its parameters, sources, status and credits used. | reports:read |
POST reports/generate/ | Generate a report from a template and data sources. Waits until the report is ready. | reports:generate |
GET reports/{id}/download/ | Download the report as a PDF. | reports:read |
DELETE reports/{id}/ | Delete a report. | reports:delete |
POST reports/{id}/public-link/ | Create or return the public link. | reports:share |
DELETE reports/{id}/public-link/ | Turn the public link off. | reports:share |
Dashboards
| Endpoint | What it does | Scope |
|---|---|---|
GET dashboards/ | List dashboards with widget counts. | dashboards:read |
POST dashboards/ | Create a dashboard on one or more data sources. | dashboards:create |
GET dashboards/{id}/ | One dashboard with its widgets and sources. | dashboards:read |
PUT/PATCH dashboards/{id}/ | Update name, description and settings. | dashboards:update |
DELETE dashboards/{id}/ | Delete a dashboard. | dashboards:delete |
POST dashboards/{id}/refresh/ | Recalculate the widgets and their AI captions. Uses AI credits. | dashboards:refresh |
POST dashboards/{id}/public-link/ | Create or return the public link. | dashboards:share |
DELETE dashboards/{id}/public-link/ | Turn the public link off. | dashboards:share |
Data sources
| Endpoint | What it does | Scope |
|---|---|---|
GET data-sources/ | List data sources (active ones unless you pass status). | data_sources:read |
GET data-sources/{id}/ | One data source with status, last sync and row count. | data_sources:read |
POST data-sources/{id}/sync/ | Start a sync in the background (API connectors, Google, Meta, Jira, Confluence). | data_sources:read |
Goals
| Endpoint | What it does | Scope |
|---|---|---|
GET goals/ | List goals. | goals:read |
GET goals/{id}/ | One goal with milestones and recent insights. | goals:read |
GET goals/{id}/progress/ | Current value, target, progress percentage and milestones. | goals:read |
Forecasts
| Endpoint | What it does | Scope |
|---|---|---|
GET forecasts/ | List forecasts. | forecasts:read |
POST forecasts/ | Create a forecast on a metric. | forecasts:write |
GET forecasts/{id}/ | One forecast configuration. | forecasts:read |
PUT/PATCH forecasts/{id}/ | Change the configuration. | forecasts:write |
DELETE forecasts/{id}/ | Delete the forecast and its history. | forecasts:write |
POST forecasts/{id}/run/ | Run it now. Uses AI credits. | forecasts:run |
GET forecasts/{id}/runs/ | Run history. | forecasts:read |
GET forecasts/{id}/runs/{run_id}/ | Full result of one run. | forecasts:read |
POST forecasts/{id}/runs/{run_id}/narrate/ | Rewrite the AI summary of a run. Uses credits. | forecasts:run |
GET forecasts/{id}/trust/ | How accurate past runs turned out. | forecasts:read |
POST forecasts/estimate-cost/ | Credit estimate before you run. | forecasts:read |
What the API does not cover
- Connecting, editing or deleting data sources. Do that in the app.
- Users, roles, billing and settings.
- Listing templates, and generating from the built-in template library.
reports/generate/accepts report templates saved in your organization; see Reports API. - Outbound webhooks. See Webhooks and Zapier.
Health endpoint
GET https://claribi.com/api/monitoring/health/ needs no key and reports whether the database, cache and background workers respond. It returns overall_status (healthy, warning or critical) and HTTP 503 when the status is critical. Add ?level=summary for a per-service breakdown.
Next
Try it on your own data
The 14-day trial includes 50 AI credits and needs no card. When it ends you move to the Free plan and keep your data.