swarmtix_orders_get
Returns one Swarmtix order in full, with the buyer's details and a line for each ticket in it
swarmtix_orders_get
Returns one order in full: the buyer's name and email address, what was paid, when it was placed, and a line for each ticket in it with the attendee's name, the ticket type and its price.
When you would reach for it
- A support question about one order — "what did Sarah actually buy?"
- To see the attendee names on a multi-ticket order, which the list tool does not carry.
- To check whether an order was refunded, complimentary or sold at the door.
Scope
orders:read
This tool always returns the buyer's email address, regardless of how you reached the order. It never returns a ticket barcode or security code — that is the credential that admits a person to the event, and it is excluded from every tool in the catalog without exception.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
event | string | Yes | — | The event's id (a GUID) or its URL slug. |
order | integer | Yes | — | The order's numeric id, as returned by swarmtix_orders_list. |
Both are required. The event is not decoration: order ids are sequential numbers, so the event constrains the lookup to a record this connection has already been proved to own.
Example call
{
"name": "swarmtix_orders_get",
"arguments": { "event": "spring-summit-2026", "order": 184149 }
}What comes back
{
"orderId": 184149,
"eventId": "8f14e45f-ceea-467a-9c3d-1b2a5f6e7d80",
"eventName": "Spring Summit 2026",
"buyer": {
"firstName": "Sarah",
"lastName": "Meyer",
"email": "[email protected]"
},
"ticketCount": 2,
"totalAmount": 91.7,
"currency": "EUR",
"currencySymbol": "€",
"placedAt": "2026-10-28T14:22:09",
"active": true,
"refunded": false,
"soldAtDoor": false,
"complimentary": false,
"discounted": true,
"orderType": "online",
"tickets": [
{
"attendeeFirstName": "Sarah",
"attendeeLastName": "Meyer",
"ticketType": "General Admission",
"price": 45,
"serviceFee": 1.35,
"complimentary": false
},
{
"attendeeFirstName": "Jon",
"attendeeLastName": "Meyer",
"ticketType": "General Admission",
"price": 45,
"serviceFee": 1.35,
"complimentary": false
}
]
}| Field | What it is |
|---|---|
orderId | The order's numeric id |
eventId, eventName | The event it belongs to |
buyer | First name, last name and email address of whoever paid |
ticketCount | How many tickets are in the order |
totalAmount | What was paid, including fees |
currency | The event's currency as its ISO 4217 code — "EUR", "USD" |
currencySymbol | The symbol that renders it — "€", "$" |
placedAt | When the order was placed |
active | Whether the order is still live |
refunded | Whether the order was cancelled or refunded. Absent when it has never been either. |
soldAtDoor | Whether it was taken at the door rather than online |
complimentary | Whether the whole order was issued free |
discounted | Whether a discount code was applied |
orderType | How the order was taken, as a word: "online" (the public checkout, which is what an ordinary web purchase is), "imported" from a guest list, "complimentary", or "door" for a sale taken at the door. May also be null, and an unrecognised stored value renders as "unrecognised" — handle both rather than assuming one of the four words. |
tickets | One entry per ticket in the order |
currency and currencySymbol are two fields on purpose. The code is what identifies the currency — "$" is four different ones — while the symbol only renders a number for a reader.
Each tickets entry has the attendee's first and last name, the ticket type's name, the face price, the serviceFee, whether that individual ticket was complimentary, and a seat label on a reserved-seating event.
Every field here was typed on purpose. The record this tool reads from does hold the ticket's barcode and security code in memory; the projection is the only thing standing between those values and the response, and they are not in it.
What happens when you call it
- The event identifier is resolved and the ownership checks run.
- The order is looked up by its id and the authorized event's id together. That pairing is the whole tenancy control for the order: the service that fills in the ticket lines matches on the order id alone and applies no organisation filter, so an id from another organisation would otherwise be answered.
- The lookup also supplies the internal order code the detail fetch needs, so you never have to know it.
- The ticket lines are fetched and checked a second time against the organisation and the event. That check cannot fire today; it is there so a future change that loosened step 2 would fail loudly rather than leak quietly.
- The record is projected to the named fields above.
Troubleshooting
"Order not found, or this connection does not have access to it."
The order id does not exist, or it exists on a different event or a different organisation than the one you named. The cases are deliberately indistinguishable — order ids are sequential, so a distinguishable error would turn a loop over neighbouring ids into a map of somebody else's sales.
Check that the event and order belong together by finding the order on swarmtix_orders_list first.
"Event not found, or this connection does not have access to it."
The event argument itself did not resolve. This fires before the order is looked at.
"This connection is not authorized for orders:read. Reconnect and grant it to use this tool."
Reconnect and approve orders:read.
The barcode is not in the response
It never is, under any permission. Send the buyer their ticket from the dashboard instead — the ticket email carries the barcode to the person entitled to it.
"Swarmtix could not complete this request. Nothing was changed."
The order row was found but the detail fetch failed. Retry; if it persists, quote the time to support.
Use cases
- Support lookups — "what did this person buy, and was it refunded?"
- Name changes at the door — reading the attendee names on an order before fixing one in the dashboard
- Checking a discount landed —
discountedagainst the total - Complimentary audit — which orders were issued free and by whom