Skip to content
Developers

Tickets

Read and adjust the tickets an account sells, and list the tickets the key owner has bought.

Use the ticket endpoints to keep ticket prices and availability in sync with another system, to pause sales from a script, or to show a member the tickets they hold. The API manages the configuration of tickets that already exist on your events, courses, quests and bookings. Creating tickets, checkout, payment capture and refunds stay in the Hive3 app.

JavaScript and Python follow the same request pattern as the tabbed examples; the cards that show only curl are trivial to translate.

#Scopes, plan and targeting

ScopeAllows
tickets:readRead the tickets an account sells, and the tickets the key owner bought.
tickets:writeChange a ticket's name, description, price, currency and status.

No other scope implies these; keys created before they existed need to be replaced (scopes). API access needs Honey Bee or above (overview).

Ticket routes act on the key owner's own account unless you add ?account=<account ID or @handle> to the list route. The API calls an account that others join a community, so for another account the key also needs communities:read (reads) or communities:write (writes), must include that account when the key is limited to selected accounts, and the key owner must currently be an owner or admin of it. Moderators cannot manage tickets, because tickets are payment settings. Routes that take a ticket ID use the account that sells the ticket and ignore ?account=. See managed accounts.

PATCH /api/v1/tickets/{ticketId} is limited to 60 requests per minute, on top of the account-wide budget (rate limits).

#The ticket object

FieldTypeNotes
idstringTicket ID.
name, descriptionstringShown to buyers.
amountstringDecimal price with two decimals, for example "25.00".
currencystringThree-letter ISO 4217 code, upper case.
statusstringactive (on sale) or inactive.
entityType, entityIdstringWhat the ticket grants access to: event, course, quest or coordination (a booking), and its ID.
productId, productTitlestring, string or nullThe paid product behind the ticket; productTitle is null if the product was removed.
createdAt, updatedAtstringISO 8601 timestamps (timestamps).

#Read tickets you sell

GET/api/v1/ticketsScopetickets:read

Lists the tickets configured on the account's events, courses, quests and bookings, newest first.

NameInTypeRequiredNotes
accountquerystringNoAccount ID or @handle. Defaults to the key owner.
limitqueryintegerNo1 to 100, default 25.
cursorquerystringNoOpaque; page.nextCursor from the previous page (pagination).
bash
curl "https://app.hive3.tech/api/v1/tickets?account=@design-guild&limit=25" \
  -H "Authorization: Bearer $HIVE_API_KEY"

Returns 200.

json
{
  "data": [{
    "id": "ticket_123", "name": "Entry ticket", "description": "General admission", "amount": "25.00", "currency": "USD", "status": "active",
    "entityType": "event", "entityId": "event_123", "productId": "product_123", "productTitle": "Event tickets",
    "createdAt": "2026-10-27T18:00:00.000Z", "updatedAt": "2026-10-27T18:00:00.000Z"
  }],
  "page": { "nextCursor": null, "hasMore": false }
}

Errors: 403 insufficient_scope (missing tickets:read, or communities:read for another account), 403 forbidden (not in the key's allowlist, or you are not an owner or admin), 404 not_found (account not found).

GET/api/v1/tickets/{ticketId}Scopetickets:read

Returns one ticket in the shape above. You need to be an owner or admin of the account that sells it.

bash
curl https://app.hive3.tech/api/v1/tickets/ticket_123 \
  -H "Authorization: Bearer $HIVE_API_KEY"

Returns 200. Errors: 404 not_found (Ticket not found), 403 forbidden, 403 insufficient_scope.

#Change a ticket

PATCH/api/v1/tickets/{ticketId}Scopetickets:write

Updates any of the fields below; send only the ones you change. Turning an inactive ticket back to active starts selling again, so it also needs the selling account to be on Honey Bee or above; pausing a ticket (inactive) has no plan requirement.

NameInTypeRequiredNotes
namebodystringNo1 to 120 characters after trimming.
descriptionbodystringNoUp to 2,000 characters.
amountbodystringNoPositive decimal string with up to 7 digits before the point and at most 2 after, up to 1000000. "25" is stored as "25.00". A JSON number is rejected.
currencybodystringNoThree letters (usd is stored as USD).
statusbodystringNoactive or inactive.
bash
curl -X PATCH https://app.hive3.tech/api/v1/tickets/ticket_123 \
  -H "Authorization: Bearer $HIVE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"amount":"30","status":"inactive"}'

Returns 200 with the updated ticket.

json
{
  "data": {
    "id": "ticket_123", "name": "Entry ticket", "description": "General admission", "amount": "30.00", "currency": "USD", "status": "inactive",
    "entityType": "event", "entityId": "event_123", "productId": "product_123", "productTitle": "Event tickets",
    "createdAt": "2026-10-27T18:00:00.000Z", "updatedAt": "2026-10-27T18:20:00.000Z"
  }
}
StatuscodeWhen
400invalid_requestA field has the wrong type, status is not active or inactive, or a value breaks its limit. The message names the field, for example amount must be a positive decimal string up to 1000000 with at most 2 decimals or currency must be a 3-letter ISO 4217 code.
403forbiddenYou are not an owner or admin of the selling account, the account is not in the key's allowlist, or you reactivate a ticket while the account is below Honey Bee (A Honey Bee subscription is required to sell subscriptions, tickets or paid access).
403insufficient_scopeThe key lacks tickets:write (or communities:write for another account).
404not_foundTicket not found.
429rate_limitedMore than 60 updates in a minute.

#Read tickets you bought

GET/api/v1/tickets/mineScopetickets:read

Lists the tickets the key owner has bought, newest first: the same list as My tickets in the app. It always shows the key owner's own purchases and ignores ?account=. mine is reserved and never a ticket ID.

status is the state of the purchase: active, refunded or cancelled. refundRequestStatus is the status of the latest refund request, pending, approved or rejected, or null when none exists. id is the purchase, and ticketId is the ticket that was bought.

NameInTypeRequiredNotes
limitqueryintegerNo1 to 100, default 25.
cursorquerystringNoOpaque; from the previous page.
bash
curl "https://app.hive3.tech/api/v1/tickets/mine?limit=10" \
  -H "Authorization: Bearer $HIVE_API_KEY"

Returns 200.

json
{
  "data": [{
    "id": "purchase_123", "ticketId": "ticket_123", "name": "Entry ticket", "description": "General admission", "amount": "25.00", "currency": "USD",
    "entityType": "event", "entityId": "event_123", "status": "active", "refundRequestStatus": null, "purchasedAt": "2026-10-20T14:00:00.000Z"
  }],
  "page": { "nextCursor": null, "hasMore": false }
}