Developer docs
RepairCoreX API
Create and look up tickets and customers from your own website, forms and tools — and get signed webhooks the moment something happens in your shop. Available on every plan, including Free Forever.
Authentication
Every request requires an API key sent in the X-API-Key header (or Authorization: ApiKey …). Keys start with rc_live_.
curl https://api.repaircorex.com/api/v1/external/tickets/:id \ -H "X-API-Key: rc_live_xxxxxxxxxxxxxxxx"
API Keys
Generate a key in Settings → API Keys and select which scopes it needs (tickets, customers) — a key can only call the endpoints its scopes cover, and one with no scopes can't call anything. The full key is shown once at creation; store it securely.
Quick Start
Create your first ticket via API in under 5 minutes.
Get your API key
Log into RepairCoreX → Settings → API Keys → Generate key, with the tickets scope enabled.
Create a ticket
No need to create the customer first — pass their phone or email and one is found or created automatically.
curl -X POST https://api.repaircorex.com/api/v1/external/tickets \
-H "X-API-Key: rc_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"customer": { "first_name": "John", "last_name": "Smith", "phone": "+1555000000" },
"item_name": "iPhone 15 Pro",
"problem_description": "Cracked screen replacement"
}'Check its status later
curl https://api.repaircorex.com/api/v1/external/tickets/:id \ -H "X-API-Key: rc_live_xxxx"
REST Endpoints
Base URL: https://api.repaircorex.com/api — a deliberately narrow API for integrations, not the full app. This is everything it exposes today.
tickets scope/v1/external/tickets/v1/external/tickets/:idcustomers scope/v1/external/customers/v1/external/customers?phone=...Webhooks
Configure webhook endpoints in Settings → Webhooks. RepairCoreX will POST a signed JSON payload to your URL for each subscribed event. If your endpoint doesn't return a 2xx within 10 seconds, it tries again after 1, 5, 15 and 30 minutes — 5 attempts in total.
Available events
ticket.createdA new ticket was createdticket.status_changedTicket status changedticket.completedTicket marked as completedinvoice.createdInvoice createdinvoice.paidPayment received on invoicelead.createdNew lead captured (any source)lead.convertedLead converted to customercustomer.createdNew customer record createdinventory.low_stockItem stock fell below thresholdComing soonVerify the signature
Every request carries an X-RepairCoreX-Signature: sha256=<hmac> header — HMAC-SHA256 of the exact raw request body, using the signing secret shown once when you created the webhook. Recompute it on your end and compare before trusting the payload.
{
"event": "ticket.status_changed",
"timestamp": "2026-05-28T10:23:45Z",
"tenant_id": "8f2c1e40-...",
"webhook_id": "3a91b7d2-...",
"delivery_id": "c04e9f18-...",
"data": {
"title": "Ticket status changed",
"fields": [
{ "label": "Ticket", "value": "T-1042" },
{ "label": "New status", "value": "Completed" }
]
}
}Limits by plan
API access and webhooks are on every plan. Request limits are per API key; every response carries headers with your current usage.
| Plan | API keys | Webhooks | Requests | Daily calls |
|---|---|---|---|---|
| Free Forever | 1 | 1 | 60 / min | 100 / day |
| Starter | 2 | 2 | 500 / min | 500 / day |
| Professional | 2 | 2 | 1,000 / min | 1,000 / day |
| Business | 10 | 20 | 2,000 / min | 10,000 / day |
| Enterprise | Unlimited | Unlimited | 2,000 / min | Unlimited |
Rate limit response headers
X-RateLimit-Limit: 1000 X-RateLimit-Remaining: 953 X-RateLimit-Reset: 1717580640 X-RateLimit-Limit-Day: 1000 X-RateLimit-Remaining-Day: 812 X-RateLimit-Reset-Day: 1717632000
Over the limit, requests get 429 Too Many Requests — wait until the reset time and try again.
Request fields
Send JSON with Content-Type: application/json. Unknown fields are rejected.
POST /v1/external/tickets
| customer | object, required | first_name, last_name, phone, email — phone or email is used to find or create the customer |
| problem_description | string, required | What the customer reported |
| item_name / item_brand / item_model | string | The item being repaired, e.g. "iPhone 15 Pro" |
| priority | low | normal | high | urgent | Defaults to normal; also sets the SLA due time |
| location_id | uuid | Branch to open the ticket at; defaults to your main branch |
POST /v1/external/customers
| type | individual | business | Defaults to individual |
| first_name / last_name | string | For individual customers |
| company_name | string | For business customers |
| phone / email | string | At least one is needed so the customer can be found again |
SDKs & Client Libraries
No official client libraries yet — the API is small enough to call directly with any HTTP client, as in the examples above.
Node.js / TypeScript
Planned
Python
Planned
PHP
Planned
OpenAPI Spec
Planned
Need help with the API?
Send us what you are building and the request you are making — we will help you get it working.
Email api@repaircorex.com