REST API • JSON • No SDK Required

BelleIndex Developer API

Search 50,000+ beauty salons, check availability, and embed bookings into your app. Simple REST API with generous free tier.

✅ Free tier included ✅ No SDK needed ✅ Rate limit headers ✅ CORS enabled

🔑 My API Key

Sign in or create a free account to get your API key.

Sign In Create Free Account

Base URL

https://belleindex.com/api/v1/

All endpoints return JSON. Pass your key as a header or query param.

Authentication

Option 1 — Header (recommended)

Authorization: Bearer sk_live_...

Option 2 — Query string

?api_key=sk_live_...

API Endpoints

GET /api/v1/salons All tiers

Search nearby salons by location and optional service category.

ParamTypeDescription
lat*floatLatitude
lng*floatLongitude
radiusfloatSearch radius in miles (default 25, max 100)
categorystringnails · hair · waxing · facial · eyelashes · massage
limitintResults per page (default 20, max 100)
offsetintPagination offset
verifiedbool1 = only verified/claimed salons
// Example
GET /api/v1/salons?lat=34.052&lng=-118.243&radius=10&category=nails&limit=5
GET /api/v1/salon All tiers

Full salon profile including services, hours, and recent reviews.

ParamTypeDescription
id*intSalon ID
GET /api/v1/salon?id=12345
GET /api/v1/availability All tiers

Available time slots for a salon on a specific date.

ParamTypeDescription
salon_id*intSalon ID
date*stringDate (YYYY-MM-DD)
durationintService duration minutes (default 60)
GET /api/v1/availability?salon_id=12345&date=2026-05-15&duration=90
GET /api/v1/categories No auth

Returns all service category slugs and display names. No API key needed.

GET /api/v1/categories

Response Format

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

Rate Limit Headers

X-RateLimit-Limit: 500
X-RateLimit-Remaining: 498
X-RateLimit-Reset: 1748044800
X-BelleIndex-Tier: free

Pricing

Free

Free
  • ✓ 500 req/day
  • ✓ 10,000 req/month
  • ✗ Read-only
  • ✗ No webhooks
Current Plan

Starter

$29/mo
  • ✓ 10,000 req/day
  • ✓ 200,000 req/month
  • ✗ Read-only
  • ✗ No webhooks
Upgrade → $29/mo
Most Popular

Growth

$99/mo
  • ✓ 100,000 req/day
  • ✓ 2,000,000 req/month
  • ✓ Booking write API
  • ✓ Webhooks
Upgrade → $99/mo

Enterprise

$499/mo
  • ✓ 9,999,999 req/day
  • ✓ 999,999,999 req/month
  • ✓ Booking write API
  • ✓ Webhooks
  • ✓ SLA + support
Contact Us

All paid plans billed monthly. Cancel anytime. Email api@belleindex.com to upgrade.

Quick Start

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']
Sponsored