Blocking is organizer-controlled inventory: production holds, comps, sightline closures, press allocations, or seats not ready for sale. It is not a buyer hold and does not consume a booked-seat credit.
Block seats
/v1/events/:key/blockSecret key, dashboard session, or event:block manage tokencurl -sX POST "https://api.seatlayer.io/v1/events/<YOUR_EVENT_KEY>/block" \
-H "authorization: Bearer $SEATLAYER_SECRET_KEY" \
-H "content-type: application/json" \
-d '{"labels":["A-1","A-2"]}'Success returns:
{
"ok": true,
"blocked": ["A-1", "A-2"]
}Blocking is atomic across the requested labels. Every label must exist and be
free. If one is held, booked, blocked, or missing, nothing changes:
{
"error": "conflict",
"conflicts": [
{
"label": "A-2",
"status": "held"
}
]
}Schedule automatic release
Add a future epoch-ms releaseAt:
{
"labels": ["P-1", "P-2"],
"releaseAt": 1767200400000
}A past or invalid time does not schedule a release; the block remains until an explicit unblock. Store your intended release time in your own operation record because the basic block response returns only the blocked labels.
Say why
Add an optional reason (up to 280 characters). It is kept with the block in
the event’s history, next to who blocked the seats:
{
"labels": ["P-1", "P-2"],
"reason": "Camera platform"
}Unblock selected seats
/v1/events/:key/unblockSecret key, dashboard session, or event:block manage tokencurl -sX POST "https://api.seatlayer.io/v1/events/<YOUR_EVENT_KEY>/unblock" \
-H "authorization: Bearer $SEATLAYER_SECRET_KEY" \
-H "content-type: application/json" \
-d '{"labels":["A-1","A-2"]}'Non-blocked labels are ignored. The response contains the labels actually returned to sale.
Unblock all
/v1/events/:key/unblock-allSecret key, dashboard session, or event:block manage tokenPuts every manually blocked seat back on sale, except seats kept aside in a named reservation from the Control room; those stay reserved until their reservation is released. No body is required. A successful response is:
{
"ok": true,
"freed": 12
}Buyer and operator behavior
Blocked inventory is exposed to buyer surfaces as not_for_sale; buyers do not
see your internal reason. Live SDK and control-room views repaint after the
mutation without polling.
| State change | Use |
|---|---|
free → blocked |
block |
blocked → free |
unblock or unblock-all |
booked → free |
booking-safe cancellation |
free → booked from a trusted Platform backend |
direct inventory booking |
Checklist
- Secret keys are used only from a trusted server.
- Browser operator tokens carry only
event:blockwhen that is sufficient. - Batch conflicts are shown as a retry/reselect action.
- Scheduled-release times are future UTC epoch milliseconds.
- Blocking is not treated as a payment reservation.
- The host keeps its own reason and operator audit context.
For sections and zones, use inventory and availability.