Direct sale endpoint
The direct sale endpoint marks seats as sold in a single atomic call, without the lock step required by the standard sale flow. Use it for non-interactive flows such as back-office sales, comp tickets, and imports from external POS systems.
When to use which
- Booking sessions — interactive checkout driven from the browser. The page opens a session, holds and releases seats as the buyer clicks, and your server confirms after payment.
- Standard sale flow — interactive checkout where your server holds seats with
lockduring payment and sells them withsaleafter confirmation, keeping the buyer’s cart on its own side. - Direct sale — non-interactive flows where there is no customer holding the seats: back-office sales, comp tickets, manual imports. One call, no holding state.
Endpoint
POST /api/private/v2.0/booking/directsale?eventId={eventId}
| Parameter | In | Required | Description |
|---|---|---|---|
eventId |
query | yes | The event UUID containing the seats to sell. |
Request body
The request shape matches the standard sale endpoint: a list of seats and/or general-admission entries, plus an optional session id and hold type.
{
"sessionId": "abc123",
"seats": [{ "id": 42 }, { "id": 43 }],
"groupOfSeats": [{ "id": 7, "capacity": 4 }],
"holdType": "DIRECT"
}
The holdType field is optional and informational on the audit row only — direct sale does not transition through a hold state.
Response
| Status | Body | Meaning |
|---|---|---|
| 200 | true |
All seats and GA capacity transitioned to SOLD. |
| 200 | false |
At least one seat is not in ACTIVE state, or at least one GA capacity is below the requested amount. No state change. |
| 402 | Caller’s organization is disabled for booking. | |
| 403 | Caller does not have access to the event. |
The operation is atomic per request — partial application is rejected. If any seat fails, the entire request fails.
Example
curl -X POST \
"https://api.example.com/api/private/v2.0/booking/directsale?eventId=8d4f0f3a-2b8e-4d2a-9c8e-1d3a2b8e4d2a" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"sessionId": "abc123",
"seats": [{"id": 42}, {"id": 43}]
}'
# 200
# true
Constraints
- Seats must be in ACTIVE state. Seats that are LOCKED, SOLD, or BLOCKED are rejected (response is
false, no state change). - General-admission capacity is deducted from the active count directly, with no intermediate locked bucket.
- Each successful transition writes an audit entry showing the source state was ACTIVE, so analytics and downstream consumers see the transition correctly.
- The standard sale endpoint and its semantics are unchanged. Direct sale is opt-in.
Authorization
The same access check applies as for the standard sale endpoint. The caller’s organization must have access to the event, and the organization must be enabled for booking.
See also
- API Reference — interactive API explorer and full reference.