venuery for ticketing platforms
Seating for your ticketing platform
Your venues design their own seating charts, buyers pick seats on a map you embed, and the inventory API makes sure no seat is sold twice. You keep your checkout, your customers and your fees.
How it fits together
- A venue draws its chart in the venuery designer, or you import one from seats.io. Publishing makes an unchangeable version.
- You create events on a chart. Each event gets its own inventory: every seat, table and general admission place.
- Buyers pick seats on the embedded seat map, which holds them as they pick.
- Your server books the hold when they pay, under your order reference.
- Webhooks keep you in sync: expired holds, releases, refunds and chart changes (webhooks).
Keys
Create keys in the dashboard under Settings → API keys. There are two kinds, each in live and test mode:
sk_live_… sk_test_… | Secret keys, for your server. Every endpoint. Never put one in a browser or an app. |
pk_live_… pk_test_… | Publishable keys, for the seat map in browsers. They can read availability and hold seats, nothing else. |
Test keys work on your organization's test data: their own venues, charts and events, never billed. A key can be limited to some venues. Send it as a bearer token, or as the username in HTTP Basic auth:
curl https://www.venuery.com/v1/me \
-H "Authorization: Bearer sk_test_…"
curl https://www.venuery.com/v1/me -u sk_test_…:Sell your first seat
With a test key, from an empty account to a booked seat:
curl https://www.venuery.com/v1/venues -u sk_test_…: \
-d '{"name":"Brooks Field","timezone":"America/New_York"}'
# from a seats.io drawing (or leave out "document" and draw it in the designer)
curl https://www.venuery.com/v1/charts -u sk_test_…: \
-d '{"venue":"ven_…","name":"Baseball","document":'"$(cat drawing.json)"'}'
curl -X POST https://www.venuery.com/v1/charts/cht_…/publish -u sk_test_…:curl https://www.venuery.com/v1/events -u sk_test_…: \
-d '{"chart":"cht_…","key":"2027-05-28","name":"Opening Night","starts_at":"2027-05-28T19:05:00-04:00"}'curl https://www.venuery.com/v1/holds -u sk_test_…: \
-d '{"event":"2027-05-28","objects":["204-C-12","204-C-13"]}'
curl https://www.venuery.com/v1/events/2027-05-28/book -u sk_test_…: \
-d '{"hold":"hld_…","order_ref":"ORD-1042"}'In production the seat map makes the hold (step 3) as the buyer picks; your server only books it. See the API reference for everything else.
Conventions
Ids, keys and labels
Every object has an id with a prefix (ven_, cht_, evt_, hld_). Give events your own key and use it wherever an event id goes. Seats and tables have ids that stay the same across chart versions, and labels people read (204-C-12); requests take either. Store ids: a venue can relabel a row, but the id stays.
Errors
Errors share one shape, and every response carries a request-id header. Quote it if you write to us.
{
"error": {
"type": "conflict",
"message": "2 of those seats aren't available.",
"request_id": "req_Xk2…",
"conflicts": ["s_4k9q2m8f1x7c", "s_8f1x7c4k9q2m"]
}
}| Status | Type | Meaning |
|---|---|---|
| 400 | invalid_request | Something in the request is wrong; param says which field. |
| 401 | authentication_failed | No key, or a key that isn't valid (or was revoked). |
| 403 | permission_denied | The key can't do that: a publishable key on a server endpoint, or a venue it's limited from. |
| 404 | not_found | No such object in this key's workspace. |
| 409 | conflict | Seats aren't available (conflicts lists them), or the draft changed since your revision. |
| 422 | invalid_request | Well formed but can't be done, like publishing a chart with errors (errors lists them). |
| 500 | server_error | Our fault. Retry with the same idempotency key. |
Retries
Send an Idempotency-Key header (any unique string, up to 255 characters) with POSTs. Retrying with the same key in the next 24 hours replays the first response instead of doing it twice. Reusing a key for a different request is refused (422).
Lists
Lists return { "object": "list", "data": [...], "has_more", "next_cursor" }. Pass limit (1–100, default 25) and the previous page's next_cursor as cursor.
Limits
- Holds last 15 minutes unless you say otherwise, and at most two hours from when they were made.
- 500 objects per request; 100 changes per batch; 100 events per bulk create.
Pricing
You pay for booked seats: a seat, table or booth booked through the API counts once per event, however often it's released and booked again, and once per season for seats booked for a season. General admission counts per place. Holds, selections and test mode are free, and seats sold through venuery Ticketing are never counted.
| Plan | Price | Booked seats |
|---|---|---|
| Developer | Free | 250 a month. Past that we email you; bookings never stop. |
| Launch | $49 a month | 750 included, then $0.08 each. No “Seat map by venuery” credit. |
| Growth | $299 a month | 4,000 included, then $0.07 each. |
| Enterprise | Annual | From $0.06 down to $0.03 a seat, with an SLA. |
Choose a plan under Settings → Seating API plan. GET /v1/usage shows the month so far.