API REFERENCE

Build on Tresse

The Tresse REST API gives you programmatic access to appointments, clients, services, staff, and availability. Authenticate with an API key, send JSON, get JSON back.

Get started

The Tresse API has two tiers, each requiring its own key. There is no anonymous access.

Public API

Search businesses, view services and staff, and check availability. Requires a developer key (dk_live_), sent as an X-API-Key header.

Business API

Manage appointments, clients, services, staff, bookings, and webhooks. Requires a business API key (sk_live_), sent as an Authorization: Bearer header.

Get your developer key →

Authentication

Public endpoints require a developer key passed in the X-API-Key header:

curl https://api.tresse.io/v1/businesses/search?q=downtown \
  -H "X-API-Key: dk_live_abc123..."

Business endpoints require a business API key in the Authorization header:

curl https://api.tresse.io/v1/appointments \
  -H "Authorization: Bearer sk_live_abc123..."

Test keys use the prefixes dk_test_ and sk_test_ and operate against a sandbox environment. Live keys use dk_live_ and sk_live_.

Base URL

All endpoints are relative to:

https://api.tresse.io/v1

Public endpoints

Authenticated with a developer key (dk_live_).

Search

GET
/v1/businesses/search
Search businesses by name, location, or service type
GET
/v1/businesses/:slug
Get a business profile with services, staff, and hours

Availability

GET
/v1/availability
Query open time slots for a service, staff member, and date range

Business endpoints

Authenticated with a business API key (sk_live_). Keys are scoped to a single business and can be created from your dashboard under Settings.

Appointments

GET
/v1/appointments
List appointments with optional date range, staff, and status filters
POST
/v1/appointments
Create a new appointment with client, service, and time slot
GET
/v1/appointments/:id
Retrieve a single appointment by ID
PATCH
/v1/appointments/:id
Update appointment details, reschedule, or change status
DELETE
/v1/appointments/:id
Cancel an appointment

Clients

GET
/v1/clients
List clients with search, pagination, and sort options
POST
/v1/clients
Create a new client profile
GET
/v1/clients/:id
Retrieve a client profile with visit history
PATCH
/v1/clients/:id
Update client contact info or notes

Services

GET
/v1/services
List all services with pricing and duration
POST
/v1/services
Create a new service
GET
/v1/services/:id
Retrieve a single service
PATCH
/v1/services/:id
Update service name, price, or duration

Staff

GET
/v1/staff
List staff members with roles and schedules
POST
/v1/staff
Add a new staff member
GET
/v1/staff/:id
Retrieve a staff member profile
PATCH
/v1/staff/:id
Update staff details or schedule

Bookings

GET
/v1/bookings
List online bookings with status and source filters
GET
/v1/bookings/:id
Retrieve a single booking
PATCH
/v1/bookings/:id
Confirm, reschedule, or decline a booking

Webhooks

GET
/v1/webhooks
List registered webhook endpoints
POST
/v1/webhooks
Register a new webhook for appointment, client, or payment events
DELETE
/v1/webhooks/:id
Remove a webhook endpoint

Example: Create an appointment

Book an appointment by specifying the client, service, staff member, and time slot. All times are in ISO 8601 format with timezone.

Request

POST /v1/appointments
Content-Type: application/json
Authorization: Bearer sk_live_abc123...

{
  "client_id": "cli_8x7kq2m",
  "service_id": "svc_hair_color",
  "staff_id": "stf_maria",
  "starts_at": "2026-04-22T14:00:00-04:00",
  "notes": "Prefers ammonia-free color"
}

Response

{
  "id": "apt_q9w3r1z",
  "status": "confirmed",
  "client_id": "cli_8x7kq2m",
  "service_id": "svc_hair_color",
  "staff_id": "stf_maria",
  "starts_at": "2026-04-22T14:00:00-04:00",
  "ends_at": "2026-04-22T15:30:00-04:00",
  "duration_minutes": 90,
  "price_cents": 18500,
  "notes": "Prefers ammonia-free color",
  "created_at": "2026-04-19T10:32:00Z"
}

Example: Check availability

Query available time slots for a given service and date range. Optionally filter by staff member.

Request

GET /v1/availability?service_id=svc_hair_color&staff_id=stf_maria&date=2026-04-22
X-API-Key: dk_live_abc123...

Response

{
  "date": "2026-04-22",
  "service_id": "svc_hair_color",
  "staff_id": "stf_maria",
  "duration_minutes": 90,
  "slots": [
    { "starts_at": "2026-04-22T09:00:00-04:00" },
    { "starts_at": "2026-04-22T10:30:00-04:00" },
    { "starts_at": "2026-04-22T14:00:00-04:00" },
    { "starts_at": "2026-04-22T15:30:00-04:00" }
  ]
}

Pagination

List endpoints return paginated results. Use the cursor parameter to fetch the next page. Each response includes a has_more field and a next_cursor when more results are available.

GET /v1/clients?limit=25&cursor=cur_abc123
Authorization: Bearer sk_live_abc123...

{
  "data": [ ... ],
  "has_more": true,
  "next_cursor": "cur_def456"
}

Integrations

Pre-built integrations so you can skip the API and get started faster.

Rate limits

Rate limits vary by key type. Every response includes rate limit headers:

Developer key (dk_live_)60 requests/min
Business API key (sk_live_)120 requests/min
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 47
X-RateLimit-Reset: 1745064120

If you exceed the limit, requests return 429 Too Many Requests with a Retry-After header in seconds.

Errors

The API uses standard HTTP status codes. Error responses include a JSON body with a code and human-readable message.

{
  "error": {
    "code": "invalid_time_slot",
    "message": "The requested time slot is no longer available.",
    "status": 409
  }
}
200Success
201Created
400Bad request (validation error)
401Unauthorized (missing or invalid API key)
404Resource not found
409Conflict (e.g., time slot taken)
429Rate limit exceeded
500Internal server error

Webhooks

Register webhook endpoints to receive real-time notifications when events occur in your business. Tresse signs every webhook payload with a shared secret so you can verify authenticity.

Available event types:

appointment.created
appointment.updated
appointment.cancelled
client.created
client.updated
payment.completed
payment.refunded

Get started with the Tresse API

Create a free account and generate your API keys from the dashboard.

Get your developer key →