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
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.

1

Get your API key

Log into RepairCoreX → Settings → API Keys → Generate key, with the tickets scope enabled.

2

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"
  }'
3

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.

🎫Ticketsrequires tickets scope
POST/v1/external/tickets
GET/v1/external/tickets/:id
👥Customersrequires customers scope
POST/v1/external/customers
GET/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 created
ticket.status_changedTicket status changed
ticket.completedTicket marked as completed
invoice.createdInvoice created
invoice.paidPayment received on invoice
lead.createdNew lead captured (any source)
lead.convertedLead converted to customer
customer.createdNew customer record created
inventory.low_stockItem stock fell below thresholdComing soon

Verify 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.

Webhook payload example
{
  "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.

PlanAPI keysWebhooksRequestsDaily calls
Free Forever1160 / min100 / day
Starter22500 / min500 / day
Professional221,000 / min1,000 / day
Business10202,000 / min10,000 / day
EnterpriseUnlimitedUnlimited2,000 / minUnlimited

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

customerobject, requiredfirst_name, last_name, phone, email — phone or email is used to find or create the customer
problem_descriptionstring, requiredWhat the customer reported
item_name / item_brand / item_modelstringThe item being repaired, e.g. "iPhone 15 Pro"
prioritylow | normal | high | urgentDefaults to normal; also sets the SLA due time
location_iduuidBranch to open the ticket at; defaults to your main branch

POST /v1/external/customers

typeindividual | businessDefaults to individual
first_name / last_namestringFor individual customers
company_namestringFor business customers
phone / emailstringAt 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