curl --request GET \
--url https://api.letsdothis.com/v0/event-occurrences/{id}/add-ons \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.letsdothis.com/v0/event-occurrences/{id}/add-ons', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.letsdothis.com/v0/event-occurrences/{id}/add-ons"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "5fcd4b7e-1a2c-4d89-8f31-6b72e09a45c3",
"externalAddOnId": "city-marathon-tshirt",
"eventIds": [],
"eventOccurrenceIds": [
"5876543210"
],
"raceIds": [],
"ticketSlugs": [
"city-marathon-2026"
],
"name": "City Marathon Technical T-shirt",
"description": "Lightweight, moisture-wicking running T-shirt available for collection on race day.",
"allocationType": "TO_PARTICIPANT",
"category": "CLOTHING",
"images": [
{
"uri": "https://images.letsdothis.com/addons/city-marathon-tshirt.jpg"
}
],
"variants": [
{
"id": "29bb39a4-3206-4f43-9a6a-79d83fc1c31e",
"externalVariantId": "city-marathon-tshirt-navy-m",
"name": "Navy / Medium",
"properties": {
"COLOR": "Navy",
"SIZE": "M"
},
"price": {
"value": 2500,
"currencyCode": "USD"
},
"externalSku": "CITY-TSHIRT-NVY-M",
"fulfilmentMethods": [
"RACE_DAY"
]
},
{
"id": "f4e8bc19-1d63-4ab7-b152-528a49d8a672",
"externalVariantId": "city-marathon-tshirt-navy-l",
"name": "Navy / Large",
"properties": {
"COLOR": "Navy",
"SIZE": "L"
},
"price": {
"value": 2500,
"currencyCode": "USD"
},
"externalSku": "CITY-TSHIRT-NVY-L",
"fulfilmentMethods": [
"RACE_DAY"
]
}
]
}
],
"page": {
"totalResults": 506,
"first": "eyJpZCI6IjYzOTljMjAwMTVkNjBhZTNmZjI4ZjI0YyIsInVwZGF0ZWRBdCI6IjIwMjItMTItMTRUMTI6MzA6NTkuMjE3WiJ9",
"last": "eyJpZCI6IjY1NGNkZDIxZDlhMTU3ODdiNzFkMTM0YSIsInVwZGF0ZWRBdCI6IjIwMjMtMTEtMTNUMTU6MTE6MTIuNzI0WiJ9",
"prev": "",
"next": "eyJpZCI6IjY0NzBkNTkwM2RjOWE5OWJhMTA0Y2ZhYiIsInVwZGF0ZWRBdCI6IjIwMjMtMTEtMTNUMTU6MTE6MTIuNjE4WiJ9"
}
}{
"statusCode": 404,
"error": "<string>",
"message": "<string>"
}List add-ons for an event occurrence
Returns organizer-owned add-ons whose current event, occurrence, race, and ticket restrictions apply to this occurrence. An add-on may still apply to only some of the occurrence’s tickets: read its restriction lists (eventIds, eventOccurrenceIds, raceIds, ticketSlugs) — alternative grants combined with OR — and match them against the occurrence’s tickets, joining ticketSlugs on each ticket’s ticketSlug and raceIds on its raceId.
curl --request GET \
--url https://api.letsdothis.com/v0/event-occurrences/{id}/add-ons \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.letsdothis.com/v0/event-occurrences/{id}/add-ons', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.letsdothis.com/v0/event-occurrences/{id}/add-ons"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "5fcd4b7e-1a2c-4d89-8f31-6b72e09a45c3",
"externalAddOnId": "city-marathon-tshirt",
"eventIds": [],
"eventOccurrenceIds": [
"5876543210"
],
"raceIds": [],
"ticketSlugs": [
"city-marathon-2026"
],
"name": "City Marathon Technical T-shirt",
"description": "Lightweight, moisture-wicking running T-shirt available for collection on race day.",
"allocationType": "TO_PARTICIPANT",
"category": "CLOTHING",
"images": [
{
"uri": "https://images.letsdothis.com/addons/city-marathon-tshirt.jpg"
}
],
"variants": [
{
"id": "29bb39a4-3206-4f43-9a6a-79d83fc1c31e",
"externalVariantId": "city-marathon-tshirt-navy-m",
"name": "Navy / Medium",
"properties": {
"COLOR": "Navy",
"SIZE": "M"
},
"price": {
"value": 2500,
"currencyCode": "USD"
},
"externalSku": "CITY-TSHIRT-NVY-M",
"fulfilmentMethods": [
"RACE_DAY"
]
},
{
"id": "f4e8bc19-1d63-4ab7-b152-528a49d8a672",
"externalVariantId": "city-marathon-tshirt-navy-l",
"name": "Navy / Large",
"properties": {
"COLOR": "Navy",
"SIZE": "L"
},
"price": {
"value": 2500,
"currencyCode": "USD"
},
"externalSku": "CITY-TSHIRT-NVY-L",
"fulfilmentMethods": [
"RACE_DAY"
]
}
]
}
],
"page": {
"totalResults": 506,
"first": "eyJpZCI6IjYzOTljMjAwMTVkNjBhZTNmZjI4ZjI0YyIsInVwZGF0ZWRBdCI6IjIwMjItMTItMTRUMTI6MzA6NTkuMjE3WiJ9",
"last": "eyJpZCI6IjY1NGNkZDIxZDlhMTU3ODdiNzFkMTM0YSIsInVwZGF0ZWRBdCI6IjIwMjMtMTEtMTNUMTU6MTE6MTIuNzI0WiJ9",
"prev": "",
"next": "eyJpZCI6IjY0NzBkNTkwM2RjOWE5OWJhMTA0Y2ZhYiIsInVwZGF0ZWRBdCI6IjIwMjMtMTEtMTNUMTU6MTE6MTIuNjE4WiJ9"
}
}{
"statusCode": 404,
"error": "<string>",
"message": "<string>"
}403. Contact your Let’s Do This representative if you’d like access.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The ID of the event occurrence to query by.
Query Parameters
The number of add-on products to return per page. Range between 1 - 50, defaults to 50.
1 <= x <= 5050
Accepts an existing page cursor. For more details see the definition of PageCursor in the response.
Accepts an existing page cursor. For more details see the definition of PageCursor in the response.
Return only add-ons configured for this organizer-owned event occurrence.
Resolve one product by its organizer-scoped external import identity.
Response
Default Response
Show child attributes
Show child attributes
Cursor details for pagination.
- In scenarios with large amounts of data, it's common to return only a subset of data in a single request, known as a "page".
- Most API responses include two objects: a 'data' object with the query results, and a 'PageCursor' object detailing the current page.
- Cursors can be used to navigate to earlier or later pages in the set of results. For instance, passing the 'next' cursor from 'PageCursor' fetches the next set of results.
- Cursors are base64 encoded strings.
Show child attributes
Show child attributes
{
"totalResults": 506,
"first": "eyJpZCI6IjYzOTljMjAwMTVkNjBhZTNmZjI4ZjI0YyIsInVwZGF0ZWRBdCI6IjIwMjItMTItMTRUMTI6MzA6NTkuMjE3WiJ9",
"last": "eyJpZCI6IjY1NGNkZDIxZDlhMTU3ODdiNzFkMTM0YSIsInVwZGF0ZWRBdCI6IjIwMjMtMTEtMTNUMTU6MTE6MTIuNzI0WiJ9",
"prev": "",
"next": "eyJpZCI6IjY0NzBkNTkwM2RjOWE5OWJhMTA0Y2ZhYiIsInVwZGF0ZWRBdCI6IjIwMjMtMTEtMTNUMTU6MTE6MTIuNjE4WiJ9"
}
Was this page helpful?

