> ## Documentation Index
> Fetch the complete documentation index at: https://partner-help.letsdothis.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get an add-on by ID

> Returns one organizer-owned add-on. Foreign, ownerless, deleted, and unknown products return 404.

<Warning>This endpoint is restricted and not generally available: organizations that have not been enabled receive a `403`. Contact your Let's Do This representative if you'd like access.</Warning>


## OpenAPI

````yaml /openapi.json get /v0/add-ons/{id}
openapi: 3.1.0
info:
  title: Let's Do This API
  version: 0.1.0
  description: >
    The full reference — getting started, pagination, error responses, rate
    limits and the changelog — lives at

    [partner-help.letsdothis.com/api-reference](https://partner-help.letsdothis.com/api-reference/overview).

    This page is the interactive OpenAPI view of the same specification.


    # Authentication


    Create an API key from **Settings** → **Credentials** in your Let's Do This
    account and send it as a bearer token:


    ```bash

    curl --request GET \
     --url "https://api.letsdothis.com/v0/participants" \
     --header "Authorization: Bearer YOUR-API-KEY"
    ```


    Keep the key secret: it identifies your organization, so do not ship it in a
    website or native app. If a key is exposed,

    revoke it from the same section and create a replacement.


    # OpenAPI schema


    Download the [OpenAPI schema](https://api.letsdothis.com/documentation/json)
    to use with Postman or an OpenAPI client

    generator.
servers:
  - url: https://api.letsdothis.com
    description: Production
  - url: https://api.staging.letsdothis.com
    description: Staging
security:
  - bearerAuth: []
tags:
  - name: Events
    x-group: Events
    description: Events that participants can register for.
  - name: EventOccurrences
    x-group: Event occurrences
    description: >-
      Event occurrences scoped to the organizer associated with your Public API
      credentials. Unlike the public Events catalog, results are limited to your
      own events.
  - name: Races
    x-group: Races
    description: >-
      Races within an event occurrence. An event occurrence may have one or more
      races, for example a 5K and a 10K within the same race day.
  - name: Tickets
    x-group: Tickets
    description: Tickets that are available for events.
  - name: BookingForms
    x-group: Booking forms
    description: >-
      Booking forms define the questions a booker answers when registering for a
      ticket. A ticket usually references a single booking form, so expect zero
      or one, while a booking form may be shared across multiple tickets.
  - name: BookingFormFields
    x-group: Booking form fields
    description: >-
      Booking form fields are the individual questions on a booking form — their
      type, label, options, and whether an answer is required. A field can be
      reused across multiple forms.
  - name: Bookings
    x-group: Bookings
    description: >-
      Bookings are the transaction record for a registration. A booking may
      contain one or more participants (entries).
  - name: Participant
    x-group: Participants
    description: Participants are users who successfully booked an event.
  - name: LineItem
    x-group: Line items
    description: Financial details related to individual items within transactions.
  - name: AddOns
    x-group: Add-ons
    description: >-
      Organizer-owned products that can be purchased and allocated to
      participants. Imported products retain stable external identities.
  - name: DiscountCodes
    x-group: Discount codes
    description: >-
      Discount codes participants enter at checkout to reduce the price of a
      booking.
  - name: Credits
    x-group: Credits
    description: >-
      Credits are balances participants can spend at checkout, identified by
      their email address.
  - name: Referrals
    x-group: Referrals
    description: >-
      Referral programs, the referrers registered on them, and asynchronous
      imports of historical referrals.
  - name: Application
    x-group: Applications
    description: >-
      Applications are created when a user applies for tickets that are set up
      to require an application process, such as balloted or "Good For Age"
      entries.
  - name: Partner
    x-group: Partners
    description: >-
      Partners that were created by the organization who can have Reserved
      Entries assigned to them.
  - name: ReservedEntries
    x-group: Reserved entries
    description: >-
      Reserved Entries are entries that are reserved for a partner. After being
      assigned, the partner can then allocate these entries to participants.
  - name: Timing
    x-group: Timing
    description: >-
      Timing providers push bib numbers and bib-pack shipments back to Let's Do
      This for the startlist entries they received. Available to select timing
      partners only.
paths:
  /v0/add-ons/{id}:
    get:
      tags:
        - AddOns
      summary: Get an add-on by ID
      description: >-
        Returns one organizer-owned add-on. Foreign, ownerless, deleted, and
        unknown products return 404.
      parameters:
        - schema:
            type: string
          example: '67123'
          in: path
          name: id
          required: true
          description: The ID of the resource to query by
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddOn'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                description: Not found
                type: object
                properties:
                  statusCode:
                    type: number
                    enum:
                      - 404
                  error:
                    type: string
                  message:
                    type: string
components:
  schemas:
    AddOn:
      title: AddOn
      type: object
      properties:
        id:
          type: string
        externalAddOnId:
          type: string
        name:
          type: string
        description:
          type: string
        allocationType:
          $ref: '#/components/schemas/AddOnAllocationType'
        category:
          $ref: '#/components/schemas/AddOnCategory'
        images:
          type: array
          items:
            $ref: '#/components/schemas/AddOnImage'
        eventIds:
          type: array
          items:
            type: string
          description: >-
            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.
        eventOccurrenceIds:
          type: array
          items:
            type: string
          description: >-
            Event occurrences this add-on is restricted to. See `eventIds` for
            how the restriction lists combine.
        raceIds:
          type: array
          items:
            type: string
          description: >-
            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.
        ticketSlugs:
          type: array
          items:
            type: string
          description: >-
            Tickets this add-on is restricted to, referenced by `ticketSlug`
            rather than ticket id. See `eventIds` for how the restriction lists
            combine.
        variants:
          type: array
          items:
            $ref: '#/components/schemas/AddOnVariant'
      required:
        - id
        - name
        - description
        - allocationType
        - category
        - images
        - eventIds
        - eventOccurrenceIds
        - raceIds
        - ticketSlugs
        - variants
      additionalProperties: false
      description: Organizer-owned add-on product grouped around its variants.
      example:
        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
    AddOnAllocationType:
      title: AddOnAllocationType
      type: string
      description: How an add-on is assigned after purchase. V1 supports participants only.
      enum:
        - TO_PARTICIPANT
    AddOnCategory:
      title: AddOnCategory
      type: string
      enum:
        - CLOTHING
        - MEDAL
        - PHOTOS
        - SERVICES
        - ACCESSORIES
        - TRANSPORT
        - NUTRITION
        - SWIMWEAR
        - OTHER
    AddOnImage:
      title: AddOnImage
      type: object
      properties:
        uri:
          type: string
      required:
        - uri
      additionalProperties: false
    AddOnVariant:
      title: AddOnVariant
      type: object
      properties:
        id:
          type: string
        externalVariantId:
          type: string
        name:
          type: string
        properties:
          $ref: '#/components/schemas/AddOnVariantProperties'
        price:
          $ref: '#/components/schemas/Price'
        externalSku:
          type: string
        fulfilmentMethods:
          type: array
          items:
            $ref: '#/components/schemas/AddOnFulfilmentMethod'
      required:
        - id
        - name
        - properties
        - price
        - fulfilmentMethods
      additionalProperties: false
    AddOnVariantProperties:
      title: AddOnVariantProperties
      type: object
      properties:
        COLOR:
          type: string
        SIZE:
          type: string
      additionalProperties: false
      description: Variant attributes understood by the existing add-on product.
    Price:
      title: Price
      type: object
      properties:
        value:
          $ref: '#/components/schemas/PriceValue'
        currencyCode:
          $ref: '#/components/schemas/CurrencyCode'
      required:
        - value
        - currencyCode
      additionalProperties: false
      description: >-
        A monetary value in 100x base unit format. For example, 1 GBP is
        represented as: _{ "value": 100, "currencyCode": "GBP" }_


        And 5 cents are represented as: _{ "value": 5, "currencyCode": "USD" }_
    AddOnFulfilmentMethod:
      title: AddOnFulfilmentMethod
      type: string
      enum:
        - SHIP
        - RACE_DAY
      description: How an add-on can be fulfilled.
    PriceValue:
      title: PriceValue
      type: number
      description: >-
        A monetary value in 100x base unit format. For example, 1 GBP is
        represented as: 100, and 5 cents are represented as: 5
      example: 5000
    CurrencyCode:
      title: CurrencyCode
      type: string
      enum:
        - AUD
        - CAD
        - DKK
        - EUR
        - GBP
        - INR
        - MXN
        - PHP
        - USD
        - ZERO
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````