curl --request GET \
--url https://api.letsdothis.com/v0/add-ons \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.letsdothis.com/v0/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/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
Returns organizer-owned participant add-ons, grouped by product and paginated before external import identities are enriched. Each add-on carries its restriction lists (eventIds, eventOccurrenceIds, raceIds, ticketSlugs) — alternative grants combined with OR, all empty meaning organizer-wide — which determine the bookings it can be sold with or imported onto.
curl --request GET \
--url https://api.letsdothis.com/v0/add-ons \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.letsdothis.com/v0/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/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.
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?

