Appearance
Management
Staff-facing endpoints for managing a business. All require authentication (JWT or API key with write/admin scopes).
Business Info
GET /v1/manage/business
Returns the current business's basic info.
json
{
"id": "uuid",
"name": "Demo Salon",
"slug": "demo-salon"
}GET /v1/manage/restaurant
Same as /v1/manage/business. Kept for backwards compatibility — this endpoint is deprecated and may be removed in a future version. Use /v1/manage/business instead.
Subscription
GET /v1/manage/subscription
Current plan, trial status, and resource usage.
json
{
"subscription_status": "trial",
"subscription_plan_id": "trial",
"trial_ends_at": "2026-06-07T12:00:00Z",
"trial_days_remaining": 29,
"resource_count": 2,
"deposits_enabled": false
}deposits_enabled is true when the business has completed Stripe Connect onboarding.
Staff Availability
GET /v1/manage/availability
Returns real-time slot availability for a given date and party size. Same logic as the public availability endpoint, but requires authentication.
| Param | Type | Required | Description |
|---|---|---|---|
booking_date | date | Yes | Date to check (YYYY-MM-DD) |
capacity | int | Yes | Party size (1–50) |
Response:
json
{
"slots": [
{"time": "10:00", "available": true},
{"time": "10:30", "available": true},
{"time": "11:00", "available": false}
]
}available is true when at least one resource can accommodate the requested capacity at that time. Uses the business's operating hours, slot interval, and existing bookings to calculate availability.
Resources
GET /v1/manage/resources
List all resources for the current business. Cursor-paginated.
json
{
"items": [
{
"id": "uuid",
"name": "Maria",
"resource_type": "staff",
"capacity_min": 1,
"capacity_max": 1,
"section": "Main Floor",
"display_order": 1,
"is_active": true
},
{
"id": "uuid",
"name": "Room A",
"resource_type": "room",
"capacity_min": 1,
"capacity_max": 3,
"section": null,
"display_order": 2,
"is_active": true
}
],
"next_cursor": null,
"has_more": false
}POST /v1/manage/resources
Create a resource.
json
{
"name": "New Stylist",
"capacity_min": 1,
"capacity_max": 1,
"section": "Main Floor",
"display_order": 3
}| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Resource name |
capacity_min | int | Yes | Minimum capacity |
capacity_max | int | Yes | Maximum capacity |
section | string | No | Grouping label (e.g. "Main Floor") |
display_order | int | No | Sort order. Auto-assigned to last+1 if omitted |
capacity_min must not exceed capacity_max.
PATCH /v1/manage/resources/{resource_id}
Update a resource. All fields optional — only send what changed.
json
{
"name": "Maria K.",
"capacity_max": 2,
"section": "VIP Room",
"is_active": false
}| Field | Type | Description |
|---|---|---|
name | string | New display name |
capacity_min | int | Min capacity |
capacity_max | int | Max capacity |
section | string | Section label |
display_order | int | Sort order |
is_active | bool | Soft disable (hides from availability) |
Setting is_active: false hides the resource from availability without deleting it.
DELETE /v1/manage/resources/{resource_id}
Hard-delete a resource. Returns 204 No Content.
Guard: Returns 409 Conflict if the resource has upcoming active bookings (non-cancelled, future-dated). Cancel those bookings first.
Settings
GET /v1/manage/settings
Get current booking settings for the business.
json
{
"default_slot_interval_minutes": 60,
"default_slot_duration_minutes": 90,
"booking_window_days": 90,
"min_notice_hours": 2,
"max_capacity": 10,
"min_capacity": 1,
"auto_confirm_bookings": true,
"default_deposit_amount_cents": 20
}PATCH /v1/manage/settings
Update settings. All fields are optional — only send what changed.
bash
curl -X PATCH https://api.availengine.com/v1/manage/settings \
-H "Authorization: Bearer avail_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"default_slot_interval_minutes": 30,
"default_deposit_amount_cents": 10,
"auto_confirm_bookings": false
}'| Field | Type | Range | Description |
|---|---|---|---|
default_slot_interval_minutes | int | 15–120 | Gap between available time slots |
default_slot_duration_minutes | int | 15–360 | How long a booking takes |
booking_window_days | int | 1–365 | How far into the future bookings are accepted |
min_notice_hours | int | 0–168 | Minimum notice before a booking start time |
max_capacity | int | 1–50 | Maximum party size |
min_capacity | int | 1–20 | Minimum party size |
auto_confirm_bookings | bool | — | Auto-confirm bookings from the public widget |
default_deposit_amount_cents | int | 5–500 | Deposit amount in EUR cents (e.g. 20 = €0.20) |
Operating Hours
GET /v1/manage/hours
Returns operating hours for all 7 days (0=Sunday, 6=Saturday).
PUT /v1/manage/hours
Replace all 7 days at once. Send a bare array of 7 day entries.
json
[
{"day_of_week": 0, "is_open": false},
{"day_of_week": 1, "is_open": true, "open_time": "09:00", "close_time": "17:00", "last_booking_time": "16:00"},
{"day_of_week": 2, "is_open": true, "open_time": "09:00", "close_time": "17:00", "last_booking_time": "16:00"},
{"day_of_week": 3, "is_open": true, "open_time": "09:00", "close_time": "17:00", "last_booking_time": "16:00"},
{"day_of_week": 4, "is_open": true, "open_time": "09:00", "close_time": "17:00", "last_booking_time": "16:00"},
{"day_of_week": 5, "is_open": true, "open_time": "09:00", "close_time": "17:00", "last_booking_time": "16:00"},
{"day_of_week": 6, "is_open": false}
]| Field | Type | Description |
|---|---|---|
day_of_week | int | 0=Sunday through 6=Saturday |
is_open | bool | Whether open this day |
open_time | time | When the business opens (HH:MM) |
close_time | time | When the business closes (HH:MM) |
last_booking_time | time | Latest time a booking can start (HH:MM) |
API Keys
Manage API keys for the current business. See Authentication for the full API key format, scopes, and management flow.
| Method | Path | Description |
|---|---|---|
| POST | /v1/manage/api-keys | Create a key (returns full key once) |
| GET | /v1/manage/api-keys | List keys (full key never returned) |
| DELETE | /v1/manage/api-keys/{key_id} | Revoke a key (sets is_active: false) |
Stats
GET /v1/manage/stats
Returns booking statistics, revenue, rates, capacity, and trends for the business. Perfect for management dashboards.
| Param | Type | Required | Default | Description |
|---|---|---|---|---|
from_date | date | No | 1st of month | Start of period (YYYY-MM-DD) |
to_date | date | No | Today | End of period (YYYY-MM-DD) |
bash
curl "https://api.availengine.com/v1/manage/stats?from_date=2026-06-01&to_date=2026-06-12" \
-H "Authorization: Bearer avail_live_YOUR_KEY"Response:
json
{
"period": {"from": "2026-06-01", "to": "2026-06-12"},
"bookings": {
"total": 342,
"pending": 0,
"confirmed": 50,
"checked_in": 180,
"completed": 170,
"cancelled": 12,
"no_show": 8
},
"revenue": {
"deposits_captured_cents": 16000,
"deposits_held_cents": 4000,
"deposits_released_cents": 2400
},
"rates": {
"no_show_pct": 2.3,
"cancellation_pct": 3.5,
"completion_pct": 49.7
},
"capacity": {
"avg_party_size": 2.4,
"total_covers": 820
},
"busy_hours": [
{"hour": 19, "count": 85},
{"hour": 20, "count": 78}
],
"busy_days": [
{"date": "2026-06-07", "day_name": "Saturday", "count": 48}
],
"top_resources": [
{
"resource_id": "uuid",
"resource_name": "Table 1",
"booking_count": 52,
"utilization_pct": 68.0
}
]
}Use this endpoint to build:
- "Tonight at a glance" — bookings, covers, no-shows
- Revenue dashboards — deposits captured vs held
- Performance tracking — no-show rate over time, busiest days
- Resource planning — which tables/stylists are over or under utilized
Blackout Dates
Block off dates when the business is closed. See Blackout Dates for the full reference.
| Method | Path | Description |
|---|---|---|
| GET | /v1/manage/blackout-dates | List all, cursor-paginated |
| POST | /v1/manage/blackout-dates | Create a date range |
| PATCH | /v1/manage/blackout-dates/{id} | Update date range or reason |
| DELETE | /v1/manage/blackout-dates/{id} | Remove, returns 204 |
Waitlist
GET /v1/manage/waitlist
List waitlist entries. Cursor-paginated, ordered by creation date. Optional ?preferred_date= filter returns entries for that date plus entries with no preferred date.
DELETE /v1/manage/waitlist/{entry_id}
Remove a waitlist entry. Returns 204 No Content.
Audit Logs
GET /v1/manage/audit-logs
Cursor-paginated log of all staff actions, newest first. Every state change, resource modification, and settings update is recorded.
json
{
"items": [
{
"id": "uuid",
"user_email": "owner@example.com",
"action": "booking.status_changed",
"entity_type": "booking",
"entity_id": "uuid",
"before_state": {"status": "confirmed"},
"after_state": {"status": "checked_in"},
"meta": {"code": "AV-ABC123", "guest": "Jane Doe"},
"created_at": "2026-05-15T14:05:00Z"
}
],
"next_cursor": null,
"has_more": false
}Common audit actions
| Action | When |
|---|---|
booking.created_by_staff | Staff creates a booking |
booking.created_by_staff_with_deposit | Staff creates a deposit booking |
booking.status_changed | Booking status transitions |
booking.resource_moved | Booking reassigned to different resource |
booking.capacity_changed | Party size changed |
booking.notes_saved | Staff notes saved |
booking.hold_captured | No-show hold charged |
booking.hold_released | Authorization hold released |
resource.created | New resource added |
resource.updated | Resource fields changed |
resource.toggled | Resource enabled/disabled |
resource.deleted | Resource hard-deleted |
settings.updated | Booking settings changed |
settings.hours_updated | Operating hours changed |
settings.blackout_added | Blackout date range created |
settings.blackout_removed | Blackout date range deleted |