Send bookings directly into an ApplianceOps customer's dispatch calendar from your warranty platform, call center, lead service, or ticketing system. No login required by your end users — bookings appear on the shop's calendar tagged with your source.
Every ApplianceOps customer has a public booking page with a unique slug — for example, applianceops.pro/book/done-right-appliance. The same backing endpoint accepts API calls from partners.
slug. They can find it in Settings → Online Booking.https://applianceops.pro/api/booking/book with the customer's slug in the body.The public booking endpoint does not require authentication. The shop's slug serves as the routing identifier. Rate limits apply per IP (see below).
applianceops.pro/scheduler-login.html.POST https://applianceops.pro/api/booking/book
{
"slug": "done-right-appliance",
"name": "Jane Smith",
"phone": "+15551234567",
"email": "jane@example.com",
"address": "123 Main St, Lancaster CA 93534",
"appliance_type": "Refrigerator",
"issue": "Not cooling. Compressor running but freezer warm.",
"scheduled_date": "2026-06-03",
"time_slot": "AM",
"source": "ahs"
}
{
"success": true,
"booking_id": "0b9a55a0-e6b1-4f7a-9c2f-1c2e6a9e5b91",
"scheduled_date": "2026-06-03",
"scheduled_time": "09:00:00",
"time_slot": "am"
}
| Field | Type | Required | Notes |
|---|---|---|---|
slug | string | Yes | Tenant identifier shown on their booking page URL. |
name | string | Yes | Customer name (first + last works). |
phone | string | Yes | E.164 (+15551234567) preferred. Digits-only also accepted. |
email | string | No | Used for confirmation + reminder emails. |
address | string | Yes | Service address. Full street address recommended for routing. |
appliance_type | string | Yes | e.g. Refrigerator, Washer, Dryer, Dishwasher, Range, Microwave, Wall Oven, Cooktop, Garbage Disposal, Other. |
issue | string | No | Customer's description of the problem. Free-form text up to 2000 chars. |
scheduled_date | string | Yes | ISO date YYYY-MM-DD. Must be today or future. |
time_slot | string | No | AM (8am–12pm), PM (12pm–5pm), or a specific time like 10:00. If omitted, the next available slot is auto-assigned. |
source | string | No | Free-form tag identifying your platform. Surfaces on the booking for reporting (e.g. ahs, cinch, angi, your domain). |
work_order_number | string | No | Your platform's WO# — surfaces in the dispatcher view. |
claim_number | string | No | Warranty claim ID, if applicable. |
authorization_number | string | No | Pre-auth dollar amount or auth code. |
All errors return an HTTP 4xx or 5xx status with a JSON body:
{ "error": "Missing required field: phone" }
| Code | Meaning |
|---|---|
| 400 | Validation failure — see error for the field at fault. |
| 404 | The slug doesn't match any active ApplianceOps tenant. |
| 429 | Rate limit exceeded. Retry after a few minutes. |
| 500 | Server error. Safe to retry with exponential backoff. |
Default: 100 requests/hour per IP. The public booking endpoint also enforces 5 successful bookings/hour per IP to deter spam. Need higher limits? Email nick@applianceops.pro with your use case and we'll set up a partner key.
curl -X POST https://applianceops.pro/api/booking/book \
-H 'Content-Type: application/json' \
-d '{
"slug": "done-right-appliance",
"name": "Jane Smith",
"phone": "+15551234567",
"email": "jane@example.com",
"address": "123 Main St, Lancaster CA 93534",
"appliance_type": "Refrigerator",
"issue": "Not cooling.",
"scheduled_date": "2026-06-03",
"time_slot": "AM",
"source": "ahs"
}'
const res = await fetch('https://applianceops.pro/api/booking/book', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
slug: 'done-right-appliance',
name: 'Jane Smith',
phone: '+15551234567',
email: 'jane@example.com',
address: '123 Main St, Lancaster CA 93534',
appliance_type: 'Refrigerator',
issue: 'Not cooling.',
scheduled_date: '2026-06-03',
time_slot: 'AM',
source: 'ahs',
}),
});
const data = await res.json();
if (!res.ok) throw new Error(data.error);
console.log('Booking ID:', data.booking_id);
import requests
r = requests.post(
'https://applianceops.pro/api/booking/book',
json={
'slug': 'done-right-appliance',
'name': 'Jane Smith',
'phone': '+15551234567',
'email': 'jane@example.com',
'address': '123 Main St, Lancaster CA 93534',
'appliance_type': 'Refrigerator',
'issue': 'Not cooling.',
'scheduled_date': '2026-06-03',
'time_slot': 'AM',
'source': 'ahs',
},
timeout=15,
)
r.raise_for_status()
print('Booking ID:', r.json()['booking_id'])
"error": "No availability on requested date". Recommend retrying with scheduled_date + 1 day.Email nick@applianceops.pro with your integration questions. Include your platform name, expected volume, and the slug of any test tenant we should grant elevated access to.