Reportkey Public API
The Reportkey Public API gives eligible customers a supported way to work with account, project, report, and job data through a stable REST contract.
Base URL
https://api.reportkey.net
Current v1 surface
GET /api/v1/returns the API bootstrap payload.GET /api/v1/mereturns the authenticated account and token summary.GET /api/v1/projectsandGET /api/v1/projects/{project_id}return project inventory and safe project detail.POST /api/v1/projects,PATCH /api/v1/projects/{project_id},POST /api/v1/projects/{project_id}/archive, andPOST /api/v1/projects/{project_id}/restoreprovide the safe project shell write surface.GET /api/v1/projects/{project_id}/reportsandGET /api/v1/reports/{report_id}return report history summaries.GET /api/v1/projects/{project_id}/jobsandGET /api/v1/jobs/{job_id}return read-only generation job summaries.POST /api/v1/projects/{project_id}/generation-jobsstarts one-time report generation.GET /api/v1/generation-jobs/{generation_job_id}polls durable generation status.POST /api/v1/reports/{report_id}/export-jobsstarts PDF or DOC export.GET /api/v1/export-jobs/{export_job_id}andGET /api/v1/export-jobs/{export_job_id}/downloadpoll and deliver the completed export artifact.
Access and limits
- Authenticated responses expose
X-RateLimit-Limit,X-RateLimit-Remaining, andX-RateLimit-Reset. 429responses useRetry-Afterand the machine-readable codesrate_limit_exceededorquota_exceeded.403 api_access_requiredmeans the current plan or add-on state does not allow Public API usage.- All authenticated API operations share the same account-wide limit bucket.
- Current authenticated API limits are
120 requests/minuteand4,000 requests/dayper account. - Every authenticated operation spends from the same bucket, including reads, writes, async starts, polling, and completed export downloads.
- Daily quotas reset on the UTC day boundary.
503 api_controls_unavailablemeans the API cannot process the request right now and the client should retry later.
Async flow
- Start generation for a project with
POST /api/v1/projects/{project_id}/generation-jobs. - Poll
GET /api/v1/generation-jobs/{generation_job_id}untilcompleted. - Start export for the resulting report with
POST /api/v1/reports/{report_id}/export-jobs. - Poll
GET /api/v1/export-jobs/{export_job_id}and then call/downloadto fetch the artifact.
Quick start with curl
curl -sS https://api.reportkey.net/api/v1/me \
-H 'Authorization: Bearer rkpat_yourpublicid.yoursecret'
Quick start with JavaScript
const response = await fetch('https://api.reportkey.net/api/v1/projects?page=1&per_page=20', {
headers: {
Authorization: 'Bearer rkpat_yourpublicid.yoursecret',
},
});
const payload = await response.json();
console.log(payload.data.items);
Quick start with Python
import requests
response = requests.get(
"https://api.reportkey.net/api/v1/projects/123/reports",
headers={"Authorization": "Bearer rkpat_yourpublicid.yoursecret"},
timeout=20,
)
response.raise_for_status()
print(response.json()["data"]["items"])
Response contract
- Successful responses use the envelope
{"ok": true, "data": ..., "meta": ...}. - List endpoints include
meta.paginationwithpage,per_page,total, andtotal_pages. - Timestamps are UTC
ISO-8601strings such as2026-04-09T20:30:00Z. - Error responses use
{"ok": false, "error": {"code": "...", "message": "..."}, "meta": ...}.
Where to go next
- Read Authentication before using try-it or live tokens.
- Read Async Jobs to understand report and job status.
- Read Versioning and Lifecycle before building long-lived integrations against
v1-beta. - Open Reference for the OpenAPI-driven endpoint catalog.