Developers
TicketOpus External API
Use the External API to sync catalog, availability, bookings, check-in, pickup logistics, and distribution inventory with reseller, marketplace, mobile, and operations systems.
https://www.ticketopus.com/api/external/v1
Authentication
API keys are company scoped.
Each company creates API clients in Admin, then grants scopes for the integration. Send the key in X-TicketOpus-Api-Key or as a bearer token.
curl -H "X-TicketOpus-Api-Key: top_xxx" \
https://www.ticketopus.com/api/external/v1/companies/your-company/items
Scopes
Grant the narrowest access the client needs.
summary:readCompany profile, locations, categories, and booking volume.users:readActive admin users visible to integrations.reports:readRevenue totals in the partner summary.availability:readItems, custom fields, rates, availability, crew, and pickup options.availability:privateInclude private and non-public items with includePrivate=true.bookings:readBooking list and detailed reservation records for bookings this key created.bookings:writeDry-run validation, booking creation, and unified cancellation/rescheduling and notes on bookings this key created.bookings:allExtends bookings:read and bookings:write to every booking of the company, including other channels' (for the company's own systems).payments:settleDeclare externally settled funds with provider evidence. This scope does not process a payment.checkin:readConfigured check-in statuses.checkin:writeBarcode-based booking or participant check-in.crew:readStructured crew role directory.pickup:readLodgings and availability-specific pickup choices.distribution:readChannel listing feed with allocated capacity.Reference
External API endpoints
| Method | Path | Scope | Purpose |
|---|---|---|---|
| GET | /companies |
summary:read |
Company metadata, branding, capabilities, locations, and categories. |
| GET | /companies |
users:read |
Active admin users visible to integrations. |
| GET | /companies |
availability:read |
Bookable items with rates, variants, program rules, and custom fields. |
| GET | /companies |
availability:read |
Single item by id or URL name. |
| GET | /companies |
availability:read |
Checkout question schema and priced options for one item. |
| GET | /companies |
availability:read |
Date-range availability with status, seats left after holds, and the checkout price, in start-time order. Pass limit, then the returned nextCursor as cursor for the next page. |
| GET | /companies |
availability:read |
Availability detail with rates, crew, fields, and pickup options. |
| POST | /companies |
bookings:write |
Dry-run a booking without writing records. |
| POST | /companies |
bookings:write |
Create an externally sourced booking with idempotency support. |
| GET | /companies |
bookings:read |
Bookings created in a date range (the last 30 days by default), newest first, filterable by status. Pass limit, then the returned nextCursor as cursor for the next page. |
| GET | /companies |
bookings:read |
Booking detail, participants, payments, answers, notes, and attribution. |
| DELETE | /companies |
bookings:write |
Cancel a booking after policy evaluation. |
| GET | /companies |
bookings:write |
Preview refund and cancellation rule outcome. |
| GET | /companies |
bookings:write |
Preview target capacity, fulfillment, price change, refund, or hosted balance. |
| POST | /companies |
bookings:write |
Apply a reviewed reschedule with its preview token and an idempotency key. |
| POST | /companies |
bookings:write |
Add an auditable partner note. |
| PUT | /companies |
checkin:write |
Check in a participant or booking by barcode, ticket, voucher, or external id. |
| GET | /companies |
checkin:read |
Company-specific check-in status choices. |
| GET | /companies |
crew:read |
Crew role directory for staff scheduling integrations. |
| GET | /companies |
pickup:read |
Lodging and hotel pickup directory. |
| GET | /companies |
pickup:read |
Pickup options allowed for a specific availability. |
| GET | /companies |
distribution:read |
Reseller feed with channel listings and allocated capacity. |
Workflow
Recommended booking flow
Read item rates, variants, and custom fields.
Choose a bookable availability and pickup option.
Dry-run quantity, custom answers, voucher, and lodging.
Post with an idempotency key, customer data, and participants. Declare externally settled funds only with settlement authority and evidence.
Use booking detail, notes, check-in, and unified cancellation or reviewed rescheduling after confirmation.
Errors
HTTP status codes
Retry-After value.Example
Create an external booking
In these samples, replace your-company with your company's URL name and the uppercase placeholders, such as AVAILABILITY_ID, with real IDs from the API.
This example records funds already settled by a trusted external partner. The API client needs bookings:write and payments:settle; the settlement provider and reference are required when amountPaid is greater than zero.
curl -X POST \
-H "Content-Type: application/json" \
-H "X-TicketOpus-Api-Key: top_xxx" \
https://www.ticketopus.com/api/external/v1/companies/your-company/availabilities/AVAILABILITY_ID/bookings \
-d '{
"customerName": "Avery Morgan",
"customerEmail": "[email protected]",
"requestedQuantity": 2,
"idempotencyKey": "reseller-order-8437",
"voucherNumber": "FH-12345",
"externalId": "reseller-booking-8437",
"amountPaid": 90.00,
"settlementProvider": "reseller-ledger",
"settlementReference": "settlement-8437",
"customFieldAnswers": [
{ "customFieldId": "CUSTOM_FIELD_ID", "value": "yes" }
],
"participants": [
{ "name": "Avery Morgan", "customerTypeName": "Adult" },
{ "name": "Riley Morgan", "customerTypeName": "Adult" }
]
}'
Bookings are priced as the company's own booking page prices them: session prices, price rules, mandatory fees, priced options and tax. Add "promoCode" to apply one of the company's promo codes; the same dates and redemption limit apply. Add "packageId" to choose one of the activity's packages. The validate call takes both fields and returns estimatedDiscount with the other estimates. Camps and class series sold as enrollments in a series of sessions are booked on the company's site, not through the API.
Review and apply a reschedule
First request a preview for the target time. Submit its previewToken as expectedPreviewToken; if booking, inventory, fulfillment, pricing, or payment state changes, the commit returns 409 and requires a fresh preview.
curl -X POST \
-H "Content-Type: application/json" \
-H "X-TicketOpus-Api-Key: top_xxx" \
-H "Idempotency-Key: reseller-reschedule-8437" \
https://www.ticketopus.com/api/external/v1/companies/your-company/bookings/BOOKING_ID/reschedule \
-d '{
"targetAvailabilityId": "TARGET_AVAILABILITY_ID",
"expectedPreviewToken": "reviewed-preview-token",
"actorName": "Reseller support",
"reason": "Guest requested a later session"
}'
Other interfaces
SCIM directory sync and the public activity feed
Your identity provider can keep the company's staff directory in step through SCIM 2.0 at https://www.ticketopus.com/api/your-company/scim/v2. Use an API client key granted the scim scope. Deprovisioning a user ends that person's team access to the company, except an Owner's. SCIM does not create sign-in accounts or restore access, groups are read-only, and filters support eq only.
Each company also publishes its bookable activities without a key, as Schema.org data at /api/v1/companies/your-company/discovery/schema-org or the same feed at /api/v1/companies/your-company/feed/activities.json. Only active activities that are publicly bookable online are listed.