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 lock during payment and sells them with sale after 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

Type a feature, setting, endpoint or SDK method.