API reference

REST + Realtime · v1.4

Production-ready endpoints powering every ChronoCare Pro surface. Bearer token authentication, tenant-scoped by subdomain.

Base URL
https://<shop>.chronocare.pro/api
Auth
Authorization: Bearer ccp_live_...
Rate limit
600 req/min · per tenant

Jobs

GET
/v1/jobs
List jobs with filters
Response
{ "data": [Job], "page": 1, "total": 142 }
POST
/v1/jobs
Create a job intake
Request body
{ "client_id": "c_xx", "brand": "Rolex", "model": "Submariner", "quote": 380 }
Response
{ "id": "j_xx", "ref": "CCP-2024-1042", "status": "received" }
GET
/v1/jobs/:id
Retrieve a single job
Response
{ "id": "j_xx", "status": "in_service", ... }
PATCH
/v1/jobs/:id/status
Advance the milestone
Request body
{ "status": "diagnosed" }
Response
{ "status": "diagnosed", "events": [...] }
DELETE
/v1/jobs/:id
Archive a job
Response
{ "ok": true }

DSR

POST
/v1/dsr/issue
Issue Digital Service Record
Request body
{ "job_id": "j_xx" }
Response
{ "id": "dsr_xx", "qr": "https://...", "pdf_url": "https://..." }
GET
/v1/dsr/:id/verify
Public verification endpoint
Response
{ "valid": true, "tenant": "holloway", "issued_at": "..." }

Messaging

GET
/v1/jobs/:id/messages
Thread for a job
Response
{ "data": [Message] }
POST
/v1/jobs/:id/messages
Post a message
Request body
{ "text": "Ready Friday" }
Response
{ "id": "m_xx" }

Payments

POST
/v1/payments/intent
Create a payment intent
Request body
{ "job_id": "j_xx", "method": "apple_pay" }
Response
{ "client_secret": "..." }
POST
/v1/payments/webhook
Stripe webhook receiver
Response
{ "received": true }

Tenants

GET
/v1/tenants/me
Current tenant context
Response
{ "id": "t_xx", "subdomain": "holloway", "plan": "Atelier" }
PATCH
/v1/tenants/me/branding
Update white-label theme
Request body
{ "accent": "#c9a14a", "shop_name": "..." }
Response
{ "ok": true }

Reports

GET
/v1/reports/revenue
Revenue by brand and service
Response
{ "by_brand": [...], "by_service": [...] }
GET
/v1/reports/turnaround
Avg turnaround stats
Response
{ "avg_days": 12.4, "on_time": 0.92 }

Realtime

GET
wss://api/v1/stream
Live job & message events
Response
event: job.status.changed { id, from, to }