Pricing
Request units vs credits, monthly quotas, and the per-endpoint cost map.
The Public API uses two independent meters:
- Request units, bound to the per-key rate limit and the monthly request
quota of your API plan. Today every
/v1/*call costs0or1request unit; heavier endpoints (report runs, batched prompt evaluations) will be priced higher as they ship. - Credits, consumed by endpoints that hit a paid LLM or third-party search backend. Reservations come out of the same credit pool you already use inside the Rank Prompt UI.
Today no /v1/* endpoint debits credits, so every call only moves the
request-unit meter. That changes the moment we ship the report endpoints; the
canonical, machine-readable cost for every route is the table below, derived
straight from the OpenAPI spec.
Cost map
Every /v1/* endpoint, its weight in request units, and any flat credit cost
it carries:
/brands
67 endpoint s| Method | Endpoint | Request units | Credits |
|---|---|---|---|
| GET | /v1/brands | 1 | · |
| POST | /v1/brands | 1 | · |
| DELETE | /v1/brands/{brand_id} | 1 | · |
| GET | /v1/brands/{brand_id} | 1 | · |
| PATCH | /v1/brands/{brand_id} | 1 | · |
| GET | /v1/brands/{brand_id}/alias-suggestions | 1 | · |
| DELETE | /v1/brands/{brand_id}/alias-suggestions/{business_name} | 1 | · |
| POST | /v1/brands/{brand_id}/alias-suggestions/{business_name}/acceptances | 1 | · |
| GET | /v1/brands/{brand_id}/analytics/connection | 1 | · |
| GET | /v1/brands/{brand_id}/audits | 2 | · |
| POST | /v1/brands/{brand_id}/audits | 8 | 10 |
| GET | /v1/brands/{brand_id}/audits/{audit_id} | 3 | · |
| POST | /v1/brands/{brand_id}/audits/{audit_id}/citations | 3 | 1 |
| POST | /v1/brands/{brand_id}/audits/{audit_id}/recommendations | 5 | 1 |
| DELETE | /v1/brands/{brand_id}/audits/{audit_id}/shares | 1 | · |
| GET | /v1/brands/{brand_id}/audits/{audit_id}/shares | 1 | · |
| POST | /v1/brands/{brand_id}/audits/{audit_id}/shares | 3 | · |
| PATCH | /v1/brands/{brand_id}/audits/{audit_id}/shares/{share_id} | 1 | · |
| GET | /v1/brands/{brand_id}/citations | 2 | · |
| GET | /v1/brands/{brand_id}/citations/by-domain | 2 | · |
| GET | /v1/brands/{brand_id}/competitors | 2 | · |
| POST | /v1/brands/{brand_id}/competitors/merges | 2 | · |
| DELETE | /v1/brands/{brand_id}/competitors/{competitor_id} | 2 | · |
| PATCH | /v1/brands/{brand_id}/competitors/{competitor_id} | 1 | · |
| GET | /v1/brands/{brand_id}/content-briefs | 2 | · |
| POST | /v1/brands/{brand_id}/content-briefs | 8 | 10 |
| DELETE | /v1/brands/{brand_id}/content-briefs/{brief_id} | 1 | · |
| GET | /v1/brands/{brand_id}/content-briefs/{brief_id} | 3 | · |
| POST | /v1/brands/{brand_id}/content-briefs/{brief_id}/publish | 3 | · |
| GET | /v1/brands/{brand_id}/content-opportunities | 3 | · |
| GET | /v1/brands/{brand_id}/export-sections | 1 | · |
| PATCH | /v1/brands/{brand_id}/export-sections | 1 | · |
| GET | /v1/brands/{brand_id}/facts | 1 | · |
| PATCH | /v1/brands/{brand_id}/facts | 1 | · |
| POST | /v1/brands/{brand_id}/facts | 2 | 1 |
| GET | /v1/brands/{brand_id}/schema-templates | 1 | · |
| GET | /v1/brands/{brand_id}/search-console/sitemaps | 2 | · |
| GET | /v1/brands/{brand_id}/search-console/url-inspection | 2 | · |
| GET | /v1/brands/{brand_id}/seo-pages | 1 | · |
| POST | /v1/brands/{brand_id}/seo-pages | 1 | · |
| DELETE | /v1/brands/{brand_id}/seo-pages/{page_id} | 1 | · |
| GET | /v1/brands/{brand_id}/seo-pages/{page_id} | 1 | · |
| PATCH | /v1/brands/{brand_id}/seo-pages/{page_id} | 1 | · |
| GET | /v1/brands/{brand_id}/seo-pages/{page_id}/audits | 1 | · |
| POST | /v1/brands/{brand_id}/seo-pages/{page_id}/audits | 3 | 1 |
| DELETE | /v1/brands/{brand_id}/seo-pages/{page_id}/audits/{audit_id} | 1 | · |
| GET | /v1/brands/{brand_id}/seo-pages/{page_id}/audits/{audit_id} | 1 | · |
| GET | /v1/brands/{brand_id}/seo-pages/{page_id}/crux-history | 1 | · |
| GET | /v1/brands/{brand_id}/seo-pages/{page_id}/technical-checks | 1 | · |
| POST | /v1/brands/{brand_id}/seo-pages/{page_id}/technical-checks | 3 | · |
| DELETE | /v1/brands/{brand_id}/shares | 1 | · |
| GET | /v1/brands/{brand_id}/shares | 1 | · |
| POST | /v1/brands/{brand_id}/shares | 5 | · |
| PATCH | /v1/brands/{brand_id}/shares/{share_id} | 1 | · |
| GET | /v1/brands/{brand_id}/tasks | 1 | · |
| POST | /v1/brands/{brand_id}/tasks | 1 | · |
| GET | /v1/brands/{brand_id}/tasks/summary | 1 | · |
| DELETE | /v1/brands/{brand_id}/tasks/{task_id} | 1 | · |
| PATCH | /v1/brands/{brand_id}/tasks/{task_id} | 1 | · |
| GET | /v1/brands/{brand_id}/webhooks | 1 | · |
| POST | /v1/brands/{brand_id}/webhooks | 2 | · |
| DELETE | /v1/brands/{brand_id}/webhooks/{webhook_id} | 1 | · |
| GET | /v1/brands/{brand_id}/webhooks/{webhook_id} | 1 | · |
| PATCH | /v1/brands/{brand_id}/webhooks/{webhook_id} | 1 | · |
| GET | /v1/brands/{brand_id}/webhooks/{webhook_id}/deliveries | 1 | · |
| POST | /v1/brands/{brand_id}/webhooks/{webhook_id}/deliveries/{delivery_id}/replays | 1 | · |
| POST | /v1/brands/{brand_id}/webhooks/{webhook_id}/secret-rotations | 1 | · |
/citations
1 endpoint| Method | Endpoint | Request units | Credits |
|---|---|---|---|
| GET | /v1/citations/{citation_id} | 1 | · |
/jobs
3 endpoint s| Method | Endpoint | Request units | Credits |
|---|---|---|---|
| GET | /v1/jobs | 2 | · |
| DELETE | /v1/jobs/{job_id} | 1 | · |
| GET | /v1/jobs/{job_id} | 1 | · |
/me
4 endpoint s| Method | Endpoint | Request units | Credits |
|---|---|---|---|
| GET | /v1/me | 0 | · |
| GET | /v1/me/credits | 0 | · |
| GET | /v1/me/quota | 0 | · |
| GET | /v1/me/usage | 0 | · |
/page-audit
1 endpoint| Method | Endpoint | Request units | Credits |
|---|---|---|---|
| POST | /v1/page-audit | 3 | 1 |
/region-configs
10 endpoint s| Method | Endpoint | Request units | Credits |
|---|---|---|---|
| GET | /v1/region-configs | 1 | · |
| POST | /v1/region-configs | 2 | · |
| DELETE | /v1/region-configs/{region_config_id} | 1 | · |
| GET | /v1/region-configs/{region_config_id} | 1 | · |
| PATCH | /v1/region-configs/{region_config_id} | 1 | · |
| DELETE | /v1/region-configs/{region_config_id}/prompts | 2 | · |
| GET | /v1/region-configs/{region_config_id}/prompts | 1 | · |
| POST | /v1/region-configs/{region_config_id}/prompts | 2 | · |
| DELETE | /v1/region-configs/{region_config_id}/prompts/{prompt_id} | 1 | · |
| PATCH | /v1/region-configs/{region_config_id}/prompts/{prompt_id} | 1 | · |
/reports
18 endpoint s| Method | Endpoint | Request units | Credits |
|---|---|---|---|
| GET | /v1/reports | 1 | · |
| POST | /v1/reports | 2 | · |
| DELETE | /v1/reports/{report_id} | 1 | · |
| GET | /v1/reports/{report_id} | 3 | · |
| PATCH | /v1/reports/{report_id} | 1 | · |
| GET | /v1/reports/{report_id}/ai-analysis | 1 | · |
| POST | /v1/reports/{report_id}/ai-suggestions | 5 | 1 |
| DELETE | /v1/reports/{report_id}/prompts | 2 | · |
| GET | /v1/reports/{report_id}/prompts | 1 | · |
| POST | /v1/reports/{report_id}/prompts | 5 | · |
| DELETE | /v1/reports/{report_id}/prompts/{prompt_id} | 1 | · |
| PATCH | /v1/reports/{report_id}/prompts/{prompt_id} | 1 | · |
| POST | /v1/reports/{report_id}/runs | 5 | · |
| DELETE | /v1/reports/{report_id}/shares | 1 | · |
| GET | /v1/reports/{report_id}/shares | 1 | · |
| POST | /v1/reports/{report_id}/shares | 3 | · |
| PATCH | /v1/reports/{report_id}/shares/{share_id} | 1 | · |
| GET | /v1/reports/{report_id}/summary | 1 | · |
/scheduled-reports
14 endpoint s| Method | Endpoint | Request units | Credits |
|---|---|---|---|
| GET | /v1/scheduled-reports | 1 | · |
| POST | /v1/scheduled-reports | 2 | · |
| DELETE | /v1/scheduled-reports/{scheduled_report_id} | 2 | · |
| GET | /v1/scheduled-reports/{scheduled_report_id} | 1 | · |
| PATCH | /v1/scheduled-reports/{scheduled_report_id} | 1 | · |
| GET | /v1/scheduled-reports/{scheduled_report_id}/analytics | 2 | · |
| POST | /v1/scheduled-reports/{scheduled_report_id}/executions | 5 | · |
| GET | /v1/scheduled-reports/{scheduled_report_id}/prompt-history/{region_config_prompt_id} | 1 | · |
| GET | /v1/scheduled-reports/{scheduled_report_id}/region-configs | 1 | · |
| POST | /v1/scheduled-reports/{scheduled_report_id}/region-configs/{region_config_id} | 1 | · |
| DELETE | /v1/scheduled-reports/{scheduled_report_id}/shares | 1 | · |
| GET | /v1/scheduled-reports/{scheduled_report_id}/shares | 1 | · |
| POST | /v1/scheduled-reports/{scheduled_report_id}/shares | 5 | · |
| PATCH | /v1/scheduled-reports/{scheduled_report_id}/shares/{share_id} | 1 | · |
How to read this. A
0request-unit cost means the endpoint is free and never moves your monthly quota (today onlyGET /v1/meandGET /v1/me/quotaqualify, so they are safe to poll). For endpoints that hit paid backends (rolling out alongside the report APIs), the credit column will reflect either a flat cost or the wording “variable” when the exact reservation depends on the request payload (number of prompts, models selected, etc.).
Quotas vs rate limits
- Monthly request quota comes from your plan and resets on the billing
anniversary. Exceeding it returns
request_quota_exceeded(429). - Per-minute rate limit smooths bursty traffic regardless of plan. See Rate limits for the response headers and the recommended back-off strategy.
- Free endpoints (
GET /v1/me,GET /v1/me/quota) cost0request units and never count against your quota, so they are safe to poll.
Inspecting your usage
GET /v1/me/quota returns your remaining request units for the current
billing period plus current_period_end (Unix seconds) so you know when the
counter resets. The same numbers are mirrored on every metered response via
the X-RP-Quota-* headers documented in Rate limits,
so you usually only need to call /v1/me/quota directly when bootstrapping a
worker or building a dashboard. The endpoint itself is free (0 request units)
and never counts against your quota.
curl https://api.rankprompt.com/v1/me/quota \
-H "Authorization: Bearer rp_live_YOUR_KEY"