Search 50,000+ beauty salons, check availability, and embed bookings into your app. Simple REST API with generous free tier.
https://belleindex.com/api/v1/
All endpoints return JSON. Pass your key as a header or query param.
Option 1 — Header (recommended)
Authorization: Bearer sk_live_...
Option 2 — Query string
?api_key=sk_live_...
/api/v1/salons
All tiers
Search nearby salons by location and optional service category.
| Param | Type | Description |
|---|---|---|
| lat* | float | Latitude |
| lng* | float | Longitude |
| radius | float | Search radius in miles (default 25, max 100) |
| category | string | nails · hair · waxing · facial · eyelashes · massage |
| limit | int | Results per page (default 20, max 100) |
| offset | int | Pagination offset |
| verified | bool | 1 = only verified/claimed salons |
/api/v1/salon
All tiers
Full salon profile including services, hours, and recent reviews.
| Param | Type | Description |
|---|---|---|
| id* | int | Salon ID |
/api/v1/availability
All tiers
Available time slots for a salon on a specific date.
| Param | Type | Description |
|---|---|---|
| salon_id* | int | Salon ID |
| date* | string | Date (YYYY-MM-DD) |
| duration | int | Service duration minutes (default 60) |
/api/v1/categories
No auth
Returns all service category slugs and display names. No API key needed.
All responses are JSON. Successful responses include success: true. Errors include an error code and message.
✅ Success
{
"success": true,
"meta": { "total": 42, ... },
"salons": [ ... ]
}
❌ Error
{
"success": false,
"error": "rate_limit_exceeded",
"message": "Daily limit of 500..."
}
X-RateLimit-Limit: 500 X-RateLimit-Remaining: 498 X-RateLimit-Reset: 1748044800 X-BelleIndex-Tier: free
All paid plans billed monthly. Cancel anytime. Email api@belleindex.com to upgrade.
JS JavaScript (fetch)
const res = await fetch(
'https://belleindex.com/api/v1/salons' +
'?lat=34.052&lng=-118.243&radius=10',
{ headers: {
'Authorization': 'Bearer sk_live_...'
}}
);
const { salons } = await res.json();
PHP PHP (curl)
$ch = curl_init( 'https://belleindex.com/api/v1/salons' .'?lat=34.052&lng=-118.243' ); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Authorization: Bearer sk_live_...' ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = json_decode(curl_exec($ch), true);
PY Python (requests)
import requests
r = requests.get(
'https://belleindex.com/api/v1/salons',
params={'lat':34.052,'lng':-118.243},
headers={
'Authorization':'Bearer sk_live_...'
}
)
salons = r.json()['salons']