API Overview
The Sway Public API lets a crew (an agency, a promoter collective, a venue team) run its own website on its Sway data. Your site stays independent and talks to Sway only through the API:
- Show your roster, events, line-ups and timetables, venues, news, partners, galleries and press kits.
- Sell tickets: open a Sway checkout from your site, check a coupon or an access code first, follow the order.
- Sell merch from your pages' shops: the catalogue, a cart Sway prices, a Stripe checkout on the page's own account.
- Collect: booking requests, newsletter sign-ups, answers to your forms.
- Run your ambassador programme on your own pages: sign-up, sign-in by email link, member area, leaderboard, rewards.
- Hear about changes as they happen with webhooks, instead of asking every few minutes.
- Ask an AI assistant about your data through the MCP server.
Base URL
https://www.sway.events/api/v1
Every endpoint is versioned under /v1. Answers are JSON with snake_case keys, except the calendar feeds (text/calendar) and the exports (NDJSON). GET /v1/openapi.json describes every endpoint in OpenAPI 3.1, and GET /v1/changelog lists what changed and when.
Who gets access
The API comes with the Studio and Roster plans. Keys are created in Crew admin → API by someone with the Manage API permission on the crew.
Each key belongs to exactly one crew: the key alone decides whose data you see, never a request parameter. If the crew's subscription lapses, its keys stop working until it is active again.
What your key can see
Everything the API returns is either managed or public:
| Level | What it covers | What you get |
|---|---|---|
| Managed | The pages linked to your crew (its artists, promoters and venues) and their events | The full representation: bio, every link including contact emails, gig history |
| Public | Pages that appear in your events without being yours: a guest artist on a line-up, a venue you do not manage | Only what the public Sway page already shows, marked "managed": false |
Example: the guest artist. Your promoter's event features an artist who is not on your crew. The artist appears inside the event's line-up with public fields only (name, image, genres) and "managed": false. Fetched directly, GET /v1/artists/{id} answers 404.
Anything outside your crew's pages answers 404, never 403, so the API reveals nothing about what you cannot reach.
Quickstart
Check your key and what it can do:
curl https://www.sway.events/api/v1/me \
-H "Authorization: Bearer sway_sk_YOUR_KEY"
{
"key": {
"id": "3f9a1c02-7b45-4c8e-9d21-0a1b2c3d4e5f",
"type": "secret",
"scopes": ["read:profile", "read:artists", "read:promoters", "read:events", "read:venues", "read:content"],
"rate_limit": { "per_minute": 120, "per_day": 20000 },
"limits": {
"requests_per_minute": 2400,
"crew_work_per_minute": 600,
"crew_work_per_day": 120000,
"bytes_per_day": 5368709120
},
"websites": []
},
"crew": { "id": "a2628d53-4f21-4c1e-9b7d-1a2b3c4d5e6f", "name": "Insomnia", "slug": "insomnia" }
}
Then list your upcoming events:
curl "https://www.sway.events/api/v1/events?limit=10" \
-H "Authorization: Bearer sway_sk_YOUR_KEY"
A single resource comes back as the object itself; a list comes wrapped in { "data": [...], "pagination": {...} }.