API Overview
Sway Public API
The Sway Public API lets a crew (an artist agency or promoter collective) pull its Sway data into external websites — roster, events, venues, ticket tiers — and receive booking requests submitted from those sites. It is designed for partner websites: your agency site stays fully independent and talks to Sway only through the API.
The API is read-only except for one endpoint, POST /v1/booking-requests.
Base URL
https://www.sway.events/api/v1
All endpoints are versioned under /v1. Responses are JSON with snake_case keys.
Who gets access
API access is included in the Studio and Roster plans.
API keys are created from the crew admin: Crew admin → API. Each key belongs to exactly one crew — the key alone determines whose data you see, never a request parameter. If the crew's subscription lapses, its keys stop working until the subscription is active again.
The two visibility levels
Every resource you can reach through the API is either managed or public:
| Level | What it covers | What you get |
|---|---|---|
| Managed | Pages linked to your crew (your artists, your promoters) and their events | Full representation — bio, all external links including contact emails, gig history |
| Public (foreign) | Resources embedded in your events but not managed by your crew — lineup guests, venues | Reduced public representation: only what the Sway public page already shows. Marked "managed": false |
Example — the lineup guest. Your promoter's event features a guest artist who is not part of your crew. That artist appears inline in the event's lineup with public fields only (name, image, genres) and "managed": false. You cannot fetch them directly: GET /v1/artists/{id} for a foreign artist returns 404.
Anything outside your crew's graph also returns 404 — never 403 — so the API reveals nothing about resources you cannot access.
Quickstart
Verify your key and see what it can do with the introspection endpoint:
curl https://www.sway.events/api/v1/me \
-H "Authorization: Bearer sway_sk_YOUR_KEY"
{
"key": {
"id": "3f9a1c02-7b45-4c8e-9d21-0a1b2c3d4e5f",
"scopes": ["read:profile", "read:artists", "read:promoters", "read:events", "read:venues"],
"rate_limit": { "per_minute": 120, "per_day": 20000 }
},
"crew": { "id": "a2628d53-4f21-4c1e-9b7d-1a2b3c4d5e6f", "name": "Insomnia", "slug": "insomnia" }
}
The response is the object itself — single-resource endpoints are not wrapped in a data envelope (only list endpoints are).

