Issue a key, decide which system owns availability, and push inventory instead of maintaining it twice.
Short answer
Go to API keys and use Issue an API key. The secret is shown once and never again, so store it before leaving the page. The supplier API can do everything the panel can, because they run through the same code, so you can create products, push availability and rates, and read bookings from your own system.
Decide whether you need this at all
If you do not already run a booking system, you do not. The panel is not a worse version of an API integration.
Decide which system owns availability
One of them must. Two systems each believing they own the seat count is how a seat gets sold twice.
Issue a key
API keys, then Issue an API key. Choose sandbox while you build. Copy the secret immediately; it is shown once.
Push a product and read it back
Create one product through the API and check it in the panel. If it looks right there, it is right everywhere.
Subscribe to booking webhooks
So a sale reaches your system in seconds rather than whenever you next poll.
This page is for operators who already run a reservation system. If that is not you, close it. Nothing here will make the panel work better.
Which system owns availability?
Not which one displays it. Which one is authoritative, so that when the two disagree, one of them is simply wrong and gets corrected.
There are only two workable answers and one catastrophic one.
Pushing is not the same as owning
You can push rates and descriptions from your system while letting us own the seat count, or the other way round. What you cannot do is have both systems decrementing the same capacity independently.
API keys, then Issue an API key. Give it a name describing what will use it, so that in a year you can revoke the right one.
The secret is displayed once, under a heading that says Copy this now, and that is not a formality. We store a hash and cannot recover it. If you lose it, revoke the key and issue another.
Choose the sandbox environment while you are building. Sandbox keys carry a vt_test prefix and behave identically, except that anything they create is flagged as a test and kept out of settlement. Swap in a vt_live key when you are ready, and nothing else about your integration changes.
Every product a key creates is added to your own products, exactly as if you had built it in the panel: it appears under Products, goes through the same review, and is sold from there on the marketplace and to trade buyers.
A key cannot export products, yours or anyone else's. The OCTO and Distribution v2 catalogues are for trade buyers and refuse an operator's key. On OCTO it can still read the bookings of your own inventory, cancel one you cannot run and redeem vouchers at the gate.
Everything the panel can, and this is literally true rather than aspirational: the panel calls the same service layer the API does. There is no capability that exists only in the interface.
| Job | What you call |
|---|---|
| Create or update a product | The products endpoints, with the archetype as the shape |
| Push availability | Availability, per option, per date |
| Push rates | Price schedules: your price in USD, per ticket type |
| Close dates | Availability with a closed status |
| Read bookings | The bookings endpoints, or take the webhook |
| Cancel a booking | The cancel endpoint, with a reason |
The full reference is on the developer hub, with request and response shapes for every endpoint. This page is the orientation, not the specification.
Polling for new bookings works and is a poor use of everyone's time. Configure a webhook and we call you when something happens.
Two habits make webhook integrations reliable, and skipping either one is the source of most of the trouble we see.
Operators who push 400 products first and check afterwards spend their first week deleting things.
Keep a product in draft while you integrate. It behaves identically through the API and is invisible to travellers and trade buyers, which makes it a real test fixture rather than a simulated one. Publish it when the integration is right, or delete it and push the real catalogue.
No. We store a hash. Revoke and reissue, which takes seconds and is safer than any mechanism that could show it to you twice.
No. Commission on confirmed bookings is the whole commercial model and it does not change based on how the booking arrived.
Yes, and it is generous enough that a normal integration never meets it. Bulk availability pushes should be batched rather than sent one date at a time, which is good practice anyway.
Yes. They are the same system. Just be consistent about which one owns availability, and prefer editing a given product in one place.
No. An operator's key imports only. Your products reach other sites through trade buyers, who connect with keys of their own.
It works, and so do reads and drafts. Publishing is the only thing gated on approval, through the API exactly as in the panel.