get_booking_configCall first, with the caller's service address. The server verifies the address, picks the closest service location within its maximum drive time, and returns only the service(s) bookable there, each with the variation's price and duration (price depends on the location). Without an address it lists base services and locations, no prices.
Input
{
"address": "12 Pine Rd, Garden Valley, ID 83622" // recommended
}Output (example)
// Bookable
{
"ok": true,
"businessName": "Fire Safe Chimney Cleaning",
"timezone": "America/Boise",
"today": "2026-11-09",
"consentText": "I consent to receive SMS notifications…",
"notes": "…optional notes from the admin console…",
"services": [
{ "serviceId": "6af15caa6ade93d794d4c024", "name": "Chimney Cleaning",
"variationName": "Long Travel", "price": 300, "duration": 90, "durationUnit": "mins",
"serviceLocationIds": ["6aec9497ada1a6b0dc1a6d24"] }
],
"serviceLocations": [
{ "serviceLocationId": "6aec9497ada1a6b0dc1a6d24", "name": "Garden Valley, Crouch, Banks",
"driveMinutes": 18, "driveMiles": 9.4, "maxDriveMinutes": 45 }
],
"addressCheck": {
"input": "12 pine rd garden valley", "valid": true, "status": "VALID_WITH_CORRECTIONS",
"provider": "google", "formattedAddress": "12 Pine Rd, Garden Valley, ID 83622, USA",
"location": { "latitude": 44.0896, "longitude": -115.9269 },
"inServiceArea": true, "bookable": true
}
}
// In a service area with no variation set: services is empty
{ "ok": true, …, "services": [], "serviceLocations": [ { …, "name": "Treasure Valley" } ],
"addressCheck": { …, "inServiceArea": true, "bookable": false,
"message": "Treasure Valley can't be booked online right now. Offer a callback." } }
// Outside every service area
{ "ok": true, …, "services": [], "serviceLocations": [],
"addressCheck": { …, "inServiceArea": false, "bookable": false, "message": "…",
"nearest": { "name": "Lowman", "driveMinutes": 72, "maxDriveMinutes": 60, … } } }
// Address doesn't verify: an error (isError: true), nothing else
{ "ok": false, "errorCode": "ADDRESS_INVALID", "stage": "config", "retryable": false,
"message": "The address could not be verified. …",
"details": { "input": "…", "status": "UNVERIFIED", "provider": "google",
"suggestedAddress": "…", "missing": ["street_number"] } }Fields
- services[].price / duration
- From the variation set for the matched location in the admin console. Pay in person: nothing is collected up front.
- addressCheck.bookable
- false (with empty services) when the address is out of area or the location has no variation set: take a callback request.
- Address verification
- Only VALID and VALID_WITH_CORRECTIONS addresses (that can be located) pass. Anything else fails with ADDRESS_INVALID.
- Matching
- Only bookable locations with a point and a max drive time are considered; the closest within its own limit wins. Drive times ignore live traffic.