{"openapi":"3.1.0","info":{"title":"Let's Do This API","version":"0.1.0","description":"**Welcome to the Let's Do This API reference!**\n\nLet's Do This spans a broad range of products that help you make incredible experiences for your participants.\n\nThese docs will help you interact with the REST API to manage your events, communicate with your particpants,\nexport your start list data, and much more!\n\n# Getting started\n\nThe Let's Do This API provides a REST interface for much of the data essential for the day-to-day operation of planning,\npromoting and running an event.\n\nTo use the API, you need an **API Key**. To generate one, go to the settings / credentials tab in your account.\n\n# Authentication\n\nThe API uses signed [JSON Web Tokens (JWTs)](https://jwt.io/introduction). These tokens are _not_ encrypted,\nand the contents can be read by anyone. Rather, a signed token can be used to verify the _integrity_ of _claims_\ncontained within the token. For example, your token may contain your **Organiser ID**.\nAnd even though anybody with access to your token can read the claims contained within it,\nthey are unable to modify those claims without destroying the integrity of the token.\n\nBecause JWTs **are not encrypted**, your API Key should be treated like any other secret.\nDo not share it with others, and do not use it in any software shipped to the public — for example, a website or native app.\n\n## Authenticating Requests\n\nThe REST API requires you to authenticate requests to fetch information about your events.\nIf you are not authenticated, the API will not return any information.\n\nYou can authenticate your request by sending a token in the _Authorization header_ of your request.\nIn the following example, replace `YOUR-API-KEY` with a reference to your API Key:\n\n```bash\ncurl --request GET \\\n --url \"https://api.letsdothis.com/v0/applications\" \\\n --header \"Authorization: Bearer YOUR-API-KEY\"\n```\n\n## Revoking Keys\n\nIf you believe your API Key has been shared with a third party who should not have access to your data,\nyou can invalidate the key in your account settings.\n\n# Error Codes\n\nThere are a number of error codes that can be returned by the API. These are detailed below.\n\n| HTTP Code |      Description      | Notes                                                                                                                                                                                   |\n| :-------: | :-------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n|   `200`   |          OK           | Your request completed successfully.                                                                                                                                                    |\n|   `401`   |     Unauthorized      | A `401 Unauthorized` response means you have not authenticated correctly. Check you have added your API Key. Instructions on how to do so can be found [here](#section/Authentication). |\n|   `500`   | Internal Server Error | The API encountered an internal error and was unable to response to your request. If the problem persists, please contact your Partner Success Manager.                                 |\n\n# Response Data\n\nSuccessful requests to the API will generate a response in [JSON](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON) format.\n\n## Paginated responses\n\nWhen querying a list of entities, the response will be wrapped in a top-level object,\nand the result of the query will be returned in the value of the `data` property on that object.\n\nIn addition, responses will contain a `page` property which contains data about the current **page**.\n\n```js\n{\n  \"data\": [\n    {\n      \"id\": \"6399c20015d60ae3ff28f24c\",\n      ...\n    }\n  ],\n  \"page\": {\n    \"totalResults\": 1,\n    \"first\": \"6399c20015d60ae3ff28f24c\",\n    \"last\": \"64577f3fa6449247e0322e8e\",\n    \"prev\": \"6399c20015d60ae3ff28f24c\",\n    \"next\": \"6399c20015d60ae3ff28f24c\"\n  }\n}\n```\n\nIn this response the `first`, `last`, `prev` and `next` properties are cursors that can be used\nto navigate to earlier or later pages in the set of results. For instance, using the `next`\ncursor from fetches the next set of results. See more details on specific endpoints.\n\n# Optional features\n\nSeveral endpoints accept a `features` query parameter that lets you opt into additional fields and behaviors per request — for example, `?features=tags,waves`. See the parameter description on the relevant endpoint (e.g. `GET /v0/participants`) for the full list of available features and what each one adds.\n\n# Quickstarts\n\n## No Code\n\nThe easiest way to get started querying the API is to use a tool like [RapidAPI](https://paw.cloud/)\nor [Postman](https://www.postman.com/).\n\nYou can either set up the requests yourself or use our generated OpenAPI schema and import it to both tools.\n\n### Import OpenAPI schema\n\n#### Step 1: Download our OpenAPI schema\n\nCan access it at the top of this documentation or by accessing it [here](https://api.letsdothis.com/documentation/json).\n\n#### Step 2: Import it to your preferred tool\n\nExample guides:\n\n- [RapidApi](https://paw.cloud/docs/import/swagger)\n- [Postman](https://learning.postman.com/docs/designing-and-developing-your-api/importing-an-api/)\n\n#### Step 4: Submit\n\nNow you should have access to all our endpoints and can start using your tool to make requests.\nRemember to also set your API KEY in the [Authorization Header](#section/Authentication/Authenticating-Requests)!\n\n### Manual set up\n\n#### Step 1: Set URL\n\nFirst, set the URL to `https://api.letsdothis.com/v0/participants`.\n\n#### Step 2: Include Credentials\n\nSet an [Authorization Header](#section/Authentication/Authenticating-Requests) in the `Headers` tab:\n\n![Including Credentials](https://res.cloudinary.com/letsdothiscom/image/upload/v1683490933/api-docs/headers.png)\n\n#### Step 3: Submit\n\nAnd that's it! Now submit your request, and the API will return the first page of Participants in your account.\n\n## cURL\n\ncURL is a command line utility available on most Linux and Unix like systems as well as Windows.\nIt allows you to make network requests to a remote server (like the Let's Do This Public API) from your terminal.\n\nYou can send a `GET` request to the API in the following manner:\n\n```bash\ncurl --request GET \\\n --url \"https://api.letsdothis.com/v0/applications\" \\\n --header \"Authorization: Bearer YOUR-TOKEN\"\n```\n\nQuery parameters must be [URL Encoded](https://en.wikipedia.org/wiki/URL_encoding) manually when using cURL. For example, setting the page size should look like:\n\n```bash\ncurl --request GET \\\n --url \"https://api.letsdothis.com/v0/applications?page%3Fsize%5B=100\" \\\n --header \"Authorization: Bearer YOUR-TOKEN\"\n```\n\nand not\n\n```bash\ncurl --request GET \\\n --url \"https://api.letsdothis.com/v0/applications?page[size]=100\" \\\n --header \"Authorization: Bearer YOUR-TOKEN\"\n```\n\n## Node\n\nThere are many ways of fetching data over the network with Node and Typescript or Javascript. The snippet below shows one simple approach using Typescript.\n\n```js\nconst YOUR_TOKEN = 'xxxxxxxxxxxx';\nconst LDT_API_BASE_URL = 'https://api.letsdothis.com/v0';\n\nenum Endpoint {\n  Applications = '/applications',\n  Participants = '/participants',\n}\n\nconst getURLForEndpoint = (endpoint: Endpoint): URL => {\n  return new URL(LDT_API_BASE_URL + endpoint);\n};\n\nconst applicationsURL = getURLForEndpoint(Endpoint.Applications);\nconst applicationsResponse = await fetch(applicationsURL, {\n  method: 'GET',\n  headers: new Headers({\n    Authorization: `Bearer ${YOUR_TOKEN}`,\n  }),\n});\n\nif (applicationsResponse.ok) {\n  const applications = await applicationsResponse.json();\n  console.log(applications);\n}\n```\n","x-logo":{"url":"https://res.cloudinary.com/letsdothiscom/image/upload/v1702572515/api-docs/saxno3kfrtknigflez1e.png","backgroundColor":"#fafafa","altText":"Let's Do This API"}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"Application":{"title":"Application","type":"object","additionalProperties":false,"properties":{"id":{"type":"string","description":"A unique identifier. IDs should be treated as opaque string values but are guaranteed to represent a single, unique entity within Let's Do This.","example":"6399c20015d60ae3ff28f24c"},"participantIndex":{"type":"number","description":"The index of this participant in the booking record. For example, if this participant is the first participant in the booking, this field will be 0.","example":0},"bookingId":{"type":"string","description":"The unique identifier for the booking this participant was booked via.","example":"6399c20015d60ae3ff28f24c"},"transactionId":{"type":["string","null"],"description":"The unique identifier for the transaction this booking was made via, if present.","example":"6399c20015d60ae3ff28f24e"},"eventOccurrenceId":{"type":"string","description":"The unique identifier for the occurrence of the Event for which this participant is attending.","example":"6399c11c58f29f001ca95935"},"eventId":{"type":"string","description":"The unique identifier of the Event.","example":"2365756"},"raceId":{"type":"string","description":"The unique identifier for the race this booking was made for.","example":"3517846101"},"ticketTitle":{"type":"string","description":"The title of the ticket booked by this participant.","example":"10k Standard Entry"},"ticketId":{"type":"string","description":"The unique identifier for the ticket this booking was made for.","example":"6399c11c58f29f001ca95934"},"createdAt":{"$ref":"#/components/schemas/ISODate"},"updatedAt":{"$ref":"#/components/schemas/ISODate"},"waves":{"type":"array","items":{"$ref":"#/components/schemas/Wave"},"description":"**Optional — opt in with `?features=waves`.** Available when the `waves` feature is enabled. See the \"Optional features\" section of the introduction.\n\nThe waves this participant is booked into, if applicable."},"fields":{"type":"array","items":{"$ref":"#/components/schemas/Field"},"description":"An array of Field objects containing participant data collected during booking. Includes standard fields (e.g., `firstName`, `lastName`, `email`, `dateOfBirth`, `phone`, `status`, address fields, emergency contact) and any custom fields defined by the organizer."},"booker":{"anyOf":[{"$ref":"#/components/schemas/Booker"},{"type":"null"}],"description":"Contact information for the person who made the booking, if the booking form was set up to allow a separate booker and participant. See Booker for more details."},"bookerType":{"anyOf":[{"$ref":"#/components/schemas/BookerType"},{"type":"null"}]},"originalTicketPrice":{"anyOf":[{"$ref":"#/components/schemas/Price"},{"type":"null"}],"description":"The original price for the ticket this participant booked. See Price for more details."},"incrementalStatus":{"$ref":"#/components/schemas/IncrementalStatus"},"bibNumber":{"type":["string","null"]},"bookingCodesUsed":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"}},"required":["code"],"additionalProperties":false},"description":"Any discount codes applied at booking.","example":{"code":"SPRINT10"}},"reservedEntryUrl":{"type":["string","null"],"description":"Reserved entry booking URL: included if granted to the application."},"partnerMarketingOptIns":{"type":"array","items":{"$ref":"#/components/schemas/PartnerMarketingOptIn"},"description":"Marketing opt-ins given by booker."},"tags":{"type":"array","items":{"type":"string"},"description":"**Optional — opt in with `?features=tags`.** Available when the `tags` feature is enabled. See the \"Optional features\" section of the introduction.\n\nTags attached to the application or participant.","example":["injured","deferral"]},"gdprRedacted":{"type":"boolean","description":"**Optional — opt in with `?features=gdpr_redacted`.** Available when the `gdpr_redacted` feature is enabled. See the \"Optional features\" section of the introduction.\n\nIndicated whether the participant data has been redacted due to a GDPR request."},"statusDetails":{"type":"array","items":{"$ref":"#/components/schemas/StatusDetails"},"description":"**Optional on participants — opt in with `?features=status_details`.** Applications include this field unconditionally; on participants it's available when the `status_details` feature is enabled. See the \"Optional features\" section of the introduction.\n\nStatus details of the booking."},"tracking":{"type":"object","properties":{"utmParams":{"$ref":"#/components/schemas/UtmParams"}},"additionalProperties":false,"description":"Digital marketing tracking parameters."},"approvalStatus":{"$ref":"#/components/schemas/ApprovalStatus"},"applicationResolutionType":{"$ref":"#/components/schemas/ApplicationResolutionType"},"ballotDraw":{"type":"string","description":"The name of the draw that the application was successfully selected in.","example":"International Ballot Draw"},"notes":{"type":"array","items":{"$ref":"#/components/schemas/Note"},"description":"Stand-alone notes left on this application by the organizer (for example, via the \"Add note\" action in the dashboard). Approval and rejection reasons are returned separately under `statusDetails` and are not duplicated here."},"eventName":{"type":"string","description":"Event name.","example":"City Sprint Challenge"},"raceName":{"type":"string","description":"Race name."},"raceStartDate":{"$ref":"#/components/schemas/ISODate"},"sportId":{"type":"string","description":"Sport ID."},"distanceId":{"type":"string","description":"Distance ID."},"distances":{"type":"array","items":{"type":"object","properties":{"length":{"type":"number"},"discipline":{"$ref":"#/components/schemas/DistanceDisciplineValue"},"unit":{"$ref":"#/components/schemas/DistanceUnitValue"}},"required":["length"],"additionalProperties":false},"description":"Distances."},"disciplineLabel":{"type":"string","description":"Discipline label.","example":"Running"},"course":{"type":"object","properties":{"lapCount":{"type":"number"},"elevationGain":{"type":"number"},"isElevationGainAccurate":{"type":"boolean"}},"additionalProperties":false,"description":"Course details."},"eventLocation":{"$ref":"#/components/schemas/EventLocation"},"competitorSize":{"type":"number","description":"Estimated event size.","example":12293},"reservedEntryGroupCode":{"type":"string","description":"Reserved entry group code.","example":"re_x-ga8ais3v4r"},"reservedEntryGroupName":{"type":"string","description":"Reserved entry group name.","example":"Charity Entries"},"reservedEntryPartnerExternalIds":{"$ref":"#/components/schemas/PartnerExternalIds"},"reservedEntryPartnerName":{"type":"string","description":"Name of the partner who owns the reserved entry."}},"required":["bibNumber","booker","bookingCodesUsed","bookingId","createdAt","eventId","eventOccurrenceId","fields","id","incrementalStatus","notes","originalTicketPrice","participantIndex","raceId","ticketId","ticketTitle","transactionId","updatedAt"],"description":"An application with optionally extended metadata. See **ExtendedMetadata** for more details."},"ApplicationResolutionType":{"title":"ApplicationResolutionType","type":"string","enum":["BALLOT","MANUAL","AUTOMATIC","WAITLIST"],"description":"The type of application, and the way that approval or rejection is achieved. This field will contain one of the following values:\n\n- BALLOT — The participant's application is approved or rejected via a ballot process, wherein N participants are randomly selected from a pool.\n- AUTOMATIC — Deprecated. The participant's application is automatically approved or rejected, given some criteria.\n- MANUAL — The participant's application is manually approved or rejected, by a human.\n- WAITLIST — The participant's application is placed on a waitlist, and will be processed based on the event's waitlist configuration."},"ApprovalStatus":{"title":"ApprovalStatus","type":"string","enum":["APPROVED","CANCELLED","FAILED","PENDING","ELIGIBLE","NOT_ELIGIBLE"],"description":"The approval status of this participant. This field will contain one of the following values:\n- PENDING — The participant is pending approval or payment.\n- APPROVED — The participant's application has been approved.\n- FAILED — The participant's application was rejected (either manually or through ballot failure).\n- CANCELLED — The participant's application has been cancelled, for example if they were marked as a duplicate entry.\n- ELIGIBLE — The participant's application entry is eligible for approval, if for example they entered a \"Good For Age\" event.\n- NOT_ELIGIBLE — The participant's application entry is not eligible for approval, if for example they entered a \"Good For Age\" event but did not meet the criteria."},"ApprovalStatusDetails":{"title":"ApprovalStatusDetails","type":"object","properties":{"type":{"type":"string","enum":["APPROVAL"]},"reason":{"type":"string"},"timestamp":{"$ref":"#/components/schemas/ISODate"}},"required":["type","reason"],"additionalProperties":false,"description":"A status detail providing information about the application's approval status.","example":{"type":"APPROVAL","reason":"Application approved based on meeting all eligibility criteria.","timestamp":"2025-07-29T10:30:40.842Z"}},"AttributedLineItemType":{"title":"AttributedLineItemType","type":"string","enum":["TICKET","ADD_ON","BOOKING_FEE","DISCOUNT","MEMBERSHIP"]},"Booker":{"title":"Booker","type":"object","properties":{"firstName":{"type":"string","description":"The first name of the booker.","example":"Jean-Luc"},"lastName":{"type":"string","description":"The last name of the booker.","example":"Picard"},"email":{"type":"string","description":"The email address of the booker.","example":"jean@earlgrey.com"},"phone":{"type":"string","description":"The phone number of the booker.","example":"+44 7700 900000"},"companyName":{"type":"string","description":"The company name of the booker.","example":"Starfleet"},"address":{"$ref":"#/components/schemas/BookerAddress"},"miscFields":{"type":"array","items":{"$ref":"#/components/schemas/BookerMiscField"},"description":"Additional custom fields for the booker."}},"required":["firstName","lastName","email","phone","companyName","address","miscFields"],"additionalProperties":false,"description":"Contact information for the person who made a booking.","example":{"firstName":"Jean-Luc","lastName":"Picard","email":"jean@earlgrey.com","companyName":"Starfleet","address":{"line1":"1701 Enterprise Ave","line2":"","city":"San Francisco","county":"San Francisco","country":"US","postcode":"94101"},"miscFields":[]}},"BookerAddress":{"title":"BookerAddress","type":"object","properties":{"line1":{"type":"string"},"line2":{"type":"string"},"city":{"type":"string"},"county":{"type":"string"},"country":{"type":"string"},"postcode":{"type":"string"}},"required":["line1","line2","city","county","country","postcode"],"additionalProperties":false},"BookerMiscField":{"title":"BookerMiscField","type":"object","properties":{"fieldId":{"type":"string"},"fieldName":{"type":"string"},"value":{"type":"string"}},"required":["fieldId","fieldName","value"],"additionalProperties":false},"BookerType":{"title":"BookerType","type":"string","enum":["PARTNER","INDIVIDUAL"],"description":"The type of booker. This field will contain one of the following values:\n- INDIVIDUAL - the application is made on behalf on an individual, and should yield registrations 1:1\n- PARTNER - the application is made on behalf of a partner, or group, and could yield any number of registrations"},"Booking":{"title":"Booking","type":"object","properties":{"id":{"type":"string","description":"The unique identifier of the booking.","example":"6399c20015d60ae3ff28f24c"},"externalBookingId":{"type":"string","description":"The caller's own correlation id, present on bookings created through the import API.","example":"ORD-100234"},"status":{"$ref":"#/components/schemas/BookingStatus"},"source":{"$ref":"#/components/schemas/BookingSource"},"booker":{"anyOf":[{"$ref":"#/components/schemas/Booker"},{"type":"null"}],"description":"The booker — the person who made the booking."},"eventId":{"type":"string","description":"The event the booking belongs to.","example":"2365756"},"eventOccurrenceId":{"type":"string","description":"The event occurrence the booking belongs to.","example":"6399c11c58f29f001ca95935"},"ticketId":{"type":"string","description":"The ticket the booking was made against.","example":"6399c11c58f29f001ca95934"},"bookedAt":{"$ref":"#/components/schemas/ISODate"},"createdAt":{"$ref":"#/components/schemas/ISODate"},"updatedAt":{"$ref":"#/components/schemas/ISODate"},"transactionId":{"type":"string","description":"The payment transaction id, if any.","example":"6399c20015d60ae3ff28f24e"},"amount":{"anyOf":[{"$ref":"#/components/schemas/Price"},{"type":"null"}],"description":"The total amount paid for the booking."},"tracking":{"type":"object","properties":{"utmParams":{"$ref":"#/components/schemas/UtmParams"}},"additionalProperties":false,"description":"Digital marketing tracking parameters."},"bookingReference":{"type":"string","description":"A stable, human-readable booking reference.","example":"br_K9F3P7W2QX5T"},"participantCount":{"type":"number","description":"The number of participants (entries) in the booking."},"gdprRedacted":{"type":"boolean"}},"required":["id","status","booker","ticketId","createdAt","updatedAt","amount","participantCount","gdprRedacted"],"additionalProperties":false,"description":"A booking — the transaction record for a registration. A booking may contain one or more participants (entries); read them via `GET /v0/bookings/{id}/participants`."},"BookingForm":{"title":"BookingForm","type":"object","properties":{"id":{"type":"string","description":"The unique identifier of the booking form."},"title":{"type":"string","description":"The title of the booking form."}},"required":["id","title"],"additionalProperties":false,"description":"A booking form — the set of questions a booker answers when registering for one or more tickets.","example":{"id":"6651a3e8f2b47c0019d3a8c1","title":"10k Entry Form"}},"BookingFormField":{"title":"BookingFormField","type":"object","properties":{"id":{"type":"string","description":"The unique identifier of the field. Stable across the forms a field is used on. Use this as the `:id` when looking the field up."},"publicId":{"type":"string","description":"A non-unique grouping key that correlates equivalent fields across forms and tickets. Informational only — not usable as a lookup `:id`."},"type":{"$ref":"#/components/schemas/BookingFormFieldType"},"name":{"type":"string","description":"The default label of the field."},"nameByLocale":{"type":"object","additionalProperties":{"type":"string"},"description":"Field label translated to multiple locales. Always includes the default name."},"description":{"type":"string","description":"The default description of the field, if any."},"descriptionByLocale":{"type":"object","additionalProperties":{"type":"string"},"description":"Field description translated to multiple locales. Present only when the field has a description."},"required":{"type":"boolean","description":"Whether an answer to this field is required to complete a booking."},"options":{"type":"array","items":{"$ref":"#/components/schemas/BookingFormFieldOption"},"description":"The selectable options, for choice fields (select, radio, checkbox)."},"importContract":{"$ref":"#/components/schemas/BookingFormFieldImportContract"}},"required":["id","type","name","nameByLocale","required"],"additionalProperties":false,"description":"A booking form field definition — the type, label, options, and required-ness of a single question a booker is asked.","example":{"id":"6651a3e8f2b47c0019d3a8d4","publicId":"tshirt-size","type":"SELECT","name":"T-shirt size","nameByLocale":{"en-GB":"T-shirt size"},"required":true,"options":[{"id":"6651a3e8f2b47c0019d3a8e1","label":"Small","labelByLocale":{"en-GB":"Small"}},{"id":"6651a3e8f2b47c0019d3a8e2","label":"Medium","labelByLocale":{"en-GB":"Medium"}},{"id":"6651a3e8f2b47c0019d3a8e3","label":"Large","labelByLocale":{"en-GB":"Large"}}]}},"BookingFormFieldImportContract":{"title":"BookingFormFieldImportContract","type":"object","properties":{"placement":{"$ref":"#/components/schemas/ImportFieldPlacement"},"answerShape":{"$ref":"#/components/schemas/ImportAnswerShape"},"subKeys":{"type":"array","items":{"type":"string"},"description":"Sub-ids for keyedValues answers (address sub-keys, group-select groups)."},"optionValues":{"type":"array","items":{"type":"string"},"description":"The exact tokens import validation accepts for choice fields."},"readId":{"type":"string","description":"The id this field's answer surfaces under when reading bookings back, when it differs from the import id (e.g. `email` reads as `emailAddress`)."},"format":{"type":"string","description":"The accepted value pattern, for fields whose scalar has a strict shape (durations: `H:MM`, `M:SS`, or `H:MM:SS`)."},"subKeyOptions":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"Per-sub-key accepted tokens for keyed composites that constrain them (group selects). Addresses accept free text and carry no entry."},"subKeyReadIds":{"type":"object","additionalProperties":{"type":"string"},"description":"For keyed answers whose sub-answers surface as flat per-sub-key fields on booking reads (addresses): import sub-key → the field id it reads back under (e.g. `addressLineCity` → `addressCity`)."}},"required":["placement","answerShape"],"additionalProperties":false,"description":"How to express an answer for this field in an import payload, and how to find it again on booking reads.","example":{"placement":"participant","answerShape":"keyedValues","subKeys":["addressLine1","addressLine2","addressLineCity","addressLineCounty","addressLineCountry","addressLinePostcode"]}},"BookingFormFieldOption":{"title":"BookingFormFieldOption","type":"object","properties":{"id":{"type":"string","description":"The unique identifier of the option."},"label":{"type":"string","description":"The default label of the option."},"labelByLocale":{"type":"object","additionalProperties":{"type":"string"},"description":"Option label translated to multiple locales. Always includes the default label."}},"required":["id","label","labelByLocale"],"additionalProperties":false,"description":"A selectable option on a choice field (select, radio, or checkbox)."},"BookingFormFieldSummary":{"title":"BookingFormFieldSummary","type":"object","properties":{"id":{"type":"string","description":"The unique identifier of the field. Stable across the forms a field is used on. Use this as the `:id` when looking the field up."},"name":{"type":"string","description":"The default label of the field."},"publicId":{"type":"string","description":"A non-unique grouping key that correlates equivalent fields across forms and tickets. Informational only — not usable as a lookup `:id`."}},"required":["id","name"],"additionalProperties":false,"description":"A lean summary of a booking form field, returned in list contexts where the full field definition is unnecessary."},"BookingFormFieldType":{"title":"BookingFormFieldType","type":"string","enum":["TEXT","TEXT_AREA","EMAIL","PHONE_NUMBER","ADDRESS","DATE","DURATION","SELECT","GROUP_SELECT","RADIO_BUTTONS","CHECK_BOXES","WAIVER","CUSTOM_COMPONENT","CHARITY_MARKETING_OPT_INS","HTML"],"description":"The type of a booking form field, determining how it is rendered and what answer it collects."},"BookingFormImportField":{"title":"BookingFormImportField","type":"object","properties":{"id":{"type":"string","description":"The canonical id an import answer addresses this field by."},"name":{"type":"string","description":"The default label of the field."},"type":{"type":"string","description":"The type of the field."},"required":{"type":"boolean","description":"Whether this form requires an answer to import a booking."},"importContract":{"$ref":"#/components/schemas/BookingFormFieldImportContract"},"publicId":{"type":"string","description":"The field's non-unique public grouping key, when it has one."}},"required":["id","name","type","required","importContract"],"additionalProperties":false,"description":"One row of a booking form's import contract: a field the import payload can (or must) answer, with everything needed to construct the answer."},"BookingFormSummary":{"title":"BookingFormSummary","type":"object","properties":{"id":{"type":"string","description":"The unique identifier of the booking form."},"title":{"type":"string","description":"The title of the booking form."}},"required":["id","title"],"additionalProperties":false,"description":"A lean summary of a booking form, returned in list contexts where the full booking form payload is unnecessary."},"BookingImportAccepted":{"title":"BookingImportAccepted","type":"object","properties":{"jobId":{"type":"string","description":"The id of the queued import job."},"status":{"type":"string","enum":["queued"]}},"required":["jobId","status"],"additionalProperties":false,"description":"The accepted import job. Poll the job endpoint for progress and results."},"BookingImportErrorDetail":{"title":"BookingImportErrorDetail","type":"object","properties":{"code":{"type":"string"},"fieldId":{"type":"string"},"message":{"type":"string"},"participantIndex":{"type":"number","description":"The zero-based participant position, for participant-level errors."}},"required":["code","message"],"additionalProperties":false,"description":"One occurrence of a validation error, located."},"BookingImportErrorLocator":{"title":"BookingImportErrorLocator","type":"object","properties":{"externalBookingId":{"type":"string","description":"The `externalBookingId` of the offending row."},"rowIndex":{"type":"number","description":"The zero-based position of the offending row in `bookings`."},"participantIndex":{"type":"number","description":"The zero-based participant position, for participant-level errors."},"value":{"type":"string","description":"The offending submitted value, when one exists."}},"required":["rowIndex"],"additionalProperties":false,"description":"Where in the batch a validation error occurred."},"BookingImportErrorSummary":{"title":"BookingImportErrorSummary","type":"object","properties":{"code":{"type":"string"},"fieldId":{"type":"string","description":"The canonical import id the class relates to, when field-scoped."},"count":{"type":"number","description":"How many times this class occurred across the batch."},"message":{"type":"string","description":"A representative message for the class."},"examples":{"type":"array","items":{"$ref":"#/components/schemas/BookingImportErrorLocator"},"description":"The first few occurrences, located."}},"required":["code","count","message","examples"],"additionalProperties":false,"description":"One validation problem class, aggregated across the batch."},"BookingImportFieldAnswer":{"title":"BookingImportFieldAnswer","type":"object","properties":{"fieldId":{"type":"string","description":"The canonical import id of the field being answered."},"value":{"type":"string","description":"The answer for `value`-shaped fields."},"values":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The sub-key this entry answers, for keyed composites."},"value":{"type":"string"}},"required":["value"],"additionalProperties":false},"description":"The answer entries for `values`/`keyedValues`-shaped fields."}},"required":["fieldId"],"additionalProperties":false,"description":"One field answer in an import payload. Scalar fields carry `value`; list answers (checkbox) and keyed composites (address, group-select) carry `values`, where each entry's `id` is the sub-key for keyed composites and absent for checkbox items. The field's import contract (see the booking form fields endpoints) says which shape applies."},"BookingImportJobCounts":{"title":"BookingImportJobCounts","type":"object","properties":{"pending":{"type":"number"},"processing":{"type":"number"},"success":{"type":"number"},"failure":{"type":"number"},"cancelled":{"type":"number"},"total":{"type":"number"}},"required":["pending","processing","success","failure","cancelled","total"],"additionalProperties":false,"description":"Task-level progress counts for an import job."},"BookingImportJobStatus":{"title":"BookingImportJobStatus","type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string","enum":["queued","processing","completed","cancelled"]},"counts":{"$ref":"#/components/schemas/BookingImportJobCounts"},"results":{"type":"array","items":{"$ref":"#/components/schemas/BookingImportRowResult"}}},"required":["jobId","status","counts","results"],"additionalProperties":false,"description":"The state of an asynchronous booking import. `results` accumulates as the job's tasks complete, so a `processing` job reports the rows finished so far; poll until `status` is `completed`."},"BookingImportParticipant":{"title":"BookingImportParticipant","type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/BookingImportFieldAnswer"},"description":"The participant's form answers."}},"required":["fields"],"additionalProperties":false,"description":"One participant on an imported booking."},"BookingImportRequest":{"title":"BookingImportRequest","type":"object","properties":{"bookings":{"type":"array","items":{"$ref":"#/components/schemas/BookingImportRow"},"description":"The bookings to import.","minItems":1,"maxItems":1000}},"required":["bookings"],"additionalProperties":false,"description":"An asynchronous booking import request: the whole batch imports or none of it."},"BookingImportRow":{"title":"BookingImportRow","type":"object","properties":{"externalBookingId":{"type":"string","description":"The caller's stable id for this booking. Imports are create-once per idempotency scope: re-importing the same `externalBookingId` (without an `idempotencyKey`) returns the originally imported booking untouched, reported as `alreadyImported` — it does not update it."},"idempotencyKey":{"type":"string","description":"Optional caller-chosen idempotency scope, overriding the default `externalBookingId` scope. Supplying a fresh key allows importing corrected data for an `externalBookingId` that was already imported (e.g. after cancelling the original): the corrected row creates a new booking. The key is namespaced to your organizer and hashed server-side.","minLength":1,"maxLength":255},"ticketId":{"type":"string","description":"The ticket the booking is for."},"bookingFormId":{"type":"string","description":"The booking form to validate and import this row against — the same `:id` used to read the import contract (`GET /v0/booking-forms/:id/import-fields`). Optional when the ticket has exactly one live booking form (it is inferred); required when the ticket has several (`AMBIGUOUS_BOOKING_FORM` otherwise, listing the candidates). When supplied it must be a live form of the row's ticket (`UNKNOWN_BOOKING_FORM` otherwise) — a stale id is never silently ignored. Discover a ticket's forms via `GET /v0/tickets/:id/booking-forms`."},"bookedAt":{"$ref":"#/components/schemas/ISODate"},"participants":{"type":"array","items":{"$ref":"#/components/schemas/BookingImportParticipant"},"description":"The booking's participants.","minItems":1},"bookerFields":{"type":"array","items":{"$ref":"#/components/schemas/BookingImportFieldAnswer"},"description":"Booking-level booker answers (`booker.*` ids from the import contract). One booker per booking, alongside — not per — participant."}},"required":["externalBookingId","ticketId","participants"],"additionalProperties":false,"description":"One booking to import."},"BookingImportRowErrors":{"title":"BookingImportRowErrors","type":"object","properties":{"externalBookingId":{"type":"string","description":"The `externalBookingId` of the row."},"rowIndex":{"type":"number","description":"The zero-based position of the row in `bookings`."},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BookingImportErrorDetail"}}},"required":["rowIndex","errors"],"additionalProperties":false,"description":"The per-row detail of a failed validation, grouped by row."},"BookingImportRowResult":{"title":"BookingImportRowResult","type":"object","properties":{"externalBookingId":{"type":"string","description":"The caller's stable id for the row."},"bookingId":{"type":"string","description":"The created booking — or, for `alreadyImported`, the previously imported booking the row's idempotency scope matched."},"status":{"type":"string","enum":["succeeded","failed","alreadyImported"],"description":"`alreadyImported` means the row matched an existing import and nothing was applied; supply a fresh row `idempotencyKey` to import corrected data for the same `externalBookingId`."},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BookingImportErrorDetail"},"description":"Why the row failed; empty otherwise."}},"required":["externalBookingId","status","errors"],"additionalProperties":false,"description":"The outcome of one imported row, using the shared import error vocabulary."},"BookingImportValidationFailure":{"title":"BookingImportValidationFailure","type":"object","properties":{"error":{"type":"string","enum":["validation_failed"]},"message":{"type":"string","description":"A human summary of the failure."},"totalRows":{"type":"number","description":"How many rows the batch contained."},"rowsWithErrors":{"type":"number","description":"How many rows had at least one error."},"errorCount":{"type":"number","description":"How many errors were found in total."},"summary":{"type":"array","items":{"$ref":"#/components/schemas/BookingImportErrorSummary"}},"errors":{"type":"array","items":{"$ref":"#/components/schemas/BookingImportRowErrors"}},"truncated":{"type":"boolean","description":"Whether `errors` was capped. `summary` is never capped."}},"required":["error","message","totalRows","rowsWithErrors","errorCount","summary","errors","truncated"],"additionalProperties":false,"description":"The whole-batch validation failure: nothing was imported. `summary` is the load-bearing part — every error class, uncapped, ordered by frequency. `errors` carries capped per-row detail; `truncated` refers to `errors` only, never `summary`."},"BookingLineItem":{"title":"BookingLineItem","type":"object","properties":{"id":{"type":"string","description":"The unique identifier of the line item."},"amount":{"$ref":"#/components/schemas/Price"},"itemType":{"type":"string","description":"The line item's financial category."},"name":{"type":"string","description":"The line item's human-readable description."},"itemId":{"type":["string","null"],"description":"The associated booking item or product, if recorded."},"itemSelectionId":{"type":["string","null"],"description":"The associated booking item selection or variant, if recorded."},"participantId":{"type":["string","null"],"description":"The participant this line item belongs to, if recorded."},"externalLineItemId":{"type":"string","description":"The caller's identifier for this imported line item, if one was supplied."}},"required":["id","amount","itemType","name","itemId","itemSelectionId","participantId"],"additionalProperties":false,"description":"A slim financial line item belonging to a booking.\n\nInternal financial information is intentionally excluded."},"BookingLineItemsGroup":{"title":"BookingLineItemsGroup","type":"object","properties":{"bookingId":{"type":"string","description":"The LDT booking id. Supply exactly one booking identifier."},"externalBookingId":{"type":"string","description":"The caller's booking id from the booking import."},"lineItems":{"type":"array","items":{"$ref":"#/components/schemas/ImportLineItemInput"},"minItems":1,"maxItems":100}},"required":["lineItems"],"additionalProperties":false},"BookingSource":{"title":"BookingSource","type":"string","enum":["INTERNAL","EXTERNAL","API"],"description":"How this booking originated.\n- `INTERNAL` — booked through Let's Do This.\n- `EXTERNAL` — imported from a third-party platform.\n- `API` — imported by the organizer via the Public API."},"BookingStatus":{"title":"BookingStatus","type":"string","enum":["CONFIRMED","CANCELLED","WITHDRAWN","DEFERRED","PENDING","REFUNDED","REFUNDING","TO_BE_TRANSFERRED","TRANSFERRED_EVENTS","TRANSFERRED_TO_CREDIT","FAILED"],"description":"The booking status. This field will contain one of the following values:\n- CONFIRMED — The user has the application or registration fully confirmed.\n\nFor an application, this means the user is allowed to register for the event.\n\nFor a registration, this means the user has paid and is fully registered for the event.\n- CANCELLED — The booking has been cancelled.\n\nFor an application, this means the user is not allowed to register for the event.\n\nFor a registration, this indicates that the user's entry has been cancelled, and they should not be allowed to participate in the event.\n- WITHDRAWN — The user has withdrawn their application or registration.\n\nFor an application, this means the user is not allowed to register for the event.\n\nFor a registration, this indicates that the user has withdrawn their registration and should not be allowed to participate in the event.\n\n**Opt in with `?features=withdrawn_status`** to receive this value on a participant's status. Without the feature, a withdrawn participant is reported as `CANCELLED` for backwards compatibility. This gate applies only to participant status — a booking's own `status` always reports `WITHDRAWN`.\n- DEFERRED — The user has deferred their application or registration.\n\nThis is semantically equivalent to CANCELLED and WITHDRAWN, with the distinction that the user is allowed to register for the event in the future.\n- PENDING — The application or registration is not yet confirmed.\n\nFor an application, this means that manual approval or a ballot draw is pending to conclude the application's final status.\n\nFor a registration, this indicates that the registration process is not yet finalized. The user has been refunded for their registration.\n- REFUNDED — The user has been refunded for their registration.\n- REFUNDING — The user is in the process of being refunded for their registration.\n- TO_BE_TRANSFERRED — The user has requested a transfer of their registration, but the transfer has not yet been confirmed.\n- TRANSFERRED_EVENTS — The user has transferred their registration to another event.\n- TRANSFERRED_TO_CREDIT — The user has transferred their registration to credit on their account.\n- FAILED — The application was rejected (either manually or through ballot failure), as opposed to being cancelled by either the participant or the organizer, or withdrawn by the participant."},"BookingSummary":{"title":"BookingSummary","type":"object","properties":{"id":{"type":"string","description":"The unique identifier of the booking.","example":"6399c20015d60ae3ff28f24c"},"externalBookingId":{"type":"string","description":"The caller's own correlation id, present on bookings created through the import API.","example":"ORD-100234"},"status":{"$ref":"#/components/schemas/BookingStatus"},"source":{"$ref":"#/components/schemas/BookingSource"},"booker":{"anyOf":[{"$ref":"#/components/schemas/Booker"},{"type":"null"}],"description":"The booker — the person who made the booking."},"eventOccurrenceId":{"type":"string","description":"The event occurrence the booking belongs to.","example":"6399c11c58f29f001ca95935"},"ticketId":{"type":"string","description":"The ticket the booking was made against.","example":"6399c11c58f29f001ca95934"},"ticketSlug":{"type":"string","description":"The slug of the ticket the booking was made against.","example":"1106607777"},"bookingReference":{"type":"string","description":"A stable, human-readable booking reference.","example":"br_K9F3P7W2QX5T"},"createdAt":{"$ref":"#/components/schemas/ISODate"},"updatedAt":{"$ref":"#/components/schemas/ISODate"},"participantCount":{"type":"number","description":"The number of participants (entries) in the booking."}},"required":["id","status","booker","ticketId","createdAt","updatedAt","participantCount"],"additionalProperties":false,"description":"A lean booking summary, returned in list contexts where the full booking payload is unnecessary. Full detail is available via `GET /v0/bookings/{id}`."},"BookingType":{"title":"BookingType","type":"string","enum":["ENTRY","APPLICATION"]},"BulkImportLineItemsRequest":{"title":"BulkImportLineItemsRequest","type":"object","properties":{"transactionDate":{"$ref":"#/components/schemas/ISODate"},"bookings":{"type":"array","items":{"$ref":"#/components/schemas/BookingLineItemsGroup"},"minItems":1,"maxItems":1000}},"required":["bookings"],"additionalProperties":false,"description":"Bulk create of financial line items grouped by booking."},"BulkSyncImportLineItemsRequest":{"title":"BulkSyncImportLineItemsRequest","type":"object","properties":{"transactionDate":{"$ref":"#/components/schemas/ISODate"},"bookings":{"type":"array","items":{"$ref":"#/components/schemas/BookingLineItemsGroup"},"minItems":1,"maxItems":50}},"required":["bookings"],"additionalProperties":false,"description":"Internal synchronous bulk create of financial line items."},"BulkSyncImportLineItemsResponse":{"title":"BulkSyncImportLineItemsResponse","type":"object","properties":{"status":{"type":"string","enum":["completed"]},"results":{"type":"array","items":{"$ref":"#/components/schemas/LineItemImportJobResult"}}},"required":["status","results"],"additionalProperties":false,"description":"Completed rows from an internal synchronous bulk line-item import."},"BulkUpsertLineItemsRequest":{"title":"BulkUpsertLineItemsRequest","type":"object","properties":{"transactionDate":{"$ref":"#/components/schemas/ISODate"},"bookings":{"type":"array","items":{"$ref":"#/components/schemas/UpsertBookingLineItemsGroup"},"minItems":1,"maxItems":1000}},"required":["bookings"],"additionalProperties":false,"description":"Bulk full-replacement upsert of imported financial line items. Callers must resend each complete item; omitted optional fields are cleared."},"ByEventOccurrenceIdParam":{"title":"ByEventOccurrenceIdParam","type":"object","properties":{"id":{"type":"string","description":"The ID of the event occurrence to query by.","example":"12345678901"}},"required":["id"],"additionalProperties":false},"ByExternalBookingIdParam":{"title":"ByExternalBookingIdParam","type":"object","properties":{"externalBookingId":{"type":"string","description":"Your own external booking id — the correlation id supplied when the booking was created via the import API.","example":"partner-booking-00123"}},"required":["externalBookingId"],"additionalProperties":false},"ByIdParam":{"title":"ByIdParam","type":"object","properties":{"id":{"type":"string","description":"The ID of the resource to query by","example":"67123"}},"required":["id"],"additionalProperties":false},"CapacityReservationType":{"title":"CapacityReservationType","type":"string","enum":["WITHIN_CAPACITY","IGNORE_CAPACITY","DO_NOT_RESERVE","UNKNOWN"]},"ClaimLink":{"title":"ClaimLink","type":"object","properties":{"id":{"type":"string","description":"The ID of a claim link."},"link":{"type":"string","description":"Claim link URL."}},"required":["id"],"additionalProperties":false,"description":"A Claim link","example":{"link":"https://letsdothis.com/partner-claim-by-token?claimToken=9af2218cea7dbfdce4b"}},"ClaimLinkInput":{"title":"ClaimLinkInput","type":"object","properties":{"emailAddress":{"type":"string","description":"The email address where the generated link will be sent.","format":"email"},"reservedEntryId":{"type":"string","description":"Reserved entry ID."}},"additionalProperties":false,"description":"A Claim link input","example":{"emailAddress":"partner@letsdothis.com"}},"ContactMethod":{"title":"ContactMethod","type":"string","enum":["EMAIL","MAIL","SMS","PHONE"],"description":"The type of contact method the participant has opted in to receive. This field will contain one of the following values:\n- EMAIL — The participant has opted in to receive emails.\n- MAIL — The participant has opted in to receive physical mail.\n- SMS — The participant has opted in to receive SMS messages.\n- PHONE — The participant has opted in to receive phone calls."},"CreatePartnerRequest":{"title":"CreatePartnerRequest","type":"object","properties":{"name":{"type":"string","description":"The name of the partner.","minLength":1,"pattern":"^(\\S).+$"},"description":{"type":"string","description":"The description of the partner."},"externalIds":{"$ref":"#/components/schemas/PartnerExternalIds"},"type":{"$ref":"#/components/schemas/PartnerType"},"contacts":{"type":"array","items":{"$ref":"#/components/schemas/PartnerContact"},"description":"The contacts associated with this partner.","minItems":1},"defaultMarketing":{"$ref":"#/components/schemas/PartnerMarketing"},"specificMarketings":{"type":"array","items":{"$ref":"#/components/schemas/SpecificPartnerMarketing"},"description":"Event specific marketing informations associated with this partner."},"canCreateSubPartners":{"type":"boolean","description":"Whether this partner can create sub-partners."}},"required":["name","contacts"],"additionalProperties":false},"CreateReservedEntryGroupRequest":{"title":"CreateReservedEntryGroupRequest","type":"object","additionalProperties":false,"properties":{"tickets":{"type":"array","items":{"$ref":"#/components/schemas/ReservedEntryTicketInput"},"description":"Reserved entry settings for particular tickets.","minItems":1},"name":{"type":"string","description":"The name of the Reserved Entry group.","minLength":1,"pattern":"^(\\S).+$"},"partnerId":{"type":"string","description":"The LDT ID of the partner this Reserved Entry group should be assigned. If omitted, the entries can be managed by the organizer only."},"maxCapacity":{"type":"number","description":"The maximum number of entries that can be reserved in this group.","minimum":0},"description":{"type":"string","description":"The description of the Reserved Entry group."},"type":{"$ref":"#/components/schemas/ReservedEntryGroupType"},"settings":{"$ref":"#/components/schemas/ReservedEntryGroupSettings"}},"required":["maxCapacity","name","tickets","type"]},"CurrencyCode":{"title":"CurrencyCode","type":"string","enum":["AUD","CAD","EUR","GBP","INR","MXN","PHP","USD","ZERO"]},"DeferredStatusDetails":{"title":"DeferredStatusDetails","type":"object","properties":{"type":{"type":"string","enum":["DEFERRED"]},"reason":{"type":"string"},"year":{"type":"number"}},"required":["type"],"additionalProperties":false,"description":"A status detail indicating that the booking has been deferred.","example":{"type":"DEFERRED","reason":"Postpartum","year":2025}},"DistanceDisciplineValue":{"title":"DistanceDisciplineValue","type":"string","enum":["","RUN","BIKE","SWIM","HIKE"],"description":"Specifies the discipline configured for the race.","example":"RUN"},"DistanceUnit":{"title":"DistanceUnit","type":"string","enum":["KM","MI","M","YD","MIN"],"description":"Distance unit for race measurements.\n\nPossible values:\n- `KM` - Kilometers\n- `MI` - Miles\n- `M` - Meters\n- `YD` - Yards\n- `MIN` - Minutes (for time-based events)","example":"MI"},"DistanceUnitValue":{"title":"DistanceUnitValue","anyOf":[{"type":"string","enum":[""]},{"$ref":"#/components/schemas/DistanceUnit"}],"description":"Specifies the unit of distance configured for the race. Extends DistanceUnit to allow an empty string for unspecified values.","example":"KM"},"EventContent":{"title":"EventContent","type":"object","properties":{"excerpt":{"type":"string","description":"(Optional) HTML-formatted event description"},"courseDetails":{"type":"string","description":"(Optional) HTML-formatted course description"},"racedayLogistics":{"type":"string","description":"(Optional) HTML-formatted race day information"},"travel":{"type":"string","description":"(Optional) HTML-formatted travel information"},"spectators":{"type":"string","description":"(Optional) HTML-formatted spectator information"}},"additionalProperties":false},"EventImages":{"title":"EventImages","type":"object","properties":{"hero":{"type":"string","description":"(Optional) Hero image URL for the event"},"logo":{"type":"string","description":"(Optional) Event logo URL"},"all":{"type":"array","items":{"type":"string"},"description":"All other image URLs associated with the event (excluding the hero image and event logo)"}},"required":["all"],"additionalProperties":false},"EventLocation":{"title":"EventLocation","type":"object","properties":{"coordinates":{"type":"object","properties":{"latitude":{"type":"number","description":"The latitude in degrees. In the range [-90.0, +90.0]."},"longitude":{"type":"number","description":"The longitude in degrees. In the range [-180.0, +180.0]."}},"additionalProperties":false},"address":{"type":"object","properties":{"city":{"type":"string"},"formatted":{"type":"string"},"countryCode":{"type":"string"},"countryName":{"type":"string"},"addressLine1":{"type":"string"},"addressLine2":{"type":"string"},"countyLine":{"type":"string"},"postCode":{"type":"string"}},"additionalProperties":false}},"required":["address"],"additionalProperties":false,"description":"Event location","example":{"coordinates":{"latitude":50.8398169,"longitude":-0.1460002},"address":{"city":"Brighton","formatted":"Preston Park, Preston Rd, Brighton BN1 6SD, UK","countryCode":"GB","countryName":"United Kingdom","countyLine":"Brighton and Hove","postCode":"BN1 6SD"}}},"EventOccurrence":{"title":"EventOccurrence","type":"object","properties":{"id":{"type":"string","description":"Unique event occurrence identifier.","example":"12345678901"},"checkoutUrl":{"type":"string","description":"Link to the checkout flow for the event on Let's Do This","example":"https://www.letsdothis.com/gb/checkout/ticket?eventId=987654&occurrenceId=12345678901"},"title":{"type":"string","description":"Default event title. Use `titleByLocale` for available translations in different locales.","example":"Example Half Marathon 2026"},"titleByLocale":{"type":"object","additionalProperties":{"type":"string"},"description":"Event title translated to multiple locales.\n\nWill always include the default title, and may also specify translations in a number of other locales.","example":{"en-GB":"Example Half Marathon 2026","fr-FR":"Exemple Semi-Marathon 2026"}},"tags":{"type":"array","items":{"type":"string"},"description":"Categorization tags for the event","example":["flat","charity-run","closed-roads"]},"content":{"$ref":"#/components/schemas/EventContent"},"startDate":{"type":"string","description":"A plain date string representing the event's start date"},"location":{"$ref":"#/components/schemas/EventLocation"},"images":{"$ref":"#/components/schemas/EventImages"},"races":{"type":"array","items":{"$ref":"#/components/schemas/RaceSummary"}},"organizer":{"$ref":"#/components/schemas/Organizer"},"priceRange":{"$ref":"#/components/schemas/PriceRange"}},"required":["id","title","titleByLocale","tags","content","startDate","location","images","races","organizer","priceRange"],"additionalProperties":false},"EventOccurrencesQueryParams":{"title":"EventOccurrencesQueryParams","type":"object","properties":{"startDate[gte]":{"type":"string","description":"Minimum start date filter (inclusive) in YYYY-MM-DD format"},"startDate[lte]":{"type":"string","description":"Maximum start date filter (inclusive) in YYYY-MM-DD format"},"lastModified[gte]":{"type":"string","description":"Minimum last modified timestamp filter (inclusive) in ISO 8601 format"},"lastModified[lte]":{"type":"string","description":"Maximum last modified timestamp filter (inclusive) in ISO 8601 format"},"page[size]":{"type":"number","description":"The number of entries to return per page. Range between 1 - 500, defaults to 100."},"page[after]":{"type":"string","description":"Accepts an existing page cursor to return results after it. For more details see the definition of PageCursor in the response."},"page[before]":{"type":"string","description":"Accepts an existing page cursor to return results before it. For more details see the definition of PageCursor in the response."},"pageSize":{"type":"number","description":"Maximum number of results to return. Use `page[size]` instead.","deprecated":true},"cursor[before]":{"type":"string","description":"Cursor to paginate through results before a given value. Use `page[before]` instead.","deprecated":true},"cursor[after]":{"type":"string","description":"Cursor to paginate through results after a given value. Use `page[after]` instead.","deprecated":true}},"additionalProperties":false,"description":"Query parameters for the organizer-scoped event occurrences endpoint.\n\nMirrors  {@link  EventsQueryParams }  but omits `countryCode`: that parameter only shaped the marketplace `checkoutUrl`, which this endpoint does not return, so it would be a no-op here."},"EventOccurrencesResponse":{"$ref":"#/components/schemas/PagedOrganizerEventOccurrenceSummaries"},"EventOccurrencesSearchResult":{"title":"EventOccurrencesSearchResult","type":"object","properties":{"title":{"type":"string"},"location":{"type":"string"},"distances":{"type":"array","items":{"type":"string"}},"startDate":{"type":["string","null"]}},"required":["title","distances","startDate"],"additionalProperties":false},"EventsQueryParams":{"title":"EventsQueryParams","type":"object","properties":{"startDate[gte]":{"type":"string","description":"Minimum start date filter (inclusive) in YYYY-MM-DD format"},"startDate[lte]":{"type":"string","description":"Maximum start date filter (inclusive) in YYYY-MM-DD format"},"lastModified[gte]":{"type":"string","description":"Minimum last modified timestamp filter (inclusive) in ISO 8601 format"},"lastModified[lte]":{"type":"string","description":"Maximum last modified timestamp filter (inclusive) in ISO 8601 format"},"pageSize":{"type":"number","description":"Maximum number of results to return (1-200, default 10)"},"cursor[before]":{"type":"string","description":"Cursor to paginate through results before a given value"},"cursor[after]":{"type":"string","description":"Cursor to paginate through results after a given value"},"countryCode":{"type":"string","description":"(Optional) ISO-2 country code If supplied, it will be used to return a region specific checkout link. Defaults to \"gb\".","example":"us"}},"additionalProperties":false,"description":"Query parameters for filtering events."},"EventsResponse":{"title":"EventsResponse","type":"object","properties":{"events":{"type":"array","items":{"$ref":"#/components/schemas/EventOccurrence"}},"page":{"type":"object","properties":{"totalResults":{"type":"number"},"first":{"type":"string"},"last":{"type":"string"}},"required":["totalResults"],"additionalProperties":false}},"required":["events","page"],"additionalProperties":false},"ExtendedMetadata":{"title":"ExtendedMetadata","type":"object","properties":{"eventName":{"type":"string","description":"Event name.","example":"City Sprint Challenge"},"raceName":{"type":"string","description":"Race name."},"raceStartDate":{"$ref":"#/components/schemas/ISODate"},"sportId":{"type":"string","description":"Sport ID."},"distanceId":{"type":"string","description":"Distance ID."},"distances":{"type":"array","items":{"type":"object","properties":{"length":{"type":"number"},"discipline":{"$ref":"#/components/schemas/DistanceDisciplineValue"},"unit":{"$ref":"#/components/schemas/DistanceUnitValue"}},"required":["length"],"additionalProperties":false},"description":"Distances."},"disciplineLabel":{"type":"string","description":"Discipline label.","example":"Running"},"course":{"type":"object","properties":{"lapCount":{"type":"number"},"elevationGain":{"type":"number"},"isElevationGainAccurate":{"type":"boolean"}},"additionalProperties":false,"description":"Course details."},"eventLocation":{"$ref":"#/components/schemas/EventLocation"},"competitorSize":{"type":"number","description":"Estimated event size.","example":12293},"reservedEntryGroupCode":{"type":"string","description":"Reserved entry group code.","example":"re_x-ga8ais3v4r"},"reservedEntryGroupName":{"type":"string","description":"Reserved entry group name.","example":"Charity Entries"},"reservedEntryPartnerExternalIds":{"$ref":"#/components/schemas/PartnerExternalIds"},"reservedEntryPartnerName":{"type":"string","description":"Name of the partner who owns the reserved entry."}},"additionalProperties":false,"description":"If participants or applications are requested by setting the query parameter `extendMetadata=1`, the following fields will be included in the response."},"ExternalIdFilter":{"title":"ExternalIdFilter","type":"object","properties":{"externalId":{"$ref":"#/components/schemas/PartnerExternalIdType"}},"additionalProperties":false},"FailedLineItemImportResult":{"title":"FailedLineItemImportResult","type":"object","properties":{"externalLineItemId":{"type":"string"},"lineItemId":{"type":"string"},"status":{"type":"string","enum":["failed"]},"errors":{"type":"array","items":{"$ref":"#/components/schemas/LineItemImportError"}}},"required":["status","errors"],"additionalProperties":false},"Field":{"title":"Field","type":"object","properties":{"id":{"type":"string","description":"The unique ID for each booking field. Standard fields have predefined IDs (e.g., `firstName`, `lastName`, `email`, `dateOfBirth`, `phone`, `addressLine1`, `addressCity`, `addressPostcode`, `addressCountry`, `emergencyContactName`, `emergencyContactPhone`). Custom fields created by the organizer will have either organizer-defined IDs (publicId) or auto-generated IDs (e.g., `62bc55c4c94e90001eb4a96c`).","example":"dateOfBirth"},"name":{"type":"string","description":"The name of the booking field.","example":"Date of Birth"},"value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"The value provided by the booker for this booking field.","example":"1995-12-31"},"values":{"type":"array","items":{"$ref":"#/components/schemas/KeyValue"},"description":"The values provided by the booker for this booking field.","example":[{"key":"dateOfBirth","value":"1995-12-31"}]},"booleanValue":{"type":"boolean","description":"**Optional — opt in with `?features=boolean_value`.** Available when the `boolean_value` feature is enabled. See the \"Optional features\" section of the introduction.\n\nFor fields that capture agreement, confirmation, or yes/no answers, we attempt to parse the booker's value as a boolean for convenience.","example":true}},"required":["id","name","value"],"additionalProperties":false,"description":"A form field in the booking, most often containing answers to questions asked during booking. A field contains detailed information about the data provided by the booker.","example":[{"id":"firstName","name":"First Name","value":"john"},{"id":"lastName","name":"Last Name","value":"smith"},{"id":"email","name":"Email","value":"john.smith@example.com"},{"id":"dateOfBirth","name":"Date of Birth","value":"1995-12-31"},{"id":"phone","name":"Phone Number","value":"+447977123456"},{"id":"gender","name":"Gender","value":"Male"},{"id":"status","name":"Status","value":"CONFIRMED"},{"id":"addressLine1","name":"Address (Line 1)","value":"123 High Street"},{"id":"addressLine2","name":"Address (Line 2)","value":"Flat 4"},{"id":"addressCity","name":"Address (City)","value":"London"},{"id":"addressPostcode","name":"Address (Postcode)","value":"SW1A 1AA"},{"id":"addressCounty","name":"Address (County)","value":"Greater London"},{"id":"addressCountry","name":"Address (Country)","value":"United Kingdom"},{"id":"emergencyContactName","name":"Emergency Contact","value":"jane smith"},{"id":"emergencyContactPhone","name":"Emergency Phone","value":"+447977654321"},{"id":"62bc55c4c94e90001eb4a96c","name":"Do you belong to a running club?","value":"Yes"}]},"FlatRateDiscount":{"title":"FlatRateDiscount","type":"object","properties":{"type":{"type":"string","enum":["FLAT_RATE"]},"price":{"$ref":"#/components/schemas/Price"}},"required":["type","price"],"additionalProperties":false},"ImportAnswerShape":{"title":"ImportAnswerShape","type":"string","enum":["value","values","keyedValues"],"description":"The slot an import answer for this field uses."},"ImportFieldPlacement":{"title":"ImportFieldPlacement","type":"string","enum":["participant","booker"],"description":"Where an import answer for this field belongs in the import payload."},"ImportLineItemInput":{"title":"ImportLineItemInput","type":"object","properties":{"externalLineItemId":{"type":"string","description":"The caller's identifier for this line item, unique per organiser.","minLength":1,"maxLength":128},"itemType":{"$ref":"#/components/schemas/ImportLineItemType"},"amount":{"$ref":"#/components/schemas/Price"},"name":{"type":"string","description":"A human-readable description. Defaults from the item type when omitted.","maxLength":256},"transactionDate":{"$ref":"#/components/schemas/ISODate"},"participantId":{"type":"string","description":"The booking participant this item belongs to."},"itemId":{"type":"string","description":"The LDT ticket, product, add-on, or discount reference for this item.","maxLength":128},"itemSelectionId":{"type":"string","description":"The LDT variant or item-selection reference for this item.","maxLength":128}},"required":["itemType","amount"],"additionalProperties":false,"description":"A financial line item to import onto an existing booking."},"ImportLineItemsRequest":{"title":"ImportLineItemsRequest","type":"object","properties":{"transactionDate":{"$ref":"#/components/schemas/ISODate"},"lineItems":{"type":"array","items":{"$ref":"#/components/schemas/ImportLineItemInput"},"description":"The line items to import.","minItems":1,"maxItems":100}},"required":["lineItems"],"additionalProperties":false,"description":"A synchronous request to import financial line items onto one booking."},"ImportLineItemsResponse":{"title":"ImportLineItemsResponse","type":"object","properties":{"importId":{"type":"string"},"status":{"type":"string","enum":["completed"]},"results":{"type":"array","items":{"$ref":"#/components/schemas/LineItemImportResult"}}},"required":["importId","status","results"],"additionalProperties":false,"description":"The completed result of a synchronous booking line-item import."},"ImportLineItemType":{"title":"ImportLineItemType","type":"string","enum":["TICKET","BOOKING_FEE","DISCOUNT","CREDIT","BOOKING_ITEM","MERCH_BOOKING_ITEM_CLOTHING","MERCH_BOOKING_ITEM_ITAB","MERCH_BOOKING_ITEM_PARKING","MERCH_BOOKING_ITEM_MISC","DONATION","MISC"],"description":"The supported financial category for an imported line item."},"IncrementalStatus":{"title":"IncrementalStatus","type":"string","enum":["INCREMENTAL","NON_INCREMENTAL","PENDING","UNSPECIFIED","UNRECOGNIZED"]},"ISODate":{"title":"ISODate","type":"string","description":"Represents a date and time in ISO 8601 format as a string.\n\nThe string should follow the format `YYYY-MM-DDTHH:mm:ss.sssZ`, where:\n- `YYYY`: Four-digit year\n- `MM`: Two-digit month (01-12)\n- `DD`: Two-digit day of the month (01-31)\n- `T`: Delimiter indicating the start of the time component\n- `HH`: Two-digit hour in 24-hour format (00-23)\n- `mm`: Two-digit minutes (00-59)\n- `ss.sss`: Seconds with milliseconds (00.000-59.999)\n- `Z`: UTC timezone designator\n\n**Example:** To represent 11:30 AM on May 8th, 2026, the value would be: `\"2026-05-08T11:30:00.000Z\"`.","example":"2026-05-08T11:30:00.000Z"},"KeyValue":{"title":"KeyValue","type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"additionalProperties":false},"LineItem":{"title":"LineItem","type":"object","properties":{"addonCategory":{"type":["string","null"],"description":"The category of the add-on. This only applies to add-ons sold in the add-ons page in the checkout flow, not price-adjusting fields in the participant details page.","example":"Clothing"},"addonName":{"type":["string","null"],"description":"The name of the add-on. This only applies to add-ons sold in the add-ons page in the checkout flow, not price-adjusting fields in the participant details page.","example":"Sweatshirt"},"addonVariantName":{"type":["string","null"],"description":"Name of the add-on variant. A variant is a specific option of an add-on. For example, 'XL' may be a variant of a t-shirt. This only applies to add-ons sold in the add-ons page in the checkout flow, not price-adjusting fields in the participant details page.","example":"Women's X Large"},"amount":{"anyOf":[{"$ref":"#/components/schemas/PriceValue"},{"type":"null"}],"description":"Total value of the LineItem.","example":5000},"attributedLineItemId":{"type":["string","null"],"description":"The ID of the LineItem that this LineItem applies to. E.g., a discount may apply to a ticket or an add-on.","example":"dfe27034-85f5-4aac-8cf5-6d7024829679"},"attributedLineItemType":{"anyOf":[{"$ref":"#/components/schemas/AttributedLineItemType"},{"type":"null"}],"description":"The type of the LineItem that this LineItem applies to. E.g., a discount may apply to a ticket or an add-on. Discount codes can be applied to tickets, add-ons, booking fees and memberships."},"bookerEmailAddress":{"type":["string","null"],"description":"Email address of booker making the purchase. This will be empty if the LineItem is not created from a booking, e.g., for a standalone membership purchase.","format":"email"},"bookerName":{"type":["string","null"],"description":"Name of booker making the purchase.","example":"John Smith"},"bookingId":{"type":["string","null"],"description":"The unique identifier of the booking resulting in the registration. If the LineItem is not created from a booking, e.g., a standalone membership purchase, this will not be set."},"bookingType":{"anyOf":[{"$ref":"#/components/schemas/BookingType"},{"type":"null"}]},"currencyCode":{"anyOf":[{"$ref":"#/components/schemas/CurrencyCode"},{"type":"null"}]},"eventId":{"type":["string","null"],"description":"The unique identifier of the Event.","example":"2365756"},"eventOccurrenceId":{"type":["string","null"],"description":"The unique identifier of the event occurrence.","example":"234676543146"},"eventOccurrenceTitle":{"type":["string","null"],"description":"The name of the event occurrence."},"financialEntryId":{"type":["string","null"],"description":"Unique identifier for the financial entry. One financial entry is the equivalent of either:\n- basket purchase containing multiple line items,\n- a refund\n- an amendment to another financial data entry.\n\nTherefore, the booker name and incrementality will be consistent across all LineItems with the same unique identifier for the financial entry."},"id":{"type":"string"},"incrementalStatus":{"anyOf":[{"$ref":"#/components/schemas/IncrementalStatus"},{"type":"null"}],"description":"Identifies whether the booking was incremental (i.e., LDT driven) or non-incremental (i.e., EO driven). An incremental transaction comes through Let's Do This channels."},"isRefund":{"type":["boolean","null"],"description":"Returns true if the LineItem is a refund."},"ldtAmount":{"anyOf":[{"$ref":"#/components/schemas/PriceValue"},{"type":"null"}],"description":"Total amount paid to LDT (before tax), including commission and payment processing.","example":300},"lineItemName":{"type":["string","null"],"description":"The name of the LineItem providing detailed description of what was purchased.","example":"X Large T-shirt"},"itemId":{"type":["string","null"],"description":"The ID of associated booking item.","example":"1e2601e0-1f86-4276-9448-9c9810526ee1"},"itemSelectionId":{"type":["string","null"],"description":"The ID of associated booking item variant.","example":"37134b3f-29dc-49e6-9185-f0d4f2cbbc5a"},"lineItemType":{"anyOf":[{"$ref":"#/components/schemas/LineItemType"},{"type":"null"}]},"organizerAmount":{"anyOf":[{"$ref":"#/components/schemas/PriceValue"},{"type":"null"}],"description":"Total amount paid to organizer (before tax).","example":4700},"participantId":{"type":["string","null"]},"paymentCompletedAt":{"anyOf":[{"$ref":"#/components/schemas/ISODate"},{"type":"null"}],"description":"Date and time when the funds were transferred between LDT and the account receiving the payment. The account receiving the payment often belongs to the EO, but in some instances may belong to another third party (e.g., a charity)."},"paymentId":{"type":["string","null"],"description":"The Stripe payment ID for transactions that are paid into the receiving account from the LDT account."},"paymentReference":{"type":["string","null"],"description":"Unique identifier used by LDT which allows for tracking all LineItems back to a singular payment made. It is different from the Stripe payment reference but serves a similar purpose in practice."},"paymentRefundId":{"type":["string","null"],"description":"The Stripe ID when a payment is reversed (if applicable). A reversed payment includes refunds, failed payments (e.g., due to insufficient funds) or a payment dispute reversal."},"paymentStatus":{"anyOf":[{"$ref":"#/components/schemas/PaymentStatus"},{"type":"null"}],"description":"Payment status of the financial transaction. If the status is 'FUNDS_COMPLETE', it indicates that the funds have been successfully transferred to the respective parties involved."},"payoutId":{"type":["string","null"],"description":"Unique identifier for the payouts made from Stripe into the recipient bank account."},"quantity":{"type":["number","null"],"description":"Represents the number of LineItems sold.\n\n- For refunds, this value will be -1.\n- For financial data amendments, the value will be 0 to prevent double-counting.\n- For the 2nd+ installments of payment plan transactions, this will be 0,   to avoid counting the same LineItem multiple times.\n- For all other cases, the value will be +1.","example":1},"raceTitle":{"type":["string","null"],"description":"The name of the race this LineItem belongs to."},"raceId":{"type":["string","null"],"description":"Unique identifier of the race this LineItem belongs to."},"startlistEntryId":{"type":["string","null"],"description":"Startlist entry ID for the LineItem. Not all LineItems have an associated startlist entry ID."},"thirdPartyAmount":{"anyOf":[{"$ref":"#/components/schemas/PriceValue"},{"type":"null"}],"description":"Total amount paid to third parties (before tax).","example":0},"ticketId":{"type":["string","null"],"description":"The unique identifier for a ticket this LineItem belongs to."},"ticketSlug":{"type":["string","null"],"description":"The slug for a ticket this LineItem belongs to."},"ticketTitle":{"type":["string","null"],"description":"The name of the ticket this LineItem belongs to."},"transactionAt":{"anyOf":[{"$ref":"#/components/schemas/ISODate"},{"type":"null"}],"description":"Date and time at which the transaction occurred."},"createdAt":{"anyOf":[{"$ref":"#/components/schemas/ISODate"},{"type":"null"}],"description":"The time and date this LineItem was created."},"updatedAt":{"anyOf":[{"$ref":"#/components/schemas/ISODate"},{"type":"null"}],"description":"The time and date this LineItem was updated."}},"required":["addonCategory","addonName","addonVariantName","amount","attributedLineItemId","attributedLineItemType","bookerEmailAddress","bookerName","bookingId","bookingType","currencyCode","eventId","eventOccurrenceId","eventOccurrenceTitle","financialEntryId","id","incrementalStatus","isRefund","ldtAmount","lineItemName","itemId","itemSelectionId","lineItemType","organizerAmount","participantId","paymentCompletedAt","paymentId","paymentReference","paymentRefundId","paymentStatus","payoutId","quantity","raceTitle","raceId","startlistEntryId","thirdPartyAmount","ticketId","ticketSlug","ticketTitle","transactionAt","createdAt","updatedAt"],"additionalProperties":false},"LineItemImportAccepted":{"title":"LineItemImportAccepted","type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string","enum":["queued"]}},"required":["jobId","status"],"additionalProperties":false,"description":"A line-item import accepted for asynchronous validation and execution."},"LineItemImportError":{"title":"LineItemImportError","type":"object","properties":{"code":{"type":"string"},"fieldId":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"LineItemImportJobCounts":{"title":"LineItemImportJobCounts","type":"object","properties":{"pending":{"type":"number"},"processing":{"type":"number"},"success":{"type":"number"},"failure":{"type":"number"},"cancelled":{"type":"number"},"total":{"type":"number"}},"required":["pending","processing","success","failure","cancelled","total"],"additionalProperties":false},"LineItemImportJobParam":{"title":"LineItemImportJobParam","type":"object","properties":{"jobId":{"type":"string"}},"required":["jobId"],"additionalProperties":false},"LineItemImportJobResult":{"title":"LineItemImportJobResult","anyOf":[{"type":"object","additionalProperties":false,"properties":{"bookingId":{"type":"string","description":"The booking this asynchronous import result belongs to."},"externalLineItemId":{"type":"string"},"lineItemId":{"type":"string"},"status":{"type":"string","enum":["succeeded","alreadyImported"]},"outcome":{"type":"string","enum":["created","updated","unchanged","alreadyImported"]},"errors":{"type":"array","items":{"$ref":"#/components/schemas/LineItemImportError"}}},"required":["bookingId","errors","lineItemId","outcome","status"]},{"type":"object","additionalProperties":false,"properties":{"bookingId":{"type":"string","description":"The booking this asynchronous import result belongs to."},"externalLineItemId":{"type":"string"},"lineItemId":{"type":"string"},"status":{"type":"string","enum":["failed"]},"errors":{"type":"array","items":{"$ref":"#/components/schemas/LineItemImportError"}}},"required":["bookingId","errors","status"]}]},"LineItemImportJobStatus":{"title":"LineItemImportJobStatus","type":"string","enum":["queued","processing","completed","cancelled"]},"LineItemImportJobStatusResponse":{"title":"LineItemImportJobStatusResponse","type":"object","properties":{"jobId":{"type":"string"},"status":{"$ref":"#/components/schemas/LineItemImportJobStatus"},"counts":{"$ref":"#/components/schemas/LineItemImportJobCounts"},"results":{"type":"array","items":{"$ref":"#/components/schemas/LineItemImportJobResult"}}},"required":["jobId","status","counts","results"],"additionalProperties":false,"description":"Progress and completed row results for an asynchronous line-item import."},"LineItemImportResult":{"title":"LineItemImportResult","anyOf":[{"$ref":"#/components/schemas/SuccessfulLineItemImportResult"},{"$ref":"#/components/schemas/FailedLineItemImportResult"}]},"LineItemImportValidationDetail":{"title":"LineItemImportValidationDetail","type":"object","additionalProperties":false,"properties":{"code":{"type":"string"},"fieldId":{"type":"string"},"message":{"type":"string"},"bookingId":{"type":"string"},"externalBookingId":{"type":"string"},"groupIndex":{"type":"number"},"externalLineItemId":{"type":"string"},"rowIndex":{"type":"number"}},"required":["code","message"]},"LineItemImportValidationLocator":{"title":"LineItemImportValidationLocator","type":"object","properties":{"bookingId":{"type":"string"},"externalBookingId":{"type":"string"},"groupIndex":{"type":"number"},"externalLineItemId":{"type":"string"},"rowIndex":{"type":"number"}},"additionalProperties":false},"LineItemImportValidationResponse":{"title":"LineItemImportValidationResponse","type":"object","properties":{"error":{"type":"string","enum":["validation_failed"]},"message":{"type":"string"},"totalRows":{"type":"number"},"rowsWithErrors":{"type":"number"},"errorCount":{"type":"number"},"summary":{"type":"array","items":{"$ref":"#/components/schemas/LineItemImportValidationSummary"}},"errors":{"type":"array","items":{"$ref":"#/components/schemas/LineItemImportValidationDetail"}},"truncated":{"type":"boolean","description":"Whether the per-row errors were capped. The summary is never capped."}},"required":["error","message","totalRows","rowsWithErrors","errorCount","summary","errors","truncated"],"additionalProperties":false,"description":"A whole-request validation failure. Nothing was imported."},"LineItemImportValidationSummary":{"title":"LineItemImportValidationSummary","type":"object","additionalProperties":false,"properties":{"count":{"type":"number"},"examples":{"type":"array","items":{"$ref":"#/components/schemas/LineItemImportValidationLocator"}},"code":{"type":"string"},"fieldId":{"type":"string"},"message":{"type":"string"}},"required":["code","count","examples","message"]},"LineItemType":{"title":"LineItemType","type":"string","enum":["TICKET","ADD_ON","BOOKING_FEE","DISCOUNT","CREDIT","GIFT_CARD","REFUNDABLE_PURCHASE","MISC","PROXY_ADJUSTMENT","UNUSED_DISCOUNT_AMOUNT","DONATION","MEMBERSHIP"]},"Note":{"title":"Note","type":"object","properties":{"message":{"type":"string","description":"The note message content.","example":"Awaiting proof of charity status."},"createdAt":{"$ref":"#/components/schemas/ISODate"},"id":{"type":"string","description":"Unique identifier for the note, when available.","example":"note_123"},"noteType":{"type":"string","enum":["DEFAULT","ORGANISER_NOTE","CHARITY_NOTE"],"description":"The type of note, when available.\n- DEFAULT - General notes\n- ORGANISER_NOTE - Notes specific to organizers\n- CHARITY_NOTE - Notes specific to charity partners"},"updatedAt":{"$ref":"#/components/schemas/ISODate"}},"required":["message","createdAt"],"additionalProperties":false,"description":"A note attached to a record returned by the API. `message` and `createdAt` are always populated. The remaining fields are returned when available.","example":{"message":"Customer requested bib number change","createdAt":"2025-01-15T10:30:00.000Z","id":"note_123","noteType":"ORGANISER_NOTE","updatedAt":"2025-01-15T10:30:00.000Z"}},"Organizer":{"title":"Organizer","type":"object","properties":{"id":{"type":"string","description":"A unique identifier for this organizer","example":"987654321"},"title":{"type":"string","description":"The organizer's name","example":"Example Events Ltd"},"images":{"$ref":"#/components/schemas/OrganizerImages"},"website":{"type":"string","description":"(Optional) The organizer's website URL"}},"required":["id","title","images"],"additionalProperties":false},"OrganizerEventOccurrence":{"title":"OrganizerEventOccurrence","type":"object","properties":{"id":{"type":"string","description":"Unique event occurrence identifier.","example":"12345678901"},"title":{"type":"string","description":"Default event title. Use `titleByLocale` for available translations in different locales.","example":"Example Half Marathon 2026"},"titleByLocale":{"type":"object","additionalProperties":{"type":"string"},"description":"Event title translated to multiple locales.\n\nWill always include the default title, and may also specify translations in a number of other locales.","example":{"en-GB":"Example Half Marathon 2026","fr-FR":"Exemple Semi-Marathon 2026"}},"tags":{"type":"array","items":{"type":"string"},"description":"Categorization tags for the event","example":["flat","charity-run","closed-roads"]},"content":{"$ref":"#/components/schemas/EventContent"},"startDate":{"type":"string","description":"A plain date string representing the event's start date"},"location":{"$ref":"#/components/schemas/EventLocation"},"images":{"$ref":"#/components/schemas/EventImages"},"priceRange":{"$ref":"#/components/schemas/PriceRange"}},"required":["id","title","titleByLocale","tags","content","startDate","location","images","priceRange"],"additionalProperties":false,"description":"A single event occurrence owned by the organizer associated with your Public API credentials.\n\nUnlike the marketplace `EventOccurrence`, this omits the per-item `organizer` block: every occurrence returned by the organizer endpoint belongs to the calling organizer, so repeating it on each item adds no information."},"OrganizerEventOccurrenceSummary":{"title":"OrganizerEventOccurrenceSummary","type":"object","properties":{"id":{"type":"string","description":"Unique event occurrence identifier.","example":"12345678901"},"title":{"type":"string","description":"Default event title. Use `titleByLocale` for available translations in different locales.","example":"Example Half Marathon 2026"},"titleByLocale":{"type":"object","additionalProperties":{"type":"string"},"description":"Event title translated to multiple locales.\n\nWill always include the default title, and may also specify translations in a number of other locales.","example":{"en-GB":"Example Half Marathon 2026","fr-FR":"Exemple Semi-Marathon 2026"}},"tags":{"type":"array","items":{"type":"string"},"description":"Categorization tags for the event","example":["flat","charity-run","closed-roads"]},"content":{"$ref":"#/components/schemas/EventContent"},"startDate":{"type":"string","description":"A plain date string representing the event's start date"},"location":{"$ref":"#/components/schemas/EventLocation"},"images":{"$ref":"#/components/schemas/EventImages"},"priceRange":{"$ref":"#/components/schemas/PriceRange"}},"required":["id","title","titleByLocale","tags","content","startDate","location","images","priceRange"],"additionalProperties":false,"description":"A lean summary of an event occurrence, returned in list contexts where the full occurrence payload is unnecessary. Currently identical to `OrganizerEventOccurrence`; it exists to pin the list shape so the full occurrence (returned by `GET /v0/event-occurrences/:id`) can grow independently without widening the list response."},"OrganizerImages":{"title":"OrganizerImages","type":"object","properties":{"logoUrl":{"type":"string","description":"(Optional) Logo image URL"}},"additionalProperties":false},"PageCursor":{"title":"PageCursor","type":"object","properties":{"totalResults":{"type":"number","description":"The total number of results available."},"first":{"type":"string","description":"The cursor for the first page of results."},"last":{"type":"string","description":"The cursor for the last page of results."},"prev":{"type":"string","description":"The cursor for the previous page of results."},"next":{"type":"string","description":"The cursor for the next page of results."}},"required":["totalResults","first","last","prev","next"],"additionalProperties":false,"description":"**Cursor details for pagination**.\n- 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\".\n- Most API responses include two objects: a 'data' object with the query results, and a 'PageCursor' object detailing the current page.\n- 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.\n- Cursors are base64 encoded strings.","example":{"totalResults":506,"first":"eyJpZCI6IjYzOTljMjAwMTVkNjBhZTNmZjI4ZjI0YyIsInVwZGF0ZWRBdCI6IjIwMjItMTItMTRUMTI6MzA6NTkuMjE3WiJ9","last":"eyJpZCI6IjY1NGNkZDIxZDlhMTU3ODdiNzFkMTM0YSIsInVwZGF0ZWRBdCI6IjIwMjMtMTEtMTNUMTU6MTE6MTIuNzI0WiJ9","prev":"","next":"eyJpZCI6IjY0NzBkNTkwM2RjOWE5OWJhMTA0Y2ZhYiIsInVwZGF0ZWRBdCI6IjIwMjMtMTEtMTNUMTU6MTE6MTIuNjE4WiJ9"}},"PagedApplications":{"title":"PagedApplications","type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Application"}},"page":{"$ref":"#/components/schemas/PageCursor"}},"required":["data","page"],"additionalProperties":false,"description":"When requesting a list of applications, the response will be paginated. The data field will contain an array of **Application** objects, and the page field will contain a **PageCursor** object detailing the current page and cursors to navigate to earlier or later pages."},"PagedBookingFormFieldSummaries":{"title":"PagedBookingFormFieldSummaries","type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BookingFormFieldSummary"}},"page":{"$ref":"#/components/schemas/PageCursor"}},"required":["data","page"],"additionalProperties":false,"description":"When requesting a list of booking form fields, the response will be paginated. The data field will contain an array of\n**BookingFormFieldSummary** objects, and the page field will contain a\n**PageCursor** object detailing the current page and cursors to navigate to earlier or later pages."},"PagedBookingFormImportFields":{"title":"PagedBookingFormImportFields","type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BookingFormImportField"}},"page":{"$ref":"#/components/schemas/PageCursor"}},"required":["data","page"],"additionalProperties":false,"description":"When requesting a booking form's fields, the response is paginated. The data field contains **BookingFormImportField** objects — the form's full import contract, core fields included — and the page field contains a\n**PageCursor**."},"PagedBookingFormSummaries":{"title":"PagedBookingFormSummaries","type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BookingFormSummary"}},"page":{"$ref":"#/components/schemas/PageCursor"}},"required":["data","page"],"additionalProperties":false,"description":"When requesting a list of booking forms, the response will be paginated. The data field will contain an array of **BookingFormSummary** objects, and the page field will contain a **PageCursor** object detailing the current page and cursors to navigate to earlier or later pages."},"PagedBookingLineItems":{"title":"PagedBookingLineItems","type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BookingLineItem"}},"page":{"$ref":"#/components/schemas/PageCursor"}},"required":["data","page"],"additionalProperties":false,"description":"A paginated list of a booking's financial line items."},"PagedBookingSummaries":{"title":"PagedBookingSummaries","type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BookingSummary"}},"page":{"$ref":"#/components/schemas/PageCursor"}},"required":["data","page"],"additionalProperties":false,"description":"A paginated list of booking summaries."},"PagedEventOccurrences":{"title":"PagedEventOccurrences","type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EventOccurrencesSearchResult"}},"page":{"$ref":"#/components/schemas/PageCursor"}},"required":["data","page"],"additionalProperties":false},"PagedLineItems":{"title":"PagedLineItems","type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/LineItem"}},"page":{"$ref":"#/components/schemas/PageCursor"}},"required":["data","page"],"additionalProperties":false,"description":"When requesting a list of LineItems, the response will be paginated. The data field will contain an array of **LineItem** objects, and the page field will contain a **PageCursor** object detailing the current page and cursors to navigate to earlier or later pages."},"PagedOrganizerEventOccurrenceSummaries":{"title":"PagedOrganizerEventOccurrenceSummaries","type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OrganizerEventOccurrenceSummary"}},"page":{"$ref":"#/components/schemas/PageCursor"}},"required":["data","page"],"additionalProperties":false,"description":"A paginated list of an organizer's event occurrence summaries."},"PagedParticipants":{"title":"PagedParticipants","type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Participant"}},"page":{"$ref":"#/components/schemas/PageCursor"}},"required":["data","page"],"additionalProperties":false,"description":"When requesting a list of participants, the response will be paginated. The data field will contain an array of **Participant** objects, and the page field will contain a **PageCursor** object detailing the current page and cursors to navigate to earlier or later pages."},"PagedPartners":{"title":"PagedPartners","type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Partner"}},"page":{"$ref":"#/components/schemas/PageCursor"}},"required":["data","page"],"additionalProperties":false,"description":"A list of partners with pagination information."},"PagedRaceSummaries":{"title":"PagedRaceSummaries","type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RaceSummary"}},"page":{"$ref":"#/components/schemas/PageCursor"}},"required":["data","page"],"additionalProperties":false,"description":"A paginated list of race summaries for an event occurrence."},"PagedReservedEntryGroups":{"title":"PagedReservedEntryGroups","type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ReservedEntryGroup"}},"page":{"$ref":"#/components/schemas/PageCursor"}},"required":["data","page"],"additionalProperties":false,"description":"A paginated list of reserved entry groups for an event."},"PagedTickets":{"title":"PagedTickets","type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Ticket"}},"page":{"$ref":"#/components/schemas/PageCursor"}},"required":["data","page"],"additionalProperties":false,"description":"A paginated list of tickets."},"PagedTicketSummaries":{"title":"PagedTicketSummaries","type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TicketSummary"}},"page":{"$ref":"#/components/schemas/PageCursor"}},"required":["data","page"],"additionalProperties":false,"description":"When requesting a list of tickets, the response will be paginated. The data field will contain an array of **TicketSummary** objects, and the page field will contain a **PageCursor** object detailing the current page and cursors to navigate to earlier or later pages."},"Participant":{"title":"Participant","type":"object","additionalProperties":false,"properties":{"id":{"type":"string","description":"A unique identifier. IDs should be treated as opaque string values but are guaranteed to represent a single, unique entity within Let's Do This.","example":"6399c20015d60ae3ff28f24c"},"participantIndex":{"type":"number","description":"The index of this participant in the booking record. For example, if this participant is the first participant in the booking, this field will be 0.","example":0},"bookingId":{"type":"string","description":"The unique identifier for the booking this participant was booked via.","example":"6399c20015d60ae3ff28f24c"},"transactionId":{"type":["string","null"],"description":"The unique identifier for the transaction this booking was made via, if present.","example":"6399c20015d60ae3ff28f24e"},"eventOccurrenceId":{"type":"string","description":"The unique identifier for the occurrence of the Event for which this participant is attending.","example":"6399c11c58f29f001ca95935"},"eventId":{"type":"string","description":"The unique identifier of the Event.","example":"2365756"},"raceId":{"type":"string","description":"The unique identifier for the race this booking was made for.","example":"3517846101"},"ticketTitle":{"type":"string","description":"The title of the ticket booked by this participant.","example":"10k Standard Entry"},"ticketId":{"type":"string","description":"The unique identifier for the ticket this booking was made for.","example":"6399c11c58f29f001ca95934"},"createdAt":{"$ref":"#/components/schemas/ISODate"},"updatedAt":{"$ref":"#/components/schemas/ISODate"},"waves":{"type":"array","items":{"$ref":"#/components/schemas/Wave"},"description":"**Optional — opt in with `?features=waves`.** Available when the `waves` feature is enabled. See the \"Optional features\" section of the introduction.\n\nThe waves this participant is booked into, if applicable."},"fields":{"type":"array","items":{"$ref":"#/components/schemas/Field"},"description":"An array of Field objects containing participant data collected during booking. Includes standard fields (e.g., `firstName`, `lastName`, `email`, `dateOfBirth`, `phone`, `status`, address fields, emergency contact) and any custom fields defined by the organizer."},"booker":{"anyOf":[{"$ref":"#/components/schemas/Booker"},{"type":"null"}],"description":"Contact information for the person who made the booking, if the booking form was set up to allow a separate booker and participant. See Booker for more details."},"bookerType":{"anyOf":[{"$ref":"#/components/schemas/BookerType"},{"type":"null"}]},"originalTicketPrice":{"anyOf":[{"$ref":"#/components/schemas/Price"},{"type":"null"}],"description":"The original price for the ticket this participant booked. See Price for more details."},"incrementalStatus":{"$ref":"#/components/schemas/IncrementalStatus"},"bibNumber":{"type":["string","null"]},"bookingCodesUsed":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"}},"required":["code"],"additionalProperties":false},"description":"Any discount codes applied at booking.","example":{"code":"SPRINT10"}},"reservedEntryUrl":{"type":["string","null"],"description":"Reserved entry booking URL: included if granted to the application."},"partnerMarketingOptIns":{"type":"array","items":{"$ref":"#/components/schemas/PartnerMarketingOptIn"},"description":"Marketing opt-ins given by booker."},"tags":{"type":"array","items":{"type":"string"},"description":"**Optional — opt in with `?features=tags`.** Available when the `tags` feature is enabled. See the \"Optional features\" section of the introduction.\n\nTags attached to the application or participant.","example":["injured","deferral"]},"gdprRedacted":{"type":"boolean","description":"**Optional — opt in with `?features=gdpr_redacted`.** Available when the `gdpr_redacted` feature is enabled. See the \"Optional features\" section of the introduction.\n\nIndicated whether the participant data has been redacted due to a GDPR request."},"statusDetails":{"type":"array","items":{"$ref":"#/components/schemas/StatusDetails"},"description":"**Optional on participants — opt in with `?features=status_details`.** Applications include this field unconditionally; on participants it's available when the `status_details` feature is enabled. See the \"Optional features\" section of the introduction.\n\nStatus details of the booking."},"tracking":{"type":"object","properties":{"utmParams":{"$ref":"#/components/schemas/UtmParams"}},"additionalProperties":false,"description":"Digital marketing tracking parameters."},"applicationId":{"type":["string","null"],"description":"If the booking was generated via an application, the unique identifier for that application.","example":"6399c20015d60ae3ff28f24d"},"raceDayDetails":{"anyOf":[{"$ref":"#/components/schemas/RaceDayDetails"},{"type":"null"}],"description":"**Optional — opt in with `?features=race_day_details`.** Available when the `race_day_details` feature is enabled. See the \"Optional features\" section of the introduction.\n\nRace day additional details."},"resultSubmission":{"anyOf":[{"$ref":"#/components/schemas/ResultSubmission"},{"type":"null"}],"description":"**Optional — opt in with `?features=result_submissions`.** Available when the `result_submissions` feature is enabled. See the \"Optional features\" section of the introduction.\n\nResult submission details."},"team":{"anyOf":[{"$ref":"#/components/schemas/ParticipantTeam"},{"type":"null"}],"description":"**Optional — opt in with `?features=teams`.** Available when the `teams` feature is enabled. See the \"Optional features\" section of the introduction.\n\nTeam details."},"participantId":{"type":"string","description":"Participant ID.","example":"abed704b-76d0-4190-a0e7-95b1ec1e48fd"},"notes":{"type":"array","items":{"$ref":"#/components/schemas/Note"},"description":"Notes associated with this registration."},"bookingSource":{"$ref":"#/components/schemas/BookingSource"},"eventName":{"type":"string","description":"Event name.","example":"City Sprint Challenge"},"raceName":{"type":"string","description":"Race name."},"raceStartDate":{"$ref":"#/components/schemas/ISODate"},"sportId":{"type":"string","description":"Sport ID."},"distanceId":{"type":"string","description":"Distance ID."},"distances":{"type":"array","items":{"type":"object","properties":{"length":{"type":"number"},"discipline":{"$ref":"#/components/schemas/DistanceDisciplineValue"},"unit":{"$ref":"#/components/schemas/DistanceUnitValue"}},"required":["length"],"additionalProperties":false},"description":"Distances."},"disciplineLabel":{"type":"string","description":"Discipline label.","example":"Running"},"course":{"type":"object","properties":{"lapCount":{"type":"number"},"elevationGain":{"type":"number"},"isElevationGainAccurate":{"type":"boolean"}},"additionalProperties":false,"description":"Course details."},"eventLocation":{"$ref":"#/components/schemas/EventLocation"},"competitorSize":{"type":"number","description":"Estimated event size.","example":12293},"reservedEntryGroupCode":{"type":"string","description":"Reserved entry group code.","example":"re_x-ga8ais3v4r"},"reservedEntryGroupName":{"type":"string","description":"Reserved entry group name.","example":"Charity Entries"},"reservedEntryPartnerExternalIds":{"$ref":"#/components/schemas/PartnerExternalIds"},"reservedEntryPartnerName":{"type":"string","description":"Name of the partner who owns the reserved entry."}},"required":["bibNumber","booker","bookingCodesUsed","bookingId","createdAt","eventId","eventOccurrenceId","fields","id","incrementalStatus","notes","originalTicketPrice","participantId","participantIndex","raceId","ticketId","ticketTitle","transactionId","updatedAt"],"description":"A participant with optionally extended metadata. See **ExtendedMetadata** for more details."},"ParticipantTeam":{"title":"ParticipantTeam","type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the team."},"title":{"type":"string","description":"The title of the team."},"isCaptain":{"type":"boolean","description":"Indicates if the participant is the team captain."},"teamNumber":{"type":"number","description":"The number of the team."},"roles":{"type":"array","items":{"type":"string"},"description":"Descriptions of the roles assigned to this participant within the team, e.g. [\"Runner 1\"]. Empty when the team's program defines no roles, or none are assigned to this participant."}},"required":["id","title","isCaptain","roles"],"additionalProperties":false,"description":"Represents the team to which the participant belongs."},"Partner":{"title":"Partner","type":"object","properties":{"id":{"type":"string","description":"The unique ID of the partner."},"name":{"type":"string","description":"The name of the partner.","minLength":1,"pattern":"^(\\S).+$"},"description":{"type":"string","description":"The description of the partner."},"externalIds":{"$ref":"#/components/schemas/PartnerExternalIds"},"type":{"$ref":"#/components/schemas/PartnerType"},"contacts":{"type":"array","items":{"$ref":"#/components/schemas/PartnerContact"},"description":"The contacts associated with this partner.","minItems":1},"defaultMarketing":{"$ref":"#/components/schemas/PartnerMarketing"},"specificMarketings":{"type":"array","items":{"$ref":"#/components/schemas/SpecificPartnerMarketing"},"description":"Event specific marketing informations associated with this partner."},"canCreateSubPartners":{"type":"boolean","description":"Whether this partner can create sub-partners."},"createdAt":{"$ref":"#/components/schemas/ISODate"},"updatedAt":{"$ref":"#/components/schemas/ISODate"}},"required":["id","name","contacts"],"additionalProperties":false,"description":"A partner that was created under your organization, eg. a charity or a sponsor.","example":{"id":"p_v7k8jsvoj2o","name":"National Charity","description":"Donec faucibus augue non pretium pellentesque.","type":"CHARITY","externalIds":{"national":"natId123","enthuse":"enth456"},"contacts":[{"name":"John Doe","emailAddress":"jd@charity.com"}],"defaultMarketing":{"whyOptIn":"Lorem ipsum dolor","contactEmailAddress":"info@charity.com","emailMessage":"Nulla sed mi egestas, condimentum orci quis, pulvinar odio","emailCtaUrl":"http://charity.com/general/info"},"specificMarketings":[{"value":{"whyOptIn":"Lorem ipsum dolor","contactEmailAddress":"info@charity.com","emailMessage":"Phasellus laoreet, arcu scelerisque fringilla laoreet, eros ante consequat neque, eu vestibulum odio neque a magna.","emailCtaUrl":"http://charity.com/event/info"},"eventId":"213131"}],"canCreateSubPartners":false,"createdAt":"2023-10-14T11:30:00.000Z","updatedAt":"2024-09-14T11:30:00.000Z"}},"PartnerContact":{"title":"PartnerContact","type":"object","properties":{"name":{"type":"string","description":"Full name of the contact.","minLength":1,"pattern":"^(\\S).+$"},"emailAddress":{"type":"string","description":"Email address of the contact.","format":"email"}},"required":["name","emailAddress"],"additionalProperties":false,"description":"A contact from the Partner organization.","example":{"name":"John Doe","emailAddress":"jd@charity.com"}},"PartnerExternalIds":{"title":"PartnerExternalIds","type":"object","properties":{"national":{"type":"string"},"enthuse":{"type":"string"},"londonMarathon":{"type":"string"},"justGiving":{"type":"string"},"stripe":{"type":"string"},"givestar":{"type":"string"},"runForCharity":{"type":"string"},"goFundraise":{"type":"string"}},"additionalProperties":false,"description":"External IDs of the partner. These can be configured in the event's settings if needed."},"PartnerExternalIdType":{"title":"PartnerExternalIdType","type":"string","enum":["enthuse","justGiving","londonMarathon","runForCharity","givestar","goFundraise","givenGain"]},"PartnerMarketing":{"title":"PartnerMarketing","type":"object","properties":{"whyOptIn":{"type":"string","description":"The tagline that will be shown to users. We recommend no more than 50 characters to ensure it displays on smaller devices."},"emailMessage":{"type":"string","description":"This appears in the confirmation email sent to participants."},"emailCtaUrl":{"type":"string","description":"This link will be visible in the confirmation email."},"contactEmailAddress":{"type":"string","description":"The email address that participants can use to contact the Partner."}},"additionalProperties":false,"description":"Customize what participants see on the “Charity Opt-In” step on the registration form and on the charity marketing email."},"PartnerMarketingOptIn":{"title":"PartnerMarketingOptIn","type":"object","properties":{"partnerId":{"type":"string"},"partnerName":{"type":"string"},"contactMethods":{"type":"array","items":{"$ref":"#/components/schemas/ContactMethod"}}},"required":["partnerId","partnerName","contactMethods"],"additionalProperties":false,"description":"Partner marketing opt-in.","example":{"partnerId":"p_v7k8jsvoj2o","contactMethods":["EMAIL"],"partnerName":"Partner Name"}},"PartnerType":{"title":"PartnerType","type":"string","enum":["CHARITY","CORPORATE","FRIENDS_AND_FAMILY","MERCH_PARTNER","SPONSOR"]},"PaymentStatus":{"title":"PaymentStatus","type":"string","enum":["FUNDS_COMPLETE","READY","CANCELLED","REFUNDED"]},"PercentageDiscount":{"title":"PercentageDiscount","type":"object","properties":{"type":{"type":"string","enum":["PERCENTAGE"]},"amount":{"type":"number","description":"The percentage of the original price that should be subtracted. Eg. applying a 10% discount on a ticket with original price 30GBP will make the entries cost 27GBP."},"isAppliedToBookingFee":{"type":"boolean","description":"Whether the discount should be applied to the booking fee."}},"required":["type","amount","isAppliedToBookingFee"],"additionalProperties":false},"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\" }_\n\nAnd 5 cents are represented as: _{ \"value\": 5, \"currencyCode\": \"USD\" }_"},"PriceRange":{"title":"PriceRange","type":"object","properties":{"min":{"$ref":"#/components/schemas/Price"},"max":{"$ref":"#/components/schemas/Price"}},"additionalProperties":false},"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},"Race":{"title":"Race","type":"object","properties":{"id":{"type":"string","description":"A unique identifier for this race","example":"12345678902"},"title":{"type":"string","description":"The title for this race","example":"Half Marathon"},"discipline":{"$ref":"#/components/schemas/SportDiscipline"},"distance":{"$ref":"#/components/schemas/RaceDistance"},"startDate":{"type":"string","description":"(Optional) A plain date string representing the race's start date For races that do not have a confirmed start date, this field may be undefined.","example":"2026-10-04"},"startTime":{"type":"string","description":"(Optional) A plain time string representing the race's start time For races that do not have a confirmed start time, this field may be undefined.","example":"09:00:00"},"priceRange":{"$ref":"#/components/schemas/PriceRange"},"eventOccurrenceId":{"type":"string","description":"The unique identifier of the event occurrence this race belongs to.","example":"12345678901"},"eventId":{"type":"string","description":"The unique identifier of the event this race belongs to.","example":"2365756"}},"required":["id","title","distance","priceRange","eventOccurrenceId","eventId"],"additionalProperties":false,"description":"A race in an event.\n\nExamples:\n- A typical running event may specify two races: a 5K and a 10K.\n- Some events may specify races as groups of tickets that map to the same physical race, such as \"international\" and \"domestic\" races to group tickets for different types of participants."},"RaceDayDetails":{"title":"RaceDayDetails","type":"object","properties":{"checkedInAt":{"anyOf":[{"$ref":"#/components/schemas/ISODate"},{"type":"null"}]},"signedWaiverAt":{"anyOf":[{"$ref":"#/components/schemas/ISODate"},{"type":"null"}]},"fields":{"type":"array","items":{"$ref":"#/components/schemas/Field"}}},"required":["checkedInAt","signedWaiverAt","fields"],"additionalProperties":false,"description":"Race day details."},"RaceDistance":{"title":"RaceDistance","type":"object","properties":{"value":{"type":"number","description":"Distance value For poorly categorized races, this field may be undefined.","example":13.1},"unit":{"$ref":"#/components/schemas/DistanceUnit"}},"additionalProperties":false},"Races":{"$ref":"#/components/schemas/PagedRaceSummaries"},"RaceSummary":{"title":"RaceSummary","type":"object","properties":{"id":{"type":"string","description":"A unique identifier for this race","example":"12345678902"},"title":{"type":"string","description":"The title for this race","example":"Half Marathon"},"discipline":{"$ref":"#/components/schemas/SportDiscipline"},"distance":{"$ref":"#/components/schemas/RaceDistance"},"startDate":{"type":"string","description":"(Optional) A plain date string representing the race's start date For races that do not have a confirmed start date, this field may be undefined.","example":"2026-10-04"},"startTime":{"type":"string","description":"(Optional) A plain time string representing the race's start time For races that do not have a confirmed start time, this field may be undefined.","example":"09:00:00"},"priceRange":{"$ref":"#/components/schemas/PriceRange"}},"required":["id","title","distance","priceRange"],"additionalProperties":false,"description":"A lean summary of a race, returned in list contexts where the full race payload is unnecessary."},"ReservedEntryGroup":{"title":"ReservedEntryGroup","type":"object","properties":{"id":{"type":"string","description":"The unique ID of the Reserved Entry group."},"name":{"type":"string","description":"The name of the Reserved Entry group.","minLength":1,"pattern":"^(\\S).+$"},"eventId":{"type":"string","description":"The unique ID of the event this Reserved Entry group is for."},"eventOccurrenceId":{"type":"string","description":"The unique identifier for the occurrence of the Event, for which this participant is attending.","example":"6399c11c58f29f001ca95935"},"partnerId":{"type":"string","description":"The LDT ID of the partner this Reserved Entry group should be assigned. If omitted, the entries can be managed by the organizer only."},"partnerName":{"type":"string","description":"Name of the partner."},"maxCapacity":{"type":"number","description":"The maximum number of entries that can be reserved in this group.","minimum":0},"usedCapacity":{"type":"number","description":"The number of entries that have been used in this group.","minimum":0},"tickets":{"type":"array","items":{"$ref":"#/components/schemas/ReservedEntryTicket"},"description":"Reserved entry settings for particular tickets.","minItems":1},"description":{"type":"string","description":"The description of the Reserved Entry group."},"type":{"$ref":"#/components/schemas/ReservedEntryGroupType"},"settings":{"$ref":"#/components/schemas/ReservedEntryGroupSettings"},"createdAt":{"$ref":"#/components/schemas/ISODate"},"updatedAt":{"$ref":"#/components/schemas/ISODate"}},"required":["id","name","eventId","eventOccurrenceId","maxCapacity","usedCapacity","tickets","type"],"additionalProperties":false,"description":"Configuration for a Reserved Entry group.","example":{"id":"re_abcd6ss01x8","name":"Lorem ipsum","description":"Nulla sed mi egestas, condimentum orci quis, pulvinar odio.","eventId":"11120888","partnerId":"p_abcdiqh2oa4","maxCapacity":35,"usedCapacity":15,"tickets":[{"ticketSlug":"1106607777","maxCapacity":10,"discount":{"type":"FLAT_RATE","price":{"value":10,"currencyCode":"GBP"}},"startDateTime":"2024-01-08T11:30:00.000Z"},{"ticketSlug":"2206607777","discount":{"type":"PERCENTAGE","amount":10,"isAppliedToBookingFee":true}}],"type":"MULTI_USE","settings":{"canPartnerCancel":true,"reserveCapacity":"IGNORE_CAPACITY","reallocateOnCancel":true,"domainRestriction":"@letsdothis.com"}}},"ReservedEntryGroups":{"$ref":"#/components/schemas/PagedReservedEntryGroups"},"ReservedEntryGroupSettings":{"title":"ReservedEntryGroupSettings","type":"object","properties":{"reallocateOnCancel":{"type":"boolean","description":"If an entry is cancelled, should a replacement entry be created automatically."},"canPartnerCancel":{"type":"boolean","description":"Whether the partner can cancel an entry."},"reserveCapacity":{"$ref":"#/components/schemas/CapacityReservationType"},"domainRestriction":{"type":"string","description":"Can be used to restrict from which domain users can register.","example":"@letsdothis.com"}},"additionalProperties":false,"description":"The settings of the Reserved Entry group."},"ReservedEntryGroupType":{"title":"ReservedEntryGroupType","type":"string","enum":["MULTI_USE","SINGLE_USE","UNKNOWN"],"description":"The type of the Reserved Entry group.\n- MULTI_USE — Links are generic, so you can send one link to all of your participants.\n- SINGLE_USE — Links are tied to a specific person’s email address and can only be used once, meaning only the intended person can enter."},"ReservedEntryTicket":{"title":"ReservedEntryTicket","type":"object","properties":{"ticketSlug":{"type":"string","description":"The unique identifier for the ticket"},"ticketTitle":{"type":"string","description":"The title of the ticket"},"raceId":{"type":"string","description":"The unique identifier of the race this ticket belongs to"},"raceTitle":{"type":"string","description":"The title of the race"},"maxCapacity":{"type":"number","description":"Capacity per the individual ticket"},"discount":{"anyOf":[{"$ref":"#/components/schemas/FlatRateDiscount"},{"$ref":"#/components/schemas/PercentageDiscount"}],"description":"Whether participants should get any discount from the original ticket price"},"startDateTime":{"$ref":"#/components/schemas/ISODate"},"endDateTime":{"$ref":"#/components/schemas/ISODate"}},"required":["ticketSlug","ticketTitle","raceId","raceTitle"],"additionalProperties":false,"description":"Reserved entry settings for a particular ticket.","example":{"ticketSlug":"1106607270","maxCapacity":3,"discount":{"type":"FLAT_RATE","price":{"value":0,"currencyCode":"GBP"}},"startDateTime":"2024-01-08T11:30:00.000Z"}},"ReservedEntryTicketInput":{"title":"ReservedEntryTicketInput","type":"object","properties":{"ticketSlug":{"type":"string","description":"The unique identifier for the ticket"},"maxCapacity":{"type":"number","description":"Capacity per the individual ticket"},"discount":{"anyOf":[{"$ref":"#/components/schemas/FlatRateDiscount"},{"$ref":"#/components/schemas/PercentageDiscount"}],"description":"Whether participants should get any discount from the original ticket price"},"startDateTime":{"$ref":"#/components/schemas/ISODate"},"endDateTime":{"$ref":"#/components/schemas/ISODate"}},"required":["ticketSlug"],"additionalProperties":false},"ResultSubmission":{"title":"ResultSubmission","type":"object","properties":{"submittedAt":{"$ref":"#/components/schemas/ISODate"},"chipTime":{"type":["number","null"]},"verification":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/ResultVerification"}},{"type":"null"}]}},"required":["submittedAt","chipTime","verification"],"additionalProperties":false,"description":"Result submission"},"ResultVerification":{"title":"ResultVerification","type":"object","properties":{"value":{"type":"string"},"type":{"$ref":"#/components/schemas/ResultVerificationType"}},"required":["value","type"],"additionalProperties":false},"ResultVerificationType":{"title":"ResultVerificationType","type":"string","enum":["IMAGE","URL"]},"SpecificPartnerMarketing":{"title":"SpecificPartnerMarketing","type":"object","properties":{"value":{"$ref":"#/components/schemas/PartnerMarketing"},"eventId":{"type":"string","description":"The event ID this marketing configuration should apply to."}},"required":["eventId"],"additionalProperties":false,"description":"In case you want to use different marketing configuration for specific events. Will override the default configuration."},"SportDiscipline":{"title":"SportDiscipline","type":"string","enum":["RUNNING","ROAD_CYCLING","TRIATHLON","OBSTACLE","SWIMMING","MOUNTAIN_BIKING","DUATHLON","SWIMRUN","OTHER","ADVENTURE_RACE","AQUABIKE","AQUATHLON","BIATHLON","QUADRATHLON","ALPINE_SKIING","CLIMBING","CYCLOCROSS","CROSS_COUNTRY_SKIING","HIKING","HORSE_RIDING","KAYAKING","ORIENTEERING","ROWING","SUP","RUNCYCLE","BIKE_TOUR","OFFROAD_BIKING"]},"StatusDetails":{"title":"StatusDetails","anyOf":[{"$ref":"#/components/schemas/DeferredStatusDetails"},{"$ref":"#/components/schemas/WithdrawnStatusDetails"},{"$ref":"#/components/schemas/ApprovalStatusDetails"}],"description":"This field will contain one of the following values:\n- DEFERRED — The booking has been deferred.\n- WITHDRAWN — The booking has been withdrawn.\n- APPROVAL — The application approval/rejection details."},"SuccessfulLineItemImportResult":{"title":"SuccessfulLineItemImportResult","type":"object","properties":{"externalLineItemId":{"type":"string"},"lineItemId":{"type":"string"},"status":{"type":"string","enum":["succeeded","alreadyImported"]},"outcome":{"type":"string","enum":["created","updated","unchanged","alreadyImported"]},"errors":{"type":"array","items":{"$ref":"#/components/schemas/LineItemImportError"}}},"required":["lineItemId","status","outcome","errors"],"additionalProperties":false},"Ticket":{"title":"Ticket","type":"object","properties":{"id":{"type":"string","description":"A unique identifier for the ticket."},"title":{"type":"string","description":"The name of the ticket"},"titleByLocale":{"type":"object","additionalProperties":{"type":"string"},"description":"Ticket title translated to multiple locales.\n\nWill always include the default title, and may also specify translations in a number of other locales.","example":{"en-GB":"10k Standard Entry","fr-FR":"Entrée Standard 10k"}},"description":{"type":"string","description":"The description of the ticket"},"ticketSlug":{"type":"string","description":"The slug of the ticket — a stable public identifier"},"raceId":{"type":"string","description":"The unique identifier of the associated race"},"raceTitle":{"type":"string","description":"The name of the associated race"},"price":{"$ref":"#/components/schemas/Price"}},"required":["id","title","titleByLocale","ticketSlug","raceId","raceTitle","price"],"additionalProperties":false,"description":"A ticket that is associated to an event and race.","example":{"id":"1300915742","title":"10k Standard Entry","titleByLocale":{"en-GB":"10k Standard Entry","fr-FR":"Entrée Standard 10k"},"description":"Nulla sed mi egestas, condimentum orci quis, pulvinar odio.","ticketSlug":"1106607777","raceId":"11120888","raceTitle":"City Sprint Challenge","price":{"value":1000,"currencyCode":"GBP"}}},"Tickets":{"$ref":"#/components/schemas/PagedTickets"},"TicketSummary":{"title":"TicketSummary","type":"object","properties":{"id":{"type":"string","description":"A unique identifier for the ticket."},"title":{"type":"string","description":"The name of the ticket"}},"required":["id","title"],"additionalProperties":false,"description":"A lean summary of a ticket, returned in list contexts where the full ticket payload is unnecessary."},"UpdateParticipantRacedayRequest":{"title":"UpdateParticipantRacedayRequest","type":"object","properties":{"bibNumber":{"type":["string","null"],"description":"The bib number to assign to the participant. Set to null to unset the bib number. Optional to allow custom-fields-only updates.","example":"A1234"},"customFields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Internal field ID"},"value":{"type":["string","null"],"description":"Field value. Set to null to unset the field."}},"required":["id"],"additionalProperties":false},"description":"Custom race day fields to update. Each field must specify an id to identify the field.","example":[{"id":"field_123","text":{"value":"New value"}},{"id":"field_456","text":{"value":null}}]}},"additionalProperties":false,"description":"Request to update a participant's raceday fields.","example":{"bibNumber":"A1234","customFields":[{"id":"field_123","value":"New value"}]}},"UpdateParticipantRacedayResponse":{"title":"UpdateParticipantRacedayResponse","type":"object","properties":{"success":{"type":"boolean","description":"Indicates whether the update was successful"},"message":{"type":"string","description":"A message describing the result of the operation"}},"required":["success","message"],"additionalProperties":false,"description":"Response for updating a participant's raceday fields.","example":{"success":true,"message":"Participant raceday fields updated successfully"}},"UpdatePartnerRequest":{"title":"UpdatePartnerRequest","type":"object","properties":{"name":{"type":"string","description":"The name of the partner.","minLength":1,"pattern":"^(\\S).+$"},"description":{"type":"string","description":"The description of the partner."},"externalIds":{"$ref":"#/components/schemas/PartnerExternalIds"},"defaultMarketing":{"$ref":"#/components/schemas/PartnerMarketing"},"specificMarketings":{"type":"array","items":{"$ref":"#/components/schemas/SpecificPartnerMarketing"},"description":"Event specific marketing informations associated with this partner."},"canCreateSubPartners":{"type":"boolean","description":"Whether this partner can create sub-partners."}},"additionalProperties":false},"UpdateReservedEntryGroupRequest":{"title":"UpdateReservedEntryGroupRequest","type":"object","additionalProperties":false,"properties":{"settings":{"type":"object","properties":{"reallocateOnCancel":{"type":"boolean","description":"If an entry is cancelled, should a replacement entry be created automatically."},"canPartnerCancel":{"type":"boolean","description":"Whether the partner can cancel an entry."},"domainRestriction":{"type":"string","description":"Can be used to restrict from which domain users can register.","example":"@letsdothis.com"}},"additionalProperties":false,"description":"The settings of the Reserved Entry group."},"tickets":{"type":"array","items":{"$ref":"#/components/schemas/ReservedEntryTicketInput"},"description":"Reserved entry settings for particular tickets.","minItems":1},"name":{"type":"string","description":"The name of the Reserved Entry group.","minLength":1,"pattern":"^(\\S).+$"},"maxCapacity":{"type":"number","description":"The maximum number of entries that can be reserved in this group.","minimum":0},"description":{"type":"string","description":"The description of the Reserved Entry group."}}},"UpsertBookingLineItemsGroup":{"title":"UpsertBookingLineItemsGroup","type":"object","properties":{"bookingId":{"type":"string","description":"The LDT booking id. Supply exactly one booking identifier."},"externalBookingId":{"type":"string","description":"The caller's booking id from the booking import."},"lineItems":{"type":"array","items":{"$ref":"#/components/schemas/UpsertLineItemInput"},"description":"Complete replacement line items. Omitted optional fields are cleared.","minItems":1,"maxItems":100}},"required":["lineItems"],"additionalProperties":false},"UpsertLineItemInput":{"title":"UpsertLineItemInput","type":"object","additionalProperties":false,"properties":{"externalLineItemId":{"type":"string","description":"The caller's identifier for this line item, unique per organiser.","minLength":1,"maxLength":128},"itemType":{"$ref":"#/components/schemas/ImportLineItemType"},"amount":{"$ref":"#/components/schemas/Price"},"name":{"type":"string","description":"A human-readable description. Defaults from the item type when omitted.","maxLength":256},"transactionDate":{"$ref":"#/components/schemas/ISODate"},"participantId":{"type":"string","description":"The booking participant this item belongs to."},"itemId":{"type":"string","description":"The LDT ticket, product, add-on, or discount reference for this item.","maxLength":128},"itemSelectionId":{"type":"string","description":"The LDT variant or item-selection reference for this item.","maxLength":128},"lineItemId":{"type":"string","description":"The LDT identifier returned when the line item was imported.","minLength":1,"maxLength":128}},"required":["amount","itemType"],"description":"A financial line item to create or update on an existing booking. Matched items are replaced in full: omit an optional field to clear it. Only items previously created through the import API can be matched."},"UpsertLineItemsRequest":{"title":"UpsertLineItemsRequest","type":"object","properties":{"transactionDate":{"$ref":"#/components/schemas/ISODate"},"lineItems":{"type":"array","items":{"$ref":"#/components/schemas/UpsertLineItemInput"},"description":"The line items to create or update.","minItems":1,"maxItems":100}},"required":["lineItems"],"additionalProperties":false,"description":"A synchronous request to create or update imported financial line items."},"UtmParams":{"title":"UtmParams","type":"object","properties":{"utmSource":{"type":"string","description":"The source that referred the user.","example":"newsletter"},"utmMedium":{"type":"string","description":"The medium that referred the user.","example":"email"},"utmCampaign":{"type":"string","description":"The campaign that referred the user.","example":"bank-holiday"}},"additionalProperties":false,"description":"Specifies the UTM parameters associated with a booking or application."},"Wave":{"title":"Wave","type":"object","properties":{"id":{"type":"string","description":"The unique identifier for the Limited Booking Item that this wave is associated with."},"name":{"type":"string","description":"The wave question that was presented to the booker."},"optionName":{"type":"string","description":"The wave option that was selected by the booker."},"optionId":{"type":"string","description":"The unique identifier for the wave option that was selected by the booker. LEGACY (Non field options): This is also just the option name as older waves do not support field options"}},"required":["id","name","optionName","optionId"],"additionalProperties":false,"description":"If waves were enabled for the event, this field will contain the wave information selected by the booker."},"WithdrawnStatusDetails":{"title":"WithdrawnStatusDetails","type":"object","properties":{"type":{"type":"string","enum":["WITHDRAWN"]},"reason":{"type":"string"}},"required":["type","reason"],"additionalProperties":false,"description":"A status detail indicating that the booking has been withdrawn.","example":{"type":"WITHDRAWN","reason":"Injured"}}}},"paths":{"/v0/participants":{"get":{"summary":"Get participants","tags":["Participant"],"description":"Returns all participants that you have access to","parameters":[{"schema":{"type":"number","minimum":1,"maximum":500,"nullable":true,"example":100},"in":"query","name":"page[size]","required":false,"description":"The number of entries to return per page. Range between 1 - 500, defaults to 100"},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[after]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[before]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","enum":[1,-1],"nullable":true,"example":1},"in":"query","name":"sort[updatedAt]","required":false,"description":"Sort by update date. 1 for ascending, -1 for descending."},{"schema":{"type":"string","enum":[1,-1],"nullable":true,"example":1},"in":"query","name":"sort[createdAt]","required":false,"description":"Sort by creation date. 1 for ascending, -1 for descending."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"createdAt[after]","required":false,"description":"Only return entries created after this date."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"createdAt[before]","required":false,"description":"Only return entries created before this date."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"updatedAt[after]","required":false,"description":"Only return entries updated after this date."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"updatedAt[before]","required":false,"description":"Only return entries updated before this date."},{"schema":{"type":"boolean","nullable":true},"in":"query","name":"extendMetadata","required":false,"description":"If set to true, all available metadata is returned."},{"schema":{"type":"string","nullable":true,"example":"tags,waves"},"in":"query","name":"features","required":false,"description":"A comma-separated list of optional features to enable for the request. Each feature extends the response with additional fields or behaviors.\n\n- `tags` — Exposes operational tags (e.g. `\"injured\"`, `\"deferral\"`) on each entry, enabling filtering and segmentation in consuming systems.\n- `gdpr_redacted` — Indicates whether an entry has been redacted following a GDPR request, so consuming systems can suppress it accordingly.\n- `boolean_value` — Provides a parsed boolean representation of agreement, confirmation, and yes/no answers on `Field` entries, removing the need for client-side string normalization.\n- `withdrawn_status` — Returns the distinct `\"WITHDRAWN\"` status. When the feature is disabled, withdrawn entries are reported as `\"CANCELLED\"` for backwards compatibility.\n- `status_details` — Includes reasons and timestamps for status changes (deferrals, withdrawals, approval decisions), supporting audit trails and operational tooling.\n- `race_day_details` — Includes check-in time, waiver-signature time, and custom race-day fields.\n- `result_submissions` — Includes self-reported finish times (chip time and verification artifacts).\n- `teams` — Includes team membership, captain status, and team number, for team-based events.\n- `waves` — Includes start-wave assignments, for events that split the field into staggered starts."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedParticipants"}}}}}}},"/v0/participants/{id}":{"get":{"summary":"Get a participant by ID","tags":["Participant"],"description":"Returns a participant by ID if you have access to it","parameters":[{"schema":{"type":"boolean","nullable":true},"in":"query","name":"extendMetadata","required":false,"description":"If set to true, all available metadata is returned."},{"schema":{"type":"string","nullable":true,"example":"tags,waves"},"in":"query","name":"features","required":false,"description":"A comma-separated list of optional features to enable for the request. Each feature extends the response with additional fields or behaviors.\n\n- `tags` — Exposes operational tags (e.g. `\"injured\"`, `\"deferral\"`) on each entry, enabling filtering and segmentation in consuming systems.\n- `gdpr_redacted` — Indicates whether an entry has been redacted following a GDPR request, so consuming systems can suppress it accordingly.\n- `boolean_value` — Provides a parsed boolean representation of agreement, confirmation, and yes/no answers on `Field` entries, removing the need for client-side string normalization.\n- `withdrawn_status` — Returns the distinct `\"WITHDRAWN\"` status. When the feature is disabled, withdrawn entries are reported as `\"CANCELLED\"` for backwards compatibility.\n- `status_details` — Includes reasons and timestamps for status changes (deferrals, withdrawals, approval decisions), supporting audit trails and operational tooling.\n- `race_day_details` — Includes check-in time, waiver-signature time, and custom race-day fields.\n- `result_submissions` — Includes self-reported finish times (chip time and verification artifacts).\n- `teams` — Includes team membership, captain status, and team number, for team-based events.\n- `waves` — Includes start-wave assignments, for events that split the field into staggered starts."},{"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/Participant"}}}},"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"}}}}}}}}},"/v0/participants/{id}/raceday":{"patch":{"summary":"Update participant raceday fields","tags":["Participant"],"description":"Updates a participant's bib number and race day custom fields. Note: Updates are processed asynchronously and may take a few moments to reflect in participant data.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateParticipantRacedayRequest"}}}},"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/UpdateParticipantRacedayResponse"}}}},"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"}}}}}}}}},"/v0/races/{id}":{"get":{"summary":"Get a race by ID","tags":["Races"],"description":"Returns a single race by ID if it belongs to the organizer associated with your Public API credentials.","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/Race"}}}},"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"}}}}}}}}},"/v0/races/{id}/participants":{"get":{"summary":"Get participants by a race","tags":["Participant"],"description":"Returns all participants associated with a race","parameters":[{"schema":{"type":"string","nullable":true,"example":"1353673654"},"in":"query","name":"eventOccurrenceId","required":false,"description":"A search query to filter race participants by event occurrence id."},{"schema":{"type":"number","minimum":1,"maximum":500,"nullable":true,"example":100},"in":"query","name":"page[size]","required":false,"description":"The number of entries to return per page. Range between 1 - 500, defaults to 100"},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[after]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[before]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","enum":[1,-1],"nullable":true,"example":1},"in":"query","name":"sort[updatedAt]","required":false,"description":"Sort by update date. 1 for ascending, -1 for descending."},{"schema":{"type":"string","enum":[1,-1],"nullable":true,"example":1},"in":"query","name":"sort[createdAt]","required":false,"description":"Sort by creation date. 1 for ascending, -1 for descending."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"createdAt[after]","required":false,"description":"Only return entries created after this date."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"createdAt[before]","required":false,"description":"Only return entries created before this date."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"updatedAt[after]","required":false,"description":"Only return entries updated after this date."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"updatedAt[before]","required":false,"description":"Only return entries updated before this date."},{"schema":{"type":"boolean","nullable":true},"in":"query","name":"extendMetadata","required":false,"description":"If set to true, all available metadata is returned."},{"schema":{"type":"string","nullable":true,"example":"tags,waves"},"in":"query","name":"features","required":false,"description":"A comma-separated list of optional features to enable for the request. Each feature extends the response with additional fields or behaviors.\n\n- `tags` — Exposes operational tags (e.g. `\"injured\"`, `\"deferral\"`) on each entry, enabling filtering and segmentation in consuming systems.\n- `gdpr_redacted` — Indicates whether an entry has been redacted following a GDPR request, so consuming systems can suppress it accordingly.\n- `boolean_value` — Provides a parsed boolean representation of agreement, confirmation, and yes/no answers on `Field` entries, removing the need for client-side string normalization.\n- `withdrawn_status` — Returns the distinct `\"WITHDRAWN\"` status. When the feature is disabled, withdrawn entries are reported as `\"CANCELLED\"` for backwards compatibility.\n- `status_details` — Includes reasons and timestamps for status changes (deferrals, withdrawals, approval decisions), supporting audit trails and operational tooling.\n- `race_day_details` — Includes check-in time, waiver-signature time, and custom race-day fields.\n- `result_submissions` — Includes self-reported finish times (chip time and verification artifacts).\n- `teams` — Includes team membership, captain status, and team number, for team-based events.\n- `waves` — Includes start-wave assignments, for events that split the field into staggered starts."},{"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/PagedParticipants"}}}}}}},"/v0/races/{id}/tickets":{"get":{"summary":"Get tickets by a race","tags":["Tickets"],"description":"Returns a paginated list of tickets belonging to a given race. Results are scoped to the organizer associated with your Public API credentials.","parameters":[{"schema":{"type":"number","minimum":1,"maximum":500,"nullable":true,"example":100},"in":"query","name":"page[size]","required":false,"description":"The number of entries to return per page. Range between 1 - 500, defaults to 100"},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[after]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[before]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"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/PagedTicketSummaries"}}}},"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"}}}}}}}}},"/v0/tickets/{id}":{"get":{"summary":"Get a ticket by ID","tags":["Tickets"],"description":"Returns a single ticket by ID if it belongs to the organizer associated with your Public API credentials.","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/Ticket"}}}},"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"}}}}}}}}},"/v0/tickets/{id}/booking-forms":{"get":{"summary":"Get booking forms by a ticket","tags":["BookingForms"],"description":"Returns a paginated list of the booking forms a given ticket appears in. Results are scoped to the organizer associated with your Public API credentials.","parameters":[{"schema":{"type":"number","minimum":1,"maximum":500,"nullable":true,"example":100},"in":"query","name":"page[size]","required":false,"description":"The number of entries to return per page. Range between 1 - 500, defaults to 100"},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[after]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[before]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"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/PagedBookingFormSummaries"}}}},"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"}}}}}}}}},"/v0/booking-forms/{id}":{"get":{"summary":"Get a booking form by ID","tags":["BookingForms"],"description":"Returns a single booking form by ID if it belongs to the organizer associated with your Public API credentials.","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/BookingForm"}}}},"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"}}}}}}}}},"/v0/booking-forms/{id}/tickets":{"get":{"summary":"Get tickets by a booking form","tags":["BookingForms"],"description":"Returns a paginated list of the tickets that use a given booking form. Results are scoped to the organizer associated with your Public API credentials.","parameters":[{"schema":{"type":"number","minimum":1,"maximum":500,"nullable":true,"example":100},"in":"query","name":"page[size]","required":false,"description":"The number of entries to return per page. Range between 1 - 500, defaults to 100"},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[after]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[before]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"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/PagedTicketSummaries"}}}},"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"}}}}}}}}},"/v0/booking-forms/{id}/fields":{"get":{"summary":"Get fields by a booking form","tags":["BookingFormFields"],"description":"Returns a paginated list of the fields used by a given booking form. Results are scoped to the organizer associated with your Public API credentials.","parameters":[{"schema":{"type":"number","minimum":1,"maximum":500,"nullable":true,"example":100},"in":"query","name":"page[size]","required":false,"description":"The number of entries to return per page. Range between 1 - 500, defaults to 100"},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[after]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[before]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"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/PagedBookingFormFieldSummaries"}}}},"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"}}}}}}}}},"/v0/booking-forms/{id}/import-fields":{"get":{"summary":"Get a booking form's import contract","tags":["BookingFormFields"],"description":"Returns everything a `POST /v0/bookings/import` payload can address for this form: core fields with the form's requiredness, the ticket's custom questions, and the booking-level booker fields. Each row carries the import contract — where the answer belongs, its shape, sub-keys for keyed answers, and the exact option tokens accepted by import validation. Results are scoped to the organizer associated with your Public API credentials.","parameters":[{"schema":{"type":"number","minimum":1,"maximum":500,"nullable":true,"example":100},"in":"query","name":"page[size]","required":false,"description":"The number of entries to return per page. Range between 1 - 500, defaults to 100"},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[after]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[before]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"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/PagedBookingFormImportFields"}}}},"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"}}}}}}}}},"/v0/bookings":{"get":{"summary":"List bookings","tags":["Bookings"],"description":"Returns a paginated list of the organizer's bookings. Filter by `source`, `status`, or `externalBookingId` — for example to verify an import.","parameters":[{"schema":{"type":"number","minimum":1,"maximum":500,"nullable":true,"example":100},"in":"query","name":"page[size]","required":false,"description":"The number of entries to return per page. Range between 1 - 500, defaults to 100"},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[after]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[before]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","enum":["INTERNAL","EXTERNAL","API"]},"in":"query","name":"source","required":false,"description":"Filter to bookings with the given source (`INTERNAL`, `EXTERNAL`, or `API`)."},{"schema":{"type":"string","enum":["CONFIRMED","CANCELLED","WITHDRAWN","DEFERRED","PENDING","REFUNDED","REFUNDING","TO_BE_TRANSFERRED","TRANSFERRED_EVENTS","TRANSFERRED_TO_CREDIT","FAILED"]},"in":"query","name":"status","required":false,"description":"Filter to bookings with the given status."},{"schema":{"type":"string","nullable":true},"in":"query","name":"externalBookingId","required":false,"description":"Filter to the booking with your given external booking id."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedBookingSummaries"}}}}}}},"/v0/bookings/import":{"post":{"summary":"Import bookings (experimental)","tags":["Bookings"],"description":"**Experimental:** This endpoint is subject to change while the import API is being piloted. Asynchronously imports a batch of bookings. The whole batch is validated synchronously against each ticket's booking form — use the booking form fields endpoints to discover the import contract — and either every row is accepted (202 with a job to poll) or nothing is imported (422 with every problem, aggregated by error class). Imports are create-once: re-importing an `externalBookingId` returns the original booking (reported as `alreadyImported`) — supply a fresh row `idempotencyKey` to import corrected data for the same id. Send an `Idempotency-Key` header to make the submission replayable: retrying the same key and body returns the original job; reusing a key with a different body is rejected (409). A row may pin the booking form it validates against via `bookingFormId`; the pin is required (`AMBIGUOUS_BOOKING_FORM`) when the ticket has more than one live form, and a supplied pin must be a live form of the row's ticket (`UNKNOWN_BOOKING_FORM`).","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingImportRequest"}}}},"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingImportAccepted"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"description":"Bad request","type":"object","properties":{"statusCode":{"type":"number","enum":[400]},"error":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"description":"Conflict","type":"object","properties":{"statusCode":{"type":"number","enum":[409]},"error":{"type":"string"},"message":{"type":"string"}}}}}},"413":{"description":"Payload too large","content":{"application/json":{"schema":{"description":"Payload too large","type":"object","properties":{"statusCode":{"type":"number","enum":[413]},"error":{"type":"string"},"message":{"type":"string"}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingImportValidationFailure"}}}}}}},"/v0/bookings/import/{jobId}":{"get":{"summary":"Get import job status (experimental)","tags":["Bookings"],"description":"**Experimental:** This endpoint is subject to change while the import API is being piloted. Returns the progress of an asynchronous booking import and the per-row outcomes recorded so far. Poll until `status` is `completed`, then read `results` for each row — failures carry the same error vocabulary as the submit-time validation response. To resolve a single row later, use the external-booking-id lookup endpoint.","parameters":[{"schema":{"type":"string"},"in":"path","name":"jobId","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingImportJobStatus"}}}}}}},"/v0/bookings/{id}":{"get":{"summary":"Get a booking by ID","tags":["Bookings"],"description":"Returns a single booking by ID if it belongs to the organizer associated with your Public API credentials.","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/Booking"}}}},"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"}}}}}}}}},"/v0/bookings/{id}/line-items":{"get":{"summary":"Get a booking's line items","tags":["Bookings"],"description":"Returns a paginated list of the booking's financial line items.","parameters":[{"schema":{"type":"number","minimum":1,"maximum":500,"nullable":true,"example":100},"in":"query","name":"page[size]","required":false,"description":"The number of entries to return per page. Range between 1 - 500, defaults to 100"},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[after]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[before]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"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/PagedBookingLineItems"}}}},"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"}}}}}}}}},"/v0/bookings/{id}/participants":{"get":{"summary":"Get a booking's participants","tags":["Bookings"],"description":"Returns a paginated list of the booking's participants (entries), if the booking belongs to the organizer associated with your Public API credentials.","parameters":[{"schema":{"type":"number","minimum":1,"maximum":500,"nullable":true,"example":100},"in":"query","name":"page[size]","required":false,"description":"The number of entries to return per page. Range between 1 - 500, defaults to 100"},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[after]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[before]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"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/PagedParticipants"}}}},"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"}}}}}}}}},"/v0/bookings/external/{externalBookingId}":{"get":{"summary":"Get a booking by your external booking ID","tags":["Bookings"],"description":"Resolves a booking by the external id you supplied when importing it, scoped to the organizer associated with your Public API credentials. When several bookings share the external id (an original plus a corrected re-import), the most recently created active booking wins; if every match is cancelled, the most recent of those is returned.","parameters":[{"schema":{"type":"string"},"example":"partner-booking-00123","in":"path","name":"externalBookingId","required":true,"description":"Your own external booking id — the correlation id supplied when the booking was created via the import API."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Booking"}}}},"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"}}}}}}}}},"/v0/bookings/line-items/import":{"post":{"summary":"Import financial line items across bookings (experimental)","tags":["Bookings"],"description":"**Experimental:** This endpoint is subject to change while the import API is being piloted. Performs request-local validation, then queues one isolated task per booking. Booking-dependent financial validation runs asynchronously; poll the returned job id for progress, validation failures, and item results.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkImportLineItemsRequest"}}}},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255},"in":"header","name":"idempotency-key","required":true,"description":"Returns the original job when the same request is retried with the same key."}],"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineItemImportAccepted"}}}},"400":{"description":"Malformed request","content":{"application/json":{"schema":{"description":"Malformed request","type":"object","properties":{"statusCode":{"type":"number","enum":[400]},"error":{"type":"string"},"message":{"type":"string"}}}}}},"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"}}}}}},"409":{"description":"Idempotency conflict","content":{"application/json":{"schema":{"description":"Idempotency conflict","type":"object","properties":{"statusCode":{"type":"number","enum":[409]},"error":{"type":"string"},"message":{"type":"string"}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineItemImportValidationResponse"}}}}}},"put":{"summary":"Upsert imported financial line items across bookings (experimental)","tags":["Bookings"],"description":"**Experimental:** This endpoint is subject to change while the import API is being piloted. Performs request-local validation, then queues one isolated task per booking. Booking-dependent financial validation runs asynchronously; poll the returned job id for progress, validation failures, and item results.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkUpsertLineItemsRequest"}}}},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255},"in":"header","name":"idempotency-key","required":true,"description":"Returns the original job when the same request is retried with the same key."}],"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineItemImportAccepted"}}}},"400":{"description":"Malformed request","content":{"application/json":{"schema":{"description":"Malformed request","type":"object","properties":{"statusCode":{"type":"number","enum":[400]},"error":{"type":"string"},"message":{"type":"string"}}}}}},"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"}}}}}},"409":{"description":"Idempotency conflict","content":{"application/json":{"schema":{"description":"Idempotency conflict","type":"object","properties":{"statusCode":{"type":"number","enum":[409]},"error":{"type":"string"},"message":{"type":"string"}}}}}},"422":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineItemImportValidationResponse"}}}}}}},"/v0/bookings/line-items/import/{jobId}":{"get":{"summary":"Get line-item import progress (experimental)","tags":["Bookings"],"description":"**Experimental:** This endpoint is subject to change while the import API is being piloted. Returns the job id, lowercase job status, task counts, and available per-item results for an asynchronous line-item import, matching the booking-import polling envelope.","parameters":[{"schema":{"type":"string"},"in":"path","name":"jobId","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineItemImportJobStatusResponse"}}}},"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"}}}}}}}}},"/v0/booking-form-fields":{"get":{"summary":"Get booking form fields","tags":["BookingFormFields"],"description":"Returns a paginated list of the booking form fields owned by the organizer associated with your Public API credentials.","parameters":[{"schema":{"type":"number","minimum":1,"maximum":500,"nullable":true,"example":100},"in":"query","name":"page[size]","required":false,"description":"The number of entries to return per page. Range between 1 - 500, defaults to 100"},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[after]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[before]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedBookingFormFieldSummaries"}}}}}}},"/v0/booking-form-fields/{id}":{"get":{"summary":"Get a booking form field by ID","tags":["BookingFormFields"],"description":"Returns a single booking form field by ID if it belongs to the organizer associated with your Public API credentials.","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/BookingFormField"}}}},"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"}}}}}}}}},"/v0/booking-form-fields/{id}/booking-forms":{"get":{"summary":"Get booking forms by a field","tags":["BookingFormFields"],"description":"Returns a paginated list of the booking forms that contain a given field. Results are scoped to the organizer associated with your Public API credentials.","parameters":[{"schema":{"type":"number","minimum":1,"maximum":500,"nullable":true,"example":100},"in":"query","name":"page[size]","required":false,"description":"The number of entries to return per page. Range between 1 - 500, defaults to 100"},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[after]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[before]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"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/PagedBookingFormSummaries"}}}}}}},"/v0/applications":{"get":{"summary":"Get applications","tags":["Application"],"description":"Returns all applications that you have access to","parameters":[{"schema":{"type":"number","minimum":1,"maximum":500,"nullable":true,"example":100},"in":"query","name":"page[size]","required":false,"description":"The number of entries to return per page. Range between 1 - 500, defaults to 100"},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[after]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[before]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","enum":[1,-1],"nullable":true,"example":1},"in":"query","name":"sort[updatedAt]","required":false,"description":"Sort by update date. 1 for ascending, -1 for descending."},{"schema":{"type":"string","enum":[1,-1],"nullable":true,"example":1},"in":"query","name":"sort[createdAt]","required":false,"description":"Sort by creation date. 1 for ascending, -1 for descending."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"createdAt[after]","required":false,"description":"Only return entries created after this date."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"createdAt[before]","required":false,"description":"Only return entries created before this date."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"updatedAt[after]","required":false,"description":"Only return entries updated after this date."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"updatedAt[before]","required":false,"description":"Only return entries updated before this date."},{"schema":{"type":"boolean","nullable":true},"in":"query","name":"extendMetadata","required":false,"description":"If set to true, all available metadata is returned."},{"schema":{"type":"string","nullable":true,"example":"tags,gdpr_redacted"},"in":"query","name":"features","required":false,"description":"A comma-separated list of optional features to enable for the request. Each feature extends the response with additional fields or behaviors.\n\n- `tags` — Exposes operational tags (e.g. `\"injured\"`, `\"deferral\"`) on each entry, enabling filtering and segmentation in consuming systems.\n- `gdpr_redacted` — Indicates whether an entry has been redacted following a GDPR request, so consuming systems can suppress it accordingly.\n- `boolean_value` — Provides a parsed boolean representation of agreement, confirmation, and yes/no answers on `Field` entries, removing the need for client-side string normalization."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedApplications"}}}}}}},"/v0/applications/{id}":{"get":{"summary":"Get an application by ID","tags":["Application"],"description":"Returns an application by ID if you have access to it","parameters":[{"schema":{"type":"boolean","nullable":true},"in":"query","name":"extendMetadata","required":false,"description":"If set to true, all available metadata is returned."},{"schema":{"type":"string","nullable":true,"example":"tags,gdpr_redacted"},"in":"query","name":"features","required":false,"description":"A comma-separated list of optional features to enable for the request. Each feature extends the response with additional fields or behaviors.\n\n- `tags` — Exposes operational tags (e.g. `\"injured\"`, `\"deferral\"`) on each entry, enabling filtering and segmentation in consuming systems.\n- `gdpr_redacted` — Indicates whether an entry has been redacted following a GDPR request, so consuming systems can suppress it accordingly.\n- `boolean_value` — Provides a parsed boolean representation of agreement, confirmation, and yes/no answers on `Field` entries, removing the need for client-side string normalization."},{"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/Application"}}}},"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"}}}}}}}}},"/v0/event-occurrences":{"get":{"summary":"List event occurrences","tags":["EventOccurrences"],"description":"Returns a paginated list of event occurrences owned by your account.\n\nResults are scoped to the organizer associated with your Public API credentials, so the per-item organizer block from the marketplace events endpoint is omitted.","parameters":[{"schema":{"type":"string"},"in":"query","name":"startDate[gte]","required":false,"description":"Minimum start date filter (inclusive) in YYYY-MM-DD format"},{"schema":{"type":"string"},"in":"query","name":"startDate[lte]","required":false,"description":"Maximum start date filter (inclusive) in YYYY-MM-DD format"},{"schema":{"type":"string"},"in":"query","name":"lastModified[gte]","required":false,"description":"Minimum last modified timestamp filter (inclusive) in ISO 8601 format"},{"schema":{"type":"string"},"in":"query","name":"lastModified[lte]","required":false,"description":"Maximum last modified timestamp filter (inclusive) in ISO 8601 format"},{"schema":{"type":"number"},"in":"query","name":"page[size]","required":false,"description":"The number of entries to return per page. Range between 1 - 500, defaults to 100."},{"schema":{"type":"string"},"in":"query","name":"page[after]","required":false,"description":"Accepts an existing page cursor to return results after it. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string"},"in":"query","name":"page[before]","required":false,"description":"Accepts an existing page cursor to return results before it. For more details see the definition of PageCursor in the response."},{"schema":{"type":"number","deprecated":true},"in":"query","name":"pageSize","required":false,"description":"Maximum number of results to return. Use `page[size]` instead."},{"schema":{"type":"string","deprecated":true},"in":"query","name":"cursor[before]","required":false,"description":"Cursor to paginate through results before a given value. Use `page[before]` instead."},{"schema":{"type":"string","deprecated":true},"in":"query","name":"cursor[after]","required":false,"description":"Cursor to paginate through results after a given value. Use `page[after]` instead."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedOrganizerEventOccurrenceSummaries"}}}}}}},"/v0/event-occurrences/{id}":{"get":{"summary":"Get an event occurrence by ID","tags":["EventOccurrences"],"description":"Returns a single event occurrence by ID if it belongs to the organizer associated with your Public API credentials.","parameters":[{"schema":{"type":"string"},"example":"12345678901","in":"path","name":"id","required":true,"description":"The ID of the event occurrence to query by."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizerEventOccurrence"}}}},"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"}}}}}}}}},"/v0/events/{id}/applications":{"get":{"summary":"Get applications by an event","tags":["Application"],"description":"Returns all applications associated with an event","parameters":[{"schema":{"type":"number","minimum":1,"maximum":500,"nullable":true,"example":100},"in":"query","name":"page[size]","required":false,"description":"The number of entries to return per page. Range between 1 - 500, defaults to 100"},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[after]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[before]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","enum":[1,-1],"nullable":true,"example":1},"in":"query","name":"sort[updatedAt]","required":false,"description":"Sort by update date. 1 for ascending, -1 for descending."},{"schema":{"type":"string","enum":[1,-1],"nullable":true,"example":1},"in":"query","name":"sort[createdAt]","required":false,"description":"Sort by creation date. 1 for ascending, -1 for descending."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"createdAt[after]","required":false,"description":"Only return entries created after this date."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"createdAt[before]","required":false,"description":"Only return entries created before this date."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"updatedAt[after]","required":false,"description":"Only return entries updated after this date."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"updatedAt[before]","required":false,"description":"Only return entries updated before this date."},{"schema":{"type":"boolean","nullable":true},"in":"query","name":"extendMetadata","required":false,"description":"If set to true, all available metadata is returned."},{"schema":{"type":"string","nullable":true,"example":"tags,gdpr_redacted"},"in":"query","name":"features","required":false,"description":"A comma-separated list of optional features to enable for the request. Each feature extends the response with additional fields or behaviors.\n\n- `tags` — Exposes operational tags (e.g. `\"injured\"`, `\"deferral\"`) on each entry, enabling filtering and segmentation in consuming systems.\n- `gdpr_redacted` — Indicates whether an entry has been redacted following a GDPR request, so consuming systems can suppress it accordingly.\n- `boolean_value` — Provides a parsed boolean representation of agreement, confirmation, and yes/no answers on `Field` entries, removing the need for client-side string normalization."},{"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/PagedApplications"}}}}}}},"/v0/partners/{id}":{"get":{"summary":"Get a partner by ID","tags":["Partner"],"description":"Returns a partner by ID if you have access to it. In case the partner's ID is unknown, querying by an external ID (Enthuse or JustGiving) is also possible by using eg. `/v0/partners/:id?externalId=enthuse`","parameters":[{"schema":{"$ref":"#/components/schemas/PartnerExternalIdType"},"in":"query","name":"externalId","required":false},{"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/Partner"}}}},"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"}}}}}}}},"patch":{"summary":"Update a partner by ID","tags":["Partner"],"description":"Will update a partner either by ID or external ID","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePartnerRequest"}}}},"parameters":[{"schema":{"$ref":"#/components/schemas/PartnerExternalIdType"},"in":"query","name":"externalId","required":false},{"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/Partner"}}}},"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"}}}}}}}}},"/v0/partners":{"get":{"summary":"Get partners","tags":["Partner"],"description":"Returns all partners that you have access to","parameters":[{"schema":{"type":"string","nullable":true,"example":"research"},"in":"query","name":"search","required":false,"description":"A search query to filter partners by their name. The query is case insensitive."},{"schema":{"type":"number","minimum":1,"maximum":500,"nullable":true,"example":100},"in":"query","name":"page[size]","required":false,"description":"The number of entries to return per page. Range between 1 - 500, defaults to 100"},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[after]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[before]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","enum":[1,-1],"nullable":true,"example":1},"in":"query","name":"sort[updatedAt]","required":false,"description":"Sort by update date. 1 for ascending, -1 for descending."},{"schema":{"type":"string","enum":[1,-1],"nullable":true,"example":1},"in":"query","name":"sort[createdAt]","required":false,"description":"Sort by creation date. 1 for ascending, -1 for descending."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"createdAt[after]","required":false,"description":"Only return entries created after this date."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"createdAt[before]","required":false,"description":"Only return entries created before this date."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"updatedAt[after]","required":false,"description":"Only return entries updated after this date."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"updatedAt[before]","required":false,"description":"Only return entries updated before this date."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedPartners"}}}}}},"post":{"summary":"Create a partner","tags":["Partner"],"description":"Creates a new partner","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePartnerRequest"}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Partner"}}}}}}},"/v0/partners/{id}/claim-links":{"post":{"summary":"Create a claim link","tags":["Partner"],"description":"Creates a claim link for a given partner or reserved entry group.\n\nWhen providing a `reservedEntryId`, the claim link will point to the dashboard where the partner can manage their entries and allocate them.\n\nOtherwise the claim link will point to the general partner dashboard, where partners can manage their general settings.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimLinkInput"}}}},"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/ClaimLink"}}}},"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"}}}}}}}}},"/v0/reserved-entries/{id}":{"get":{"summary":"Get reserved entry group by ID","tags":["ReservedEntries"],"description":"Returns a specific reserved entry group","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/ReservedEntryGroup"}}}}}},"patch":{"summary":"Update a reserved entry group","tags":["ReservedEntries"],"description":"Will update a specific reserved entry group","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateReservedEntryGroupRequest"}}}},"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/ReservedEntryGroup"}}}}}},"delete":{"summary":"Delete a reserved entry group","tags":["ReservedEntries"],"description":"Will remove a specific reserved entry group","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":{}}}}}}},"/v0/events/{id}/reserved-entries":{"get":{"summary":"Get all reserved entry groups by event","tags":["ReservedEntries"],"description":"Returns a paginated list of reserved entry groups associated with an event.","parameters":[{"schema":{"type":"number","minimum":1,"maximum":500,"nullable":true,"example":100},"in":"query","name":"page[size]","required":false,"description":"The number of entries to return per page. Range between 1 - 500, defaults to 100"},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[after]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[before]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"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/PagedReservedEntryGroups"}}}}}},"post":{"summary":"Create a new reserved entry group","tags":["ReservedEntries"],"description":"Create a new reserved entry group under an event","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReservedEntryGroupRequest"}}}},"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/ReservedEntryGroup"}}}}}}},"/v0/events/{id}/tickets":{"get":{"summary":"Get tickets by an Event","tags":["Tickets"],"description":"Returns a paginated list of available tickets associated with an event.","parameters":[{"schema":{"type":"number","minimum":1,"maximum":500,"nullable":true,"example":100},"in":"query","name":"page[size]","required":false,"description":"The number of entries to return per page. Range between 1 - 500, defaults to 100"},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[after]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[before]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"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/PagedTickets"}}}}}}},"/v0/event-occurrences/{id}/races":{"get":{"summary":"Get races by an event occurrence","tags":["Races"],"description":"Returns a paginated list of races associated with a given event occurrence.","parameters":[{"schema":{"type":"number","minimum":1,"maximum":500,"nullable":true,"example":100},"in":"query","name":"page[size]","required":false,"description":"The number of entries to return per page. Range between 1 - 500, defaults to 100"},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[after]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[before]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string"},"example":"12345678901","in":"path","name":"id","required":true,"description":"The ID of the event occurrence to query by."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedRaceSummaries"}}}}}}},"/v0/event-occurrences/{id}/bookings":{"get":{"summary":"List bookings for an event occurrence","tags":["Bookings"],"description":"Returns a paginated list of the organizer's bookings for a given event occurrence. Filter by `source` or `status`.","parameters":[{"schema":{"type":"number","minimum":1,"maximum":500,"nullable":true,"example":100},"in":"query","name":"page[size]","required":false,"description":"The number of entries to return per page. Range between 1 - 500, defaults to 100"},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[after]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[before]","required":false,"description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","enum":["INTERNAL","EXTERNAL","API"]},"in":"query","name":"source","required":false,"description":"Filter to bookings with the given source (`INTERNAL`, `EXTERNAL`, or `API`)."},{"schema":{"type":"string","enum":["CONFIRMED","CANCELLED","WITHDRAWN","DEFERRED","PENDING","REFUNDED","REFUNDING","TO_BE_TRANSFERRED","TRANSFERRED_EVENTS","TRANSFERRED_TO_CREDIT","FAILED"]},"in":"query","name":"status","required":false,"description":"Filter to bookings with the given status."},{"schema":{"type":"string"},"example":"12345678901","in":"path","name":"id","required":true,"description":"The ID of the event occurrence to query by."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedBookingSummaries"}}}}}}},"/v0/line-items/{id}":{"get":{"summary":"LineItem by ID","tags":["LineItem"],"description":"Returns a LineItem by ID","parameters":[{"schema":{"type":"string","enum":["mongodb"],"nullable":true},"in":"query","name":"source","description":"Data source. When set to \"mongodb\", reads from the MongoDB collection."},{"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/LineItem"}}}},"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"}}}}}}}}},"/v0/line-items":{"get":{"summary":"All LineItems","tags":["LineItem"],"description":"Returns all LineItems that you have access to","parameters":[{"schema":{"type":"number","minimum":1,"maximum":500,"nullable":true,"example":100},"in":"query","name":"page[size]","description":"The number of entries to return per page. Range between 1 - 500, defaults to 100"},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[after]","description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","nullable":true},"in":"query","name":"page[before]","description":"Accepts an existing page cursor. For more details see the definition of PageCursor in the response."},{"schema":{"type":"string","enum":[1,-1],"nullable":true,"example":1},"in":"query","name":"sort[updatedAt]","description":"Sort by update date. 1 for ascending, -1 for descending."},{"schema":{"type":"string","enum":[1,-1],"nullable":true,"example":1},"in":"query","name":"sort[createdAt]","description":"Sort by creation date. 1 for ascending, -1 for descending."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"createdAt[after]","description":"Only return entries created after this date."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"createdAt[before]","description":"Only return entries created before this date."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"updatedAt[after]","description":"Only return entries updated after this date."},{"schema":{"type":"string","nullable":true,"format":"date-time","example":"2020-01-01T20:15:00.000Z"},"in":"query","name":"updatedAt[before]","description":"Only return entries updated before this date."},{"schema":{"type":"string","enum":["mongodb"],"nullable":true},"in":"query","name":"source","description":"Data source. When set to \"mongodb\", reads from the MongoDB collection."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedLineItems"}}}}}}},"/marketplace/v1/events/":{"get":{"summary":"List events","tags":["Events"],"description":"Returns a paginated list of available events on Let's Do This.\n\nNote that this endpoint requires special marketplace API credentials.\nIf you wish to use this endpoint, please contact the Let's Do This team for more information.","parameters":[{"schema":{"type":"string"},"in":"query","name":"startDate[gte]","required":false,"description":"Minimum start date filter (inclusive) in YYYY-MM-DD format"},{"schema":{"type":"string"},"in":"query","name":"startDate[lte]","required":false,"description":"Maximum start date filter (inclusive) in YYYY-MM-DD format"},{"schema":{"type":"string"},"in":"query","name":"lastModified[gte]","required":false,"description":"Minimum last modified timestamp filter (inclusive) in ISO 8601 format"},{"schema":{"type":"string"},"in":"query","name":"lastModified[lte]","required":false,"description":"Maximum last modified timestamp filter (inclusive) in ISO 8601 format"},{"schema":{"type":"number"},"in":"query","name":"pageSize","required":false,"description":"Maximum number of results to return (1-200, default 10)"},{"schema":{"type":"string"},"in":"query","name":"cursor[before]","required":false,"description":"Cursor to paginate through results before a given value"},{"schema":{"type":"string"},"in":"query","name":"cursor[after]","required":false,"description":"Cursor to paginate through results after a given value"},{"schema":{"type":"string"},"example":"us","in":"query","name":"countryCode","required":false,"description":"(Optional) ISO-2 country code If supplied, it will be used to return a region specific checkout link. Defaults to \"gb\"."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventsResponse"}}}}}}}},"servers":[{"url":"https://api.letsdothis.com","description":"Production"},{"url":"https://api.staging.letsdothis.com","description":"Staging"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"Application","x-displayName":"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":"Participant","x-displayName":"Participants","description":"Participants are users who successfully booked an event."},{"name":"Partner","x-displayName":"Partners","description":"Partners that were created by the organization who can have Reserved Entries assigned to them."},{"name":"ReservedEntries","x-displayName":"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":"Tickets","x-displayName":"Tickets","description":"Tickets that are available for events."},{"name":"LineItem","x-displayName":"LineItems","description":"Financial details related to individual items within transactions."},{"name":"Events","x-displayName":"Events","description":"Events that participants can register for."},{"name":"EventOccurrences","x-displayName":"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-displayName":"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":"BookingForms","x-displayName":"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-displayName":"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-displayName":"Bookings","description":"Bookings are the transaction record for a registration. A booking may contain one or more participants (entries)."}],"x-tagGroups":[{"name":"Endpoints","tags":["Application","Participant","Partner","ReservedEntries","Tickets","LineItem","Events","EventOccurrences","Races","BookingForms","BookingFormFields","Bookings"]}]}