TicketOpus

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.

Base URL 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/{company} summary:read Company metadata, branding, capabilities, locations, and categories.
GET /companies/{company}/users users:read Active admin users visible to integrations.
GET /companies/{company}/items availability:read Bookable items with rates, variants, program rules, and custom fields.
GET /companies/{company}/items/{item} availability:read Single item by id or URL name.
GET /companies/{company}/items/{item}/custom-fields availability:read Checkout question schema and priced options for one item.
GET /companies/{company}/availabilities 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/{company}/availabilities/{availabilityId} availability:read Availability detail with rates, crew, fields, and pickup options.
POST /companies/{company}/availabilities/{availabilityId}/bookings/validate bookings:write Dry-run a booking without writing records.
POST /companies/{company}/availabilities/{availabilityId}/bookings bookings:write Create an externally sourced booking with idempotency support.
GET /companies/{company}/bookings 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/{company}/bookings/{bookingId} bookings:read Booking detail, participants, payments, answers, notes, and attribution.
DELETE /companies/{company}/bookings/{bookingId} bookings:write Cancel a booking after policy evaluation.
GET /companies/{company}/bookings/{bookingId}/cancellation-preview bookings:write Preview refund and cancellation rule outcome.
GET /companies/{company}/bookings/{bookingId}/reschedule-preview?targetAvailabilityId={targetAvailabilityId} bookings:write Preview target capacity, fulfillment, price change, refund, or hosted balance.
POST /companies/{company}/bookings/{bookingId}/reschedule bookings:write Apply a reviewed reschedule with its preview token and an idempotency key.
POST /companies/{company}/bookings/{bookingId}/notes bookings:write Add an auditable partner note.
PUT /companies/{company}/checkin checkin:write Check in a participant or booking by barcode, ticket, voucher, or external id.
GET /companies/{company}/checkin-statuses checkin:read Company-specific check-in status choices.
GET /companies/{company}/roles crew:read Crew role directory for staff scheduling integrations.
GET /companies/{company}/lodgings pickup:read Lodging and hotel pickup directory.
GET /companies/{company}/availabilities/{availabilityId}/lodgings pickup:read Pickup options allowed for a specific availability.
GET /companies/{company}/distribution-feed distribution:read Reseller feed with channel listings and allocated capacity.

Workflow

Recommended booking flow

1Fetch item schema

Read item rates, variants, and custom fields.

2Search availability

Choose a bookable availability and pickup option.

3Validate

Dry-run quantity, custom answers, voucher, and lodging.

4Create

Post with an idempotency key, customer data, and participants. Declare externally settled funds only with settlement authority and evidence.

5Operate

Use booking detail, notes, check-in, and unified cancellation or reviewed rescheduling after confirmation.

Errors

HTTP status codes

400Validation failed, capacity changed, or booking operation was rejected.
401API key is missing or invalid.
403The key is valid but missing the required scope.
404Company, item, availability, booking, or barcode was not found.
409The preview is stale, another change is active, or the idempotency key belongs to different intent.
429Rate limit exceeded. Retry after the returned 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.