Getting started
Orpheus is the operating system for wedding bands. This is its API. Everything the office, the stage and the couple's side see runs through the same resources: gigs at the centre, the products sold on each gig (ceremony, cocktail hour, reception), the ensembles that fulfil them, and the staff who fill each role.
The base URL is your Orpheus deployment plus /api/v1; the hosted demo is https://api.hireorpheus.com/api/v1. Every request and response is JSON.
1. Get a token
Sign in once to get a bearer, then mint an API key for anything automated.
# a sign-in link lands in your inbox
curl -X POST https://api.hireorpheus.com/api/v1/auth/link \
-H 'Content-Type: application/json' \
-d '{"email":"you@yourband.com"}'
# the link carries a token; exchange it for a 30-day bearer
curl -X POST https://api.hireorpheus.com/api/v1/auth/confirm \
-H 'Content-Type: application/json' \
-d '{"token":"…"}'
{ "token": "…", "expires_at": "2026-10-30T09:19:34.840Z", "user": { "id": "…", "email": "you@yourband.com", "name": "You", "roles": ["administrator"] } }
For scripts and integrations, trade that session for a long-lived key. The key is shown once.
curl -X POST https://api.hireorpheus.com/api/v1/api-keys \
-H 'Authorization: Bearer <session token>' \
-H 'Content-Type: application/json' \
-d '{"label":"calendar sync"}'
2. Ask who you are
curl https://api.hireorpheus.com/api/v1/me -H 'Authorization: Bearer <token>'
The answer lists your roles and which groups you can view or edit. See Authentication.
3. Pull this month's gigs
curl -G https://api.hireorpheus.com/api/v1/gigs \
-H 'Authorization: Bearer <token>' \
--data-urlencode 'filter[gig_status_id]=<status id>' \
--data-urlencode 'filter[gig_date][on_or_after]=2026-11-01' \
--data-urlencode 'filter[gig_date][before]=2026-12-01' \
--data-urlencode 'sort=gig_date' \
--data-urlencode 'fields=label,gig_date,start_time,venue_id'
{
"data": [
{ "id": "…", "label": "Chen / Blake Wedding", "gig_date": "2026-11-14", "start_time": "18:00", "venue_id": "…" }
],
"meta": { "total": 1, "limit": 50, "offset": 0 }
}
4. Book one
curl -X POST https://api.hireorpheus.com/api/v1/gigs \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"label":"Okafor / Ruiz Wedding","gig_status_id":"…","gig_type_id":"…","gig_date":"2027-03-06","start_time":"18:00","guest_count":150}'
A 201 comes back with the full record. From there: add products with POST /gigs/{id}/products, apply an ensemble to a product, invite people to the roles it created. The Gigs, products, ensembles page walks that path end to end.
Conventions
- Keys are snake_case. Ids are UUIDs.
- Single records:
{ "data": … }. Lists:{ "data": [...], "meta": { "total", "limit", "offset" } }. - Dates are
YYYY-MM-DD, timesHH:MMin the venue's local time, timestamps ISO 8601 in UTC. PATCHis partial. Unknown or read-only fields are rejected, never silently dropped.DELETEis hard, and answers409while other records still point at the row.- Every error is one shape. See Errors.