curl --request GET \
--url https://api.letsdothis.com/v0/add-ons/{id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.letsdothis.com/v0/add-ons/{id}', 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/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"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"
]
}
]
}{
"statusCode": 404,
"error": "<string>",
"message": "<string>"
}Get an add-on by ID
Returns one organizer-owned add-on. Foreign, ownerless, deleted, and unknown products return 404.
curl --request GET \
--url https://api.letsdothis.com/v0/add-ons/{id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.letsdothis.com/v0/add-ons/{id}', 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/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"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"
]
}
]
}{
"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 resource to query by
Response
Default Response
Organizer-owned add-on product grouped around its variants.
How an add-on is assigned after purchase. V1 supports participants only.
TO_PARTICIPANT CLOTHING, MEDAL, PHOTOS, SERVICES, ACCESSORIES, TRANSPORT, NUTRITION, SWIMWEAR, OTHER Show child attributes
Show child attributes
Events this add-on is restricted to. The four restriction lists (eventIds, eventOccurrenceIds, raceIds, ticketSlugs) mirror the add-on import request and are alternative grants combined with OR: the add-on applies to a booking when at least one populated list matches it, and applies organizer-wide when every list is empty. Lists commonly carry values from earlier occurrences alongside current ones; a single match is enough.
Event occurrences this add-on is restricted to. See eventIds for how the restriction lists combine.
Races this add-on is restricted to. A value may reference either a race under a specific occurrence or the race across occurrences, so match a ticket's race against both. See eventIds for how the restriction lists combine.
Tickets this add-on is restricted to, referenced by ticketSlug rather than ticket id. See eventIds for how the restriction lists combine.
Show child attributes
Show child attributes
Was this page helpful?

