swarmtix_discounts_list
Lists the discount offers set up on an event, with their codes, reductions, dates and usage
swarmtix_discounts_list
Lists the discount offers set up on one event, in alphabetical order by offer name, one page at a time. Each entry carries the offer's name, whether it takes a fixed amount or a percentage off and how much, the code that redeems it, the dates it runs between, and how many times it has been used against its limit.
This lists the active offers created by the authorizing organizer account, not every offer on the event. An offer a colleague set up, and one that has been deactivated, will not appear — even though both are real and a deactivated one may still be visible in the dashboard.
A code can therefore be missing from this list and still be accepted at checkout. swarmtix_discounts_check_code checks against the event, not against this list, so it is the tool to trust when the two disagree.
When you would reach for it
- To audit what is live before a campaign goes out.
- To see how much of a limited code is left —
timesUsedagainstusesLimit. - To find a code that has expired when a buyer says theirs was rejected.
To test one specific code rather than read the list, use swarmtix_discounts_check_code.
Scope
discounts:read
Reads your discount offers and their codes. Creating one needs discounts:write — a separate permission, because a discount is the one thing in this catalog that changes what a buyer pays.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
event | string | Yes | — | The event's id (a GUID) or its URL slug. |
limit | integer | No | 50 | How many discount offers to return. 1 to 200. |
cursor | string | No | — | The cursor from the end of a previous page. Omit to start at the beginning. |
Example call
{
"name": "swarmtix_discounts_list",
"arguments": { "event": "spring-summit-2026" }
}What comes back
[
{
"id": "a15c9e02-3b7d-4c61-8f95-6d24e0a7b3c8",
"eventId": "8f14e45f-ceea-467a-9c3d-1b2a5f6e7d80",
"name": "EARLYBIRD",
"code": "EARLYBIRD",
"discountType": "Coded Discount",
"amountOff": 0,
"percentageOff": 20,
"currency": "EUR",
"currencySymbol": "€",
"timesUsed": 34,
"usesLimit": 100,
"unlimited": false,
"startsImmediately": true,
"startDate": "2026-08-01T09:00:00",
"runsUntilSalesEnd": false,
"endDate": "2026-09-30T23:59:00"
},
{
"id": "cf3907b2-8d15-4e60-a479-13c85b0e6d2a",
"eventId": "8f14e45f-ceea-467a-9c3d-1b2a5f6e7d80",
"name": "PARTNER10",
"code": "PARTNER10",
"discountType": "Coded Discount",
"amountOff": 10,
"percentageOff": 0,
"currency": "EUR",
"currencySymbol": "€",
"timesUsed": 7,
"unlimited": true,
"startsImmediately": true,
"startDate": "2026-08-01T09:00:00",
"runsUntilSalesEnd": false,
"endDate": "2026-11-04T19:00:00"
}
]| Field | What it is |
|---|---|
id | The offer's id |
eventId | The event it belongs to |
name | The offer's name. Offers created through MCP are named after their code. |
code | The code a buyer types at checkout |
discountType | Which kind of offer it is, as a phrase: "Coded Discount" (typed at checkout), "Public Discount" (advertised on the event page) or "Access Code" (unlocks hidden tickets). Offers created through MCP are always "Coded Discount". |
amountOff | A fixed reduction per ticket. 0 when the offer is a percentage. |
percentageOff | A percentage reduction per ticket. 0 when the offer is a fixed amount. |
currency | The currency amountOff is in, as its ISO 4217 code — "EUR", "USD" |
currencySymbol | The symbol that renders it — "€", "$" |
timesUsed | How many times the code has been redeemed |
usesLimit | The redemption limit. Absent when the offer is unlimited. |
unlimited | Whether the offer has no redemption limit |
startsImmediately | Whether it started as soon as it was created rather than on startDate |
startDate | When it starts being accepted |
runsUntilSalesEnd | Whether it runs until ticket sales close rather than until endDate |
endDate | When it stops being accepted |
Exactly one of amountOff and percentageOff carries the reduction; the other is 0. They are stored in one place with a flag saying which kind it is, so an offer cannot be both.
What happens when you call it
- The event identifier is resolved and the ownership checks run.
limitis checked.- The event's discount offers are fetched. The service behind this applies its own edit permission check, which is stricter than the read gate above, and its query narrows the rows twice more: to offers that are active, and to offers created by the authorizing organizer account.
- The list is sorted by offer name, case-insensitively, then by id.
- One page is cut, projected to the fields above, and serialized.
Troubleshooting
"Event not found, or this connection does not have access to it."
Three causes share this sentence here, one of which is specific to this tool:
- The event does not exist.
- It belongs to a different organisation than this connection covers.
- The authorizing organizer can see the event but is not permitted to edit it. Discount setup is commercial configuration, and the service guards it with the same edit permission the dashboard applies. A team member with read-only access to an event gets this sentence, which is literally accurate: this connection does not have access to it.
If you can open the event but not its discounts in the dashboard either, that is the third case.
An offer you know exists is not in the list
Two causes, both of them the query narrowing the rows rather than anything being wrong:
- It was created by a different organizer account. The list covers offers created by the account this connection authorizes as.
swarmtix_whoaminames it. - It has been deactivated. Only active offers are listed.
If you are checking whether a specific code works, use swarmtix_discounts_check_code — it asks the event, not this list.
usesLimit is missing from a row
The offer is unlimited. unlimited is true on the same row.
A code in the list is not working at checkout
Read the dates. An offer outside startDate–endDate is rejected, as is one whose timesUsed has reached usesLimit. swarmtix_discounts_check_code tells you which of those it is, in a sentence.
Two offers share the same code
That is possible — creating a code twice produces two offers that both answer to it. Whichever the checkout matches first wins. Deactivate one in the dashboard; the MCP catalog has no delete tool.
"This connection is not authorized for discounts:read. Reconnect and grant it to use this tool."
Reconnect and approve discounts:read.
Use cases
- Campaign audit before an email goes out
- Budget control — how much of a limited code is left
- Support — "why was my code rejected?" starts here
- Season rollover — reading last year's offers before recreating them