openapi: 3.1.0
info:
  title: Swoogo API
  version: 1.0.0
  summary: REST API for the Swoogo event management platform
  description: |
    The Swoogo API provides programmatic access to manage events, registrants, sessions,
    speakers, sponsors, and related resources on the Swoogo event management platform.

    ## Authentication

    The API uses OAuth 2.0 with the **client credentials** grant type.

    1. **Get your credentials** — Log in to Swoogo and go to **My Profile > API Credentials**
       to find your consumer key and secret.
    2. **Encode credentials** — URL-encode the key and secret (RFC 1738), concatenate them
       with a colon (`key:secret`), then Base64-encode the result.
    3. **Request a token** — `POST /oauth2/token` with your encoded credentials in the
       `Authorization: Basic {encoded}` header and `grant_type=client_credentials` in the body.
    4. **Use the token** — Include `Authorization: Bearer {access_token}` on all subsequent requests.

    > Tokens expire after **30 minutes**. Request a new token when you receive a `401` response.

    ## Rate Limiting

    API requests are rate-limited to **2,000 requests per 10-minute window** per API credential.
    List endpoints cost **10 credits** per call; all other endpoints cost **1 credit**.
    Rate limit status is returned in response headers:

    | Header | Description |
    |--------|-------------|
    | `X-Rate-Limit-Limit` | Maximum requests allowed in the current window |
    | `X-Rate-Limit-Remaining` | Requests remaining in the current window |
    | `X-Rate-Limit-Reset` | Seconds until the window resets |

    When the limit is exceeded, the API returns `429 Too Many Requests`.

    ## Pagination

    All list endpoints return paginated results in this envelope:

    ```json
    {
      "items": [...],
      "_links": { "self": { "href": "..." }, "first": { "href": "..." }, "last": { "href": "..." } },
      "_meta": { "totalCount": 95, "pageCount": 5, "currentPage": 1, "perPage": 20 }
    }
    ```

    Control pagination with these query parameters:

    | Parameter | Default | Max | Description |
    |-----------|---------|-----|-------------|
    | `page` | 1 | — | Page number (1-indexed) |
    | `per-page` | 20 | 1000 | Items per page. Capped at **200** when using `expand`. |

    Pagination metadata is also returned in `X-Pagination-*` response headers.

    ## Filtering and Sorting

    Use the `search` parameter to filter results. Combine multiple conditions with `&`.

    **Operators:** `=`, `!=`, `>`, `<`, `>=`, `<=`, `*contains*`, `*beginswith*`, `*endswith*`, `*in*`

    **Examples:**
    - `search=registration_status=confirmed` — exact match
    - `search=created_at>=2024-01-01` — date range
    - `search=last_name=*beginswith*Sm` — starts with "Sm"
    - `search=status=*in*confirmed|attended` — matches any value (pipe-separated)
    - `search=id>100&registration_status=confirmed` — multiple conditions (AND by default)

    Set `searchCondition=or` to match **any** condition instead of all.

    Use `sort` to order results. Prefix with `-` for descending: `sort=-created_at`.

    ## Field Selection and Expansion

    Use `fields` to request only the fields you need: `fields=id,email,first_name,last_name`.
    When omitted, a default subset of fields is returned.

    Use `expand` to include related objects in the response: `expand=homeAddress,sessions`.
    Each resource documents its available expand values. Using `expand` caps the page size at **200**.

    ## Errors

    All errors return a consistent JSON response:

    ```json
    {
      "name": "Not Found",
      "message": "The requested resource does not exist.",
      "code": 0,
      "status": 404
    }
    ```

    | Status | Meaning |
    |--------|---------|
    | `400` | Bad Request — invalid parameters or business rule violation |
    | `401` | Unauthorized — missing or expired bearer token |
    | `403` | Forbidden — valid token but insufficient permissions |
    | `404` | Not Found — resource does not exist or is not accessible |
    | `422` | Unprocessable Entity — validation errors on input fields |
    | `429` | Too Many Requests — rate limit exceeded |
    | `500` | Internal Server Error — unexpected server error |

    ## Webhooks

    Swoogo can send HTTP callbacks when resources are created, updated, or deleted.
    Configure webhooks via the API or the Swoogo UI. Supported trigger objects:
    `event`, `contact`, `registrant`, `speaker`, `sponsor`, `session`,
    `session_attendance`, `registrant_line_item`.

    Webhook payloads can be sent as `json` (application/json) or `post` (form-encoded).
  termsOfService: https://www.swoogo.com/terms
  contact:
    name: Swoogo Developer Support
    url: https://developer.swoogo.com
    email: dev@swoogo.com
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
servers:
  - url: https://api.swoogo.com/api/v1
    description: Production API server
  - url: https://local.swoogo.com/api/v1
    description: Local API server
tags:
  - name: Authentication
    description: Obtain and manage OAuth 2.0 bearer tokens for API access.
  - name: Events
    description: Events are the top-level resource in Swoogo. An event represents a conference, meeting, webinar, or other gathering. Most resources (registrants, sessions, speakers, sponsors) are scoped to an event via `event_id`. Use events to manage scheduling, capacity, registration windows, and event metadata.
  - name: Registrants
    description: Registrants are individuals who have registered for an event. Each registrant belongs to one event and carries a registration status, package selection, session choices, and financial data (fees, taxes, payments). Registrants can be checked in, emailed, approved/denied, and assigned to groups.
  - name: Apply to Attend
    description: Apply to Attend lets organizers require registrants to be approved before they can complete registration for a restricted event. Registrants who apply are placed in `pending` status; these endpoints approve or deny them, moving them to `approved` or `denied`. Only available for events with Apply to Attend enabled.
  - name: Sessions
    description: Sessions are individual agenda items within an event — talks, workshops, panels, or breaks. Sessions have scheduling (date, start/end time, timezone), capacity limits, location assignments, track categorization, and optional fees. Registrants select sessions during registration.
  - name: Speakers
    description: Speakers are presenters associated with event sessions. Each speaker has profile information (name, bio, company, photo) and can be linked to one or more sessions.
  - name: Sponsors
    description: Sponsors are organizations or individuals providing support for events. Sponsors have profile data, custom fields, and optional attendance tracking.
  - name: Contacts
    description: Contacts are people in your Swoogo CRM, independent of any specific event. Contacts can be linked to registrants across multiple events and managed via invitation lists.
  - name: Registrant Types
    description: Registration types (reg types) define categories of attendees for an event — such as "Attendee", "Exhibitor", or "VIP". Each reg type can have its own capacity, naming, and group size constraints.
  - name: Packages
    description: Packages define pricing tiers for event registration. A package specifies the fee amount, early bird pricing, and which sessions or features are included. Registrants select a package during registration.
  - name: Discount Codes
    description: Discount codes provide percentage or absolute discounts on registration fees. Codes can have capacity limits, group size requirements, and apply-to-all or selective targeting. Codes can be cloned to create variants.
  - name: Transactions
    description: Transactions record financial activity for registrants — payments, refunds, and credits. Supports offline payment types (credit card, wire transfer, check, cash, etc.) and integration with payment gateways.
  - name: Registrant Sessions
    description: Manage which sessions a registrant is enrolled in. Add or remove session assignments.
  - name: Registrant Session Waitlists
    description: Manage waitlist entries for sessions that are at capacity. Add or remove waitlist positions.
  - name: Registrant Groups
    description: Manage group registration assignments. Add or remove registrants from registration groups.
  - name: Registrant Line Items
    description: View itemized financial line items for registrant orders, including fees, taxes, and discounts.
  - name: Registrant Line Item Audits
    description: View the audit trail for changes to registrant line items.
  - name: Event Fields
    description: Manage custom fields on events. Create, update, and delete event-level custom field definitions.
  - name: Event Questions
    description: View event questions configured for registration forms.
  - name: Event Websites
    description: View websites associated with events.
  - name: Event Badges
    description: Manage event badges. Generate badge PDFs for registrants.
  - name: Event Folders
    description: View event folders used to organize events in the Swoogo dashboard.
  - name: Session Fields
    description: Manage custom fields on sessions. Create, update, and delete session-level custom field definitions.
  - name: Session Locations
    description: Manage physical or virtual locations where sessions take place. Locations can be assigned to sessions and include name, capacity, and address information.
  - name: Session Attendance
    description: Track and manage session attendance records for registrants.
  - name: Session Scans
    description: Record and manage check-in scans for session attendance.
  - name: Session Fees
    description: Manage pricing for individual sessions, including early bird rates.
  - name: Package Fees
    description: Manage pricing for packages, including early bird rates.
  - name: Tracks
    description: Tracks group related sessions into thematic categories (e.g., "Technical", "Business", "Keynotes"). Registrants can filter sessions by track.
  - name: Pages
    description: View pages associated with event websites.
  - name: Speaker Sessions
    description: Manage the association between speakers and sessions. Assign or remove speakers from sessions.
  - name: Sponsor Fields
    description: Manage custom fields on sponsors. Create, update, and delete sponsor-level custom field definitions.
  - name: Sponsor Attendance
    description: View sponsor attendance records for events.
  - name: Contact Fields
    description: View custom field definitions for contacts.
  - name: Invitation Lists
    description: Invitation lists are curated groups of contacts used for targeted event invitations and access control. Manage lists and their contact memberships.
  - name: Data Lists
    description: Data lists store reusable sets of key-value options used in custom fields (e.g., dropdown choices, checkbox options). Manage lists and their items.
  - name: Data List Items
    description: Manage individual items within a data list.
  - name: Call for Speaker Contacts
    description: Manage contacts who have submitted to a call for speakers program.
  - name: Call for Speaker Reviews
    description: Manage reviews of call for speaker submissions.
  - name: Call for Speaker Submissions
    description: Manage speaker submissions to a call for speakers program.
  - name: Images
    description: Upload, retrieve, and delete images associated with resources (registrants, speakers, sponsors, etc.).
  - name: Webhooks
    description: Configure HTTP callbacks that fire when resources are created, updated, or deleted. Webhooks support JSON and form-encoded payloads, custom headers, and retry logic.
  - name: Webhook Groups
    description: Organize webhooks into groups for easier management. A webhook group contains one or more webhooks that share common configuration.
  - name: Registration Audit
    description: The registration audit endpoints return time-bounded snapshots of registrant status changes for compliance and reporting. Both event_id and start_time are required to scope results.
paths:
  /oauth2/token:
    post:
      tags:
        - Authentication
      summary: Request API Token
      description: |-
        ### Request API Token
        **Step 1: Find your consumer key and secret** Your consumer key and secret can be found by logging into Swoogo, and going to My Profile > API Credentials.

        **Step 2: Encode consumer key and secret** The steps to encode your consumer key and secret into a set of credentials to obtain a bearer token are: 1) URL encode the consumer key and the consumer secret according to RFC 1738. 2) Concatenate the encoded consumer key, a colon character ":", and the encoded consumer secret into a single string. 3) Base64 encode the string from the previous step.

        **Step 3: Obtain a bearer token** The value calculated in step 1 must be exchanged for a bearer token by issuing a request to POST /api/v1/oauth2/token: The request must be a HTTP POST request. The request must include an Authorization header with the value of your base 64 encoded token (from step 1). The request must include a Content-Type header with the value of application/x-www-form-urlencoded;charset=UTF-8. The body of the request must be grant_type=client_credentials.

        **Step 4: Authenticate API requests with the bearer token** The bearer token may be used to issue requests to Swoogo API endpoints. To use the bearer token, construct a normal HTTPS request and include an Authorization header with the value of your bearer token from step 2.
        > **Note:** The tokens expires in 30 minutes.
      x-codeSamples:
        - lang: cURL
          label: cURL
          source: |
            # Encode your consumer key and secret as Base64
            CREDENTIALS=$(echo -n "YOUR_CONSUMER_KEY:YOUR_CONSUMER_SECRET" | base64)

            curl -X POST "https://api.swoogo.com/api/v1/oauth2/token" \
              -H "Authorization: Basic $CREDENTIALS" \
              -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" \
              -d "grant_type=client_credentials"
        - lang: JavaScript
          label: Node.js
          source: |
            const credentials = Buffer.from(
              `${CONSUMER_KEY}:${CONSUMER_SECRET}`
            ).toString('base64');

            const response = await fetch('https://api.swoogo.com/api/v1/oauth2/token', {
              method: 'POST',
              headers: {
                'Authorization': `Basic ${credentials}`,
                'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
              },
              body: 'grant_type=client_credentials',
            });

            const { access_token, expires_at } = await response.json();
        - lang: Python
          label: Python
          source: |
            import base64
            import requests

            credentials = base64.b64encode(
                f"{CONSUMER_KEY}:{CONSUMER_SECRET}".encode()
            ).decode()

            response = requests.post(
                "https://api.swoogo.com/api/v1/oauth2/token",
                headers={
                    "Authorization": f"Basic {credentials}",
                    "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
                },
                data="grant_type=client_credentials",
            )

            token = response.json()["access_token"]
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                grant_type:
                  type: string
                  required: true
                  value: client_credentials
                  example: client_credentials
            examples:
              Request API Token:
                value:
                  grant_type: client_credentials
      responses:
        '200':
          description: Request API Token
          content:
            application/json:
              schema:
                type: object
                properties:
                  access_token:
                    type: string
                    example: '{{access-token}}'
                  expires_at:
                    type: string
                    example: '2024-11-08 16:04:40'
                  type:
                    type: string
                    example: bearer
              examples:
                Request Token:
                  value:
                    access_token: '{{access-token}}'
                    expires_at: '2024-11-08 16:04:40'
                    type: bearer
      security:
        - basicAuth: []
  /cfs-contacts:
    get:
      security:
        - bearerAuth: []
      tags:
        - Call for Speaker Contacts
      summary: Get All Contacts
      description: Retrieves all contacts who have submitted or been invited to the Call for Speakers (CFS) program for an event. CFS contacts are potential speakers with their profile information and submission status. Requires the `event_id` query parameter.
      operationId: getAllCfsContacts
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve contacts for
        - name: fields
          in: query
          required: true
          schema:
            type: string
            example: contact_id,created_at,event_id,id,language,reviewer,submitter,updated_at
          description: string - optional - Comma separated list of fields you want to return
        - name: search
          in: query
          schema:
            type: string
            example: reviewer=true
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
            example: event_id
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Response containing CFS contacts information.
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        event_id:
                          type: integer
                          example: 108026
                        contact_id:
                          type: integer
                          example: 19904840
                        submitter:
                          type: boolean
                          example: true
                        reviewer:
                          type: boolean
                          example: true
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: https://api.swoogo.com/api/v1/cfs-contacts?event_id=108026&fields=contact_id%2Cevent_id%2Csubmitter%2Creviewer%2Csubmitter_role%2Cuser_role_id%2Ccreated_at%2Ccreated_by%2Cupdated_at%2Cupdated_by%2Cdeleted%2Csecure_id&search=reviewer%3Dtrue&page=1
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: https://api.swoogo.com/api/v1/cfs-contacts?event_id=108026&fields=contact_id%2Cevent_id%2Csubmitter%2Creviewer%2Csubmitter_role%2Cuser_role_id%2Ccreated_at%2Ccreated_by%2Cupdated_at%2Cupdated_by%2Cdeleted%2Csecure_id&search=reviewer%3Dtrue&page=1
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: https://api.swoogo.com/api/v1/cfs-contacts?event_id=108026&fields=contact_id%2Cevent_id%2Csubmitter%2Creviewer%2Csubmitter_role%2Cuser_role_id%2Ccreated_at%2Ccreated_by%2Cupdated_at%2Cupdated_by%2Cdeleted%2Csecure_id&search=reviewer%3Dtrue&page=1
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /cfs-contacts/{contact_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Call for Speaker Contacts
      summary: Get One Contact
      description: Retrieves a single Call for Speakers contact by their ID, including profile information (name, email, company, bio) and their submission status within the CFS program.
      operationId: getOneCfsContact
      parameters:
        - name: contact_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the contact you want to retrieve
        - name: fields
          in: query
          required: true
          schema:
            type: string
            example: id,language,created_at,contact_id,reviewer,submitter,event_id,updated_at
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: event
          description: string - optional - Comma separated list of objects you want to return
      responses:
        '200':
          description: Get A Contact's Details
          content:
            application/json:
              schema:
                type: object
                properties:
                  company:
                    type: string
                    example: company name
                  contact_id:
                    type: number
                    example: 1
                  created_at:
                    type: string
                    example: '2024-01-26 14:26:46'
                  email:
                    type: string
                    example: user@domain.com
                  event_id:
                    type: number
                    example: 11
                  first_name:
                    type: string
                    example: firstname
                  id:
                    type: number
                    example: 37
                  job_title:
                    type: string
                    example: jobtitle
                  last_name:
                    type: string
                    example: lastname
                  prefix:
                    type: string
                    example: ''
                  reviewer:
                    type: boolean
                    example: true
                  reviewer_role:
                    type: string
                    example: all_access
                  submitter:
                    type: boolean
                    example: true
                  updated_at:
                    type: string
                    example: '2022-01-26 14:26:46'
              examples:
                Get A Contact's Details:
                  value:
                    company: company name
                    contact_id: 1
                    created_at: '2022-01-26 14:26:46'
                    email: user@domain.com
                    event_id: 11
                    first_name: firstname
                    id: 37
                    job_title: jobtitle
                    last_name: lastname
                    prefix: ''
                    reviewer: true
                    reviewer_role: all_access
                    submitter: true
                    updated_at: '2022-01-26 14:26:46'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /cfs-contacts/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Call for Speaker Contacts
      summary: Create Contact
      description: Creates a new contact in the Call for Speakers program for an event. Provide the contact's profile information (name, email, company, bio) to add them as a potential speaker. They can then be associated with submissions.
      operationId: createCfsContact
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                company:
                  type: string
                  example: company name
                email:
                  type: string
                  example: user@domain.com
                event_id:
                  type: integer
                  example: 1
                first_name:
                  type: string
                  example: firstname
                job_title:
                  type: string
                  example: jobtitle
                last_name:
                  type: string
                  example: lastname
      responses:
        '201':
          description: Create A New Contact
          content:
            application/json:
              schema:
                type: object
                properties:
                  company:
                    type: string
                    example: company name
                  contact_id:
                    type: number
                    example: 1
                  created_at:
                    type: string
                    example: '2022-06-26 14:30:00'
                  email:
                    type: string
                    example: user@domain.com
                  event_id:
                    type: number
                    example: 1
                  first_name:
                    type: string
                    example: firstname
                  id:
                    type: number
                    example: 1
                  job_title:
                    type: string
                    example: jobtitle
                  last_name:
                    type: string
                    example: lastname
                  reviewer:
                    type: boolean
                    example: true
                  reviewer_role:
                    type: string
                    example: all_access
                  submitter:
                    type: boolean
                    example: true
                  updated_at:
                    type: string
                    example: '2022-06-26 14:30:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /cfs-contacts/update/{contact_id}:
    put:
      security:
        - bearerAuth: []
      tags:
        - Call for Speaker Contacts
      summary: Update Contact
      description: Updates an existing Call for Speakers contact by their ID. You can modify profile fields such as name, email, company, bio, and other speaker-related information.
      operationId: updateCfsContact
      parameters:
        - name: contact_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the contact you want to update
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                reviewer:
                  type: string
                  example: '1'
                submitter:
                  type: string
                  example: '1'
            examples:
              Update An Existing Contact:
                value:
                  reviewer: '1'
                  submitter: '1'
      responses:
        '200':
          description: Update An Existing Contact
          content:
            application/json:
              schema:
                type: object
                properties:
                  company:
                    type: string
                    example: company name
                  contact_id:
                    type: number
                    example: 1
                  created_at:
                    type: string
                    example: '2022-06-26 14:30:00'
                  email:
                    type: string
                    example: user@domain.com
                  event_id:
                    type: number
                    example: 1
                  first_name:
                    type: string
                    example: firstname
                  id:
                    type: number
                    example: 1
                  job_title:
                    type: string
                    example: jobtitle
                  last_name:
                    type: string
                    example: lastname
                  reviewer:
                    type: boolean
                    example: true
                  reviewer_role:
                    type: string
                    example: all_access
                  submitter:
                    type: boolean
                    example: true
                  updated_at:
                    type: string
                    example: '2022-06-26 14:30:00'
              examples:
                Update An Existing Contact:
                  value:
                    company: company name
                    contact_id: 1
                    created_at: '2022-06-26 14:30:00'
                    email: user@domain.com
                    event_id: 1
                    first_name: firstname
                    id: 1
                    job_title: jobtitle
                    last_name: lastname
                    reviewer: true
                    reviewer_role: all_access
                    submitter: true
                    updated_at: '2022-06-26 14:30:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /cfs-contacts/delete/{contact_id}:
    delete:
      security:
        - bearerAuth: []
      tags:
        - Call for Speaker Contacts
      summary: Delete Contact
      description: Permanently deletes a Call for Speakers contact by their ID. This removes the contact from the CFS program and may affect associated submissions.
      operationId: deleteCfsContact
      parameters:
        - name: contact_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the contact you want to delete
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties: {}
            examples:
              Delete Contact:
                value: {}
      responses:
        '204':
          description: Delete Contact
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /cfs-reviews:
    get:
      security:
        - bearerAuth: []
      tags:
        - Call for Speaker Reviews
      summary: Get All Reviews
      description: Retrieves all reviews for Call for Speakers submissions for an event. Reviews contain scores and feedback from reviewers evaluating speaker submissions. Requires the `event_id` query parameter. Use this to aggregate review scores and track the submission evaluation process.
      operationId: getAllCfsReviews
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve submissions for
        - name: fields
          in: query
          schema:
            type: string
            example: id,submission_name,reviewer_fullName,event_id,reviewer_id,rating,notes,created_at,updated_at
          description: string - optional - Comma separated list of fields you want to return
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
            example: event_id
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /cfs-reviews/{review_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Call for Speaker Reviews
      summary: Get One Review
      description: Retrieves a single submission review by its ID, including the reviewer, score, feedback comments, and the associated submission.
      operationId: getOneCfsReview
      parameters:
        - name: review_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the review you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: id,submission_name,reviewer_fullName,event_id,reviewer_id,rating,notes,created_at,updated_at
          description: string - optional - Comma separated list of fields you want to return
      responses:
        '200':
          description: Get Review
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /cfs-reviews/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Call for Speaker Reviews
      summary: Create Review
      description: Creates a new review for a Call for Speakers submission. Provide the `event_id`, `submission_id`, reviewer information, score, and optional feedback comments to record an evaluation of a speaker submission.
      operationId: createCfsReview
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                event_id:
                  type: string
                  example: '1'
                notes:
                  type: string
                  example: A simple review
                rating:
                  type: string
                  example: '4.5'
                reviewer_id:
                  type: string
                  example: '3'
                submission_id:
                  type: string
                  example: '2'
            examples:
              Create A New Review:
                value:
                  event_id: '1'
                  notes: A simple review
                  rating: '4.5'
                  reviewer_id: '3'
                  submission_id: '2'
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                type: object
                properties:
                  created_at:
                    type: string
                    example: '2022-06-26 14:30:00'
                  updated_at:
                    type: string
                    example: '2022-06-26 14:30:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /cfs-reviews/update/{review_id}:
    put:
      security:
        - bearerAuth: []
      tags:
        - Call for Speaker Reviews
      summary: Update Review
      description: Updates an existing submission review by its ID. You can modify the score, feedback comments, and reviewer details.
      operationId: updateCfsReview
      parameters:
        - name: review_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the review you want to delete
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                notes:
                  type: string
                  example: An updated note!
                rating:
                  type: string
                  example: '5.00'
            examples:
              Update An Existing Review:
                value:
                  notes: An updated note!
                  rating: '5.00'
      responses:
        '200':
          description: ''
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /cfs-reviews/delete/{review_id}:
    delete:
      security:
        - bearerAuth: []
      tags:
        - Call for Speaker Reviews
      summary: Delete Review
      description: Permanently deletes a submission review by its ID. This removes the reviewer's score and feedback from the submission's evaluation record.
      operationId: deleteCfsReview
      parameters:
        - name: review_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the review you want to delete
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties: {}
            examples:
              Delete Review:
                value: {}
      responses:
        '204':
          description: ''
  /submissions:
    get:
      security:
        - bearerAuth: []
      tags:
        - Call for Speaker Submissions
      summary: Get All Submissions
      description: Retrieves all speaker submissions for an event's Call for Speakers program. Each submission contains the proposed session topic, abstract, speaker contact, and current review status (e.g., pending, accepted, rejected). Requires the `event_id` query parameter.
      operationId: getAllCfsSubmissions
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve submissions for
        - name: fields
          in: query
          schema:
            type: string
            example: admin_short_name,badge_name,capacity,created_at,date,description,end_time,event_id,id,name,notes,session_status,start_time,timezone,track,updated_at,use_event_timezone
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: location
          description: string - optional - Comma separated list of objects you want to return
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
            example: event_id
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /submissions/{submission_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Call for Speaker Submissions
      summary: Get One Submission
      description: Retrieves a single speaker submission by its ID, including the session topic, abstract, speaker contact details, track preference, review status, and reviewer scores.
      operationId: getOneCfsSubmission
      parameters:
        - name: submission_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the submission you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: admin_short_name,badge_name,capacity,created_at,date,description,end_time,event_id,id,name,notes,session_status,start_time,timezone,track,updated_at,use_event_timezone
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: speakers,location,track,translations
          description: 'string - optional - Comma separated list of related objects to include inline. Supported values: `speakers`, `location`, `track`, `translations`'
      responses:
        '200':
          description: Get Submission
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /submissions/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Call for Speaker Submissions
      summary: Create Submission
      description: Creates a new speaker submission for an event's Call for Speakers program. Provide the `event_id`, session topic, abstract, and speaker contact information. The submission enters the review pipeline where it can be evaluated, scored, and accepted or rejected.
      operationId: createCfsSubmission
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                event_id:
                  type: string
                  required: true
                  example: 1
                submitter_id:
                  type: integer
                  required: true
                  example: 1
                date:
                  type: string
                  example: ''
                end_time:
                  type: string
                  example: ''
                name:
                  type: string
                  example: The Mighty Yangtze River
                start_time:
                  type: string
                  example: ''
            examples:
              Create A New Submission:
                value:
                  event_id: 1
                  submitter_id: 1
                  date: ''
                  end_time: ''
                  name: The Mighty Yangtze River
                  start_time: ''
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                type: object
                properties:
                  created_at:
                    type: string
                    example: '2022-06-26 14:30:00'
                  updated_at:
                    type: string
                    example: '2022-06-26 14:30:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /submissions/update/{submission_id}:
    put:
      security:
        - bearerAuth: []
      tags:
        - Call for Speaker Submissions
      summary: Update Submission
      description: Updates an existing speaker submission by its ID. You can modify the session topic, abstract, speaker details, track preference, and review status.
      operationId: updateCfsSubmission
      parameters:
        - name: submission_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the submission you want to update
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                date:
                  type: string
                  example: '2022-06-09'
                name:
                  type: string
                  example: The Mighty Yangtze River (Update)
            examples:
              Update An Existing Submission:
                value:
                  date: '2022-06-09'
                  name: The Mighty Yangtze River (Update)
      responses:
        '200':
          description: ''
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /submissions/delete/{submission_id}:
    delete:
      security:
        - bearerAuth: []
      tags:
        - Call for Speaker Submissions
      summary: Delete Submission
      description: Permanently deletes a speaker submission by its ID. This removes the submission and all associated reviews from the Call for Speakers program.
      operationId: deleteCfsSubmission
      parameters:
        - name: submission_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the submission you want to delete
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties: {}
            examples:
              Delete Submission:
                value: {}
      responses:
        '204':
          description: Delete
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /contacts:
    get:
      security:
        - bearerAuth: []
      tags:
        - Contacts
      summary: Get All Contacts
      description: Returns a paginated list of CRM contacts across all events in your account. Unlike registrants, contacts are not event-specific and can be linked to registrations across multiple events. Default fields returned are `id`, `first_name`, and `last_name` -- use `fields` to request additional properties. Use `expand` with `homeAddress`, `workAddress`, or `billingAddress` to include address objects. Use `search` to filter by any contact field and `sort` to control ordering.
      operationId: getAllContacts
      parameters:
        - name: fields
          in: query
          schema:
            type: string
            example: account_id,bio,birth_date,cc_email,company,created_at,email,first_name,gender,id,job_title,language,last_name,middle_name,mobile_phone,notes,prefix,profile_picture,subscribe_status,suffix,twitter_handle,updated_at,vat_number,work_phone
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: homeAddress,workAddress,billingAddress
          description: string - optional - Comma separated list of objects you want to return
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties: {}
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /contacts/{contact_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Contacts
      summary: Get One Contact
      description: Returns the full details of a single CRM contact by `contact_id`, including personal information, company, email, phone numbers, and profile data. Use `fields` to limit which properties are returned and `expand` to include related objects.
      operationId: getOneContact
      parameters:
        - name: contact_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the contact you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: account_id,bio,birth_date,cc_email,company,created_at,email,first_name,gender,id,job_title,language,last_name,middle_name,mobile_phone,notes,prefix,profile_picture,subscribe_status,suffix,twitter_handle,updated_at,vat_number,work_phone
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: registrants,unsubscribedEvents,invitationLists
          description: 'string - optional - Comma separated list of related objects to include inline. Supported values: `workAddress`, `homeAddress`, `billingAddress`, `registrants`, `unsubscribedEvents`, `invitationLists`'
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties: {}
      responses:
        '200':
          description: Get Contact Details
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  account_id:
                    type: number
                    example: 1
                  bio:
                    type: string
                    example: ''
                  birth_date:
                    type: string
                    example: ''
                  cc_email:
                    type: string
                    example: ''
                  company:
                    type: string
                    example: Alan D Rosenburg Cpa Pc
                  created_at:
                    type: string
                    example: '2015-10-12 13:48:03'
                  email:
                    type: string
                    example: atomkiewicz@hotmail.com
                  first_name:
                    type: string
                    example: Aleshia
                  gender:
                    type: object
                    properties:
                      id:
                        type: number
                        example: 1
                      value:
                        type: string
                        example: Female
                  id:
                    type: number
                    example: 1
                  job_title:
                    type: string
                    example: ''
                  language:
                    type: string
                    example: en-US
                  last_name:
                    type: string
                    example: Tomkiewicz
                  middle_name:
                    type: string
                    example: ''
                  mobile_phone:
                    type: string
                    example: ''
                  notes:
                    type: string
                    example: ''
                  prefix:
                    type: string
                    example: ''
                  profile_picture:
                    type: string
                    example: ''
                  subscribe_status:
                    type: string
                    example: subscribed
                  suffix:
                    type: string
                    example: ''
                  twitter_handle:
                    type: string
                    example: ''
                  updated_at:
                    type: string
                    example: '2015-10-12 13:48:15'
                  vat_number:
                    type: string
                    example: ''
                  work_phone:
                    type: string
                    example: +44 1835 703597
              examples:
                Get Contact Details:
                  value:
                    account_id: 1
                    bio: ''
                    birth_date: ''
                    cc_email: ''
                    company: Alan D Rosenburg Cpa Pc
                    created_at: '2015-10-12 13:48:03'
                    email: atomkiewicz@hotmail.com
                    first_name: Aleshia
                    gender:
                      id: 1
                      value: Female
                    id: 1
                    job_title: ''
                    language: en-US
                    last_name: Tomkiewicz
                    middle_name: ''
                    mobile_phone: ''
                    notes: ''
                    prefix: ''
                    profile_picture: ''
                    subscribe_status: subscribed
                    suffix: ''
                    twitter_handle: ''
                    updated_at: '2015-10-12 13:48:15'
                    vat_number: ''
                    work_phone: +44 1835 703597
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /contacts/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Contacts
      summary: Create Contact
      description: Creates a new CRM contact. The `email` field is required and must be unique within your account. You can also provide first_name, last_name, company, job_title, and other profile fields. Returns the newly created contact object. Once created, the contact can be linked to events as a registrant or speaker.
      operationId: createContact
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                email:
                  type: string
                  example: atomkiewicz@hotmail.com
                first_name:
                  type: string
                  example: Aleshia
                last_name:
                  type: string
                  example: Tomkiewicz
            examples:
              Create A New Contact:
                value:
                  email: atomkiewicz@hotmail.com
                  first_name: Aleshia
                  last_name: Tomkiewicz
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                type: object
                properties:
                  created_at:
                    type: string
                    example: '2022-06-26 14:30:00'
                  updated_at:
                    type: string
                    example: '2022-06-26 14:30:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /contacts/update/{contact_id}:
    put:
      security:
        - bearerAuth: []
      tags:
        - Contacts
      summary: Update Contact
      description: Updates an existing CRM contact by `contact_id`. Send only the fields you want to change -- any omitted fields retain their current values. Changes to contact data may propagate to linked speaker records that pull profile information from this contact.
      operationId: updateContact
      parameters:
        - name: contact_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the contact you want to update
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                email:
                  type: string
                  example: atomkiewicz@hotmail.com
                first_name:
                  type: string
                  example: Aleshia
                last_name:
                  type: string
                  example: Tomkiewicz
            examples:
              Update An Existing Contact:
                value:
                  email: atomkiewicz@hotmail.com
                  first_name: Aleshia
                  last_name: Tomkiewicz
      responses:
        '200':
          description: ''
  /contacts/forget/{contact_id}:
    put:
      security:
        - bearerAuth: []
      tags:
        - Contacts
      summary: Forget Contact
      description: Performs a GDPR “right to be forgotten” operation on a contact by `contact_id`. This anonymizes the contact's personal data and optionally removes credit card holder names. Provide `registrantIds` as a JSON array to also anonymize specific linked registrant records. This action is irreversible -- all affected personal data is permanently erased.
      operationId: forgetContact
      parameters:
        - name: contact_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the contact you want to forget
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                deleteCreditCardName:
                  type: string
                  example: '1'
                registrantIds:
                  type: string
                  example: '[1,2]'
            examples:
              Forget An Existing Contact:
                value:
                  deleteCreditCardName: '1'
                  registrantIds: '[1,2]'
      responses:
        '200':
          description: ''
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /contacts/fields:
    get:
      security:
        - bearerAuth: []
      tags:
        - Contact Fields
      summary: Get All Fields
      description: Returns a paginated list of custom field definitions available for contacts. These define the schema for custom data that can be stored on contact records beyond the standard fields. Each entry includes the field's type, name, and configuration. Use `search` to filter and `fields` to limit returned properties.
      operationId: getAllContactFields
      parameters:
        - name: fields
          in: query
          schema:
            type: string
            example: account_id,created_at,created_by,deleted,event_id,id,notes,updated_at,updated_by
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: choices,translations
          description: 'string - optional - Comma separated list of related objects to include inline. Supported values: `choices` (only returned for dropDownList, radioList, and checkboxList field types), `translations`'
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /contacts/field/{field_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Contact Fields
      summary: Get One Field
      description: Returns the full details of a single contact custom field definition by `field_id`, including its type, name, configuration, and available choices (for dropdown or multi-select fields). Use `fields` to limit which properties are returned.
      operationId: getOneContactField
      parameters:
        - name: field_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the field you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: account_id,created_at,created_by,deleted,event_id,id,notes,updated_at,updated_by
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: choices,translations
          description: 'string - optional - Comma separated list of related objects to include inline. Supported values: `choices` (only returned for dropDownList, radioList, and checkboxList field types), `translations`'
      responses:
        '200':
          description: Get Contact Field
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /data-lists:
    get:
      security:
        - bearerAuth: []
      tags:
        - Data Lists
      summary: Get All Data Lists
      description: Retrieves all data lists for your account. Data lists are reusable sets of options (e.g., countries, industries, dietary preferences) that can be assigned to custom fields across multiple events. Each list contains items that serve as dropdown or checkbox options on registration forms.
      operationId: getAllDataLists
      parameters:
        - name: fields
          in: query
          schema:
            type: string
            example: account_id,id,name,notes
          description: string - optional - Comma separated list of fields you want to return
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /data-lists/{data_list_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Data Lists
      summary: Get One Data List
      description: Retrieves a single data list by its ID, including the list name and notes.
      operationId: getOneDataList
      parameters:
        - name: data_list_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the list you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: account_id,id,name,notes
          description: string - optional - Comma separated list of fields you want to return
      responses:
        '200':
          description: Get An Data List Details
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: number
                    example: 6
                  name:
                    type: string
                    example: test - from api
              examples:
                Get An Data List Details:
                  value:
                    id: 6
                    name: test - from api
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /data-lists/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Data Lists
      summary: Create Data List
      description: Creates a new data list. Requires `name` in the request body. After creating the list, use the Data List Items endpoints to add individual options to the list.
      operationId: createDataList
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                name:
                  type: string
                  example: new data list
                notes:
                  type: string
                  example: my  notes
            examples:
              Create New Data List:
                value:
                  name: new data list
                  notes: my  notes
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                type: object
                properties:
                  created_at:
                    type: string
                    example: '2022-06-26 14:30:00'
                  updated_at:
                    type: string
                    example: '2022-06-26 14:30:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /data-lists/update/{data_list_id}:
    put:
      security:
        - bearerAuth: []
      tags:
        - Data Lists
      summary: Update Data List
      description: Updates an existing data list by its ID. You can modify the list name and notes.
      operationId: updateDataList
      parameters:
        - name: data_list_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the list you want to update
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                name:
                  type: string
                  example: updated name
                notes:
                  type: string
                  example: my updated notes
            examples:
              Update An Existing Data List:
                value:
                  name: updated name
                  notes: my updated notes
      responses:
        '200':
          description: Update An Existing Data List
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  account_id:
                    type: number
                    example: 1
                  id:
                    type: number
                    example: 7
                  name:
                    type: string
                    example: updated name
                  notes:
                    type: string
                    example: my updated notes
              examples:
                Update An Existing Data List:
                  value:
                    account_id: 1
                    id: 7
                    name: updated name
                    notes: my updated notes
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /data-lists/delete/{data_list_id}:
    delete:
      security:
        - bearerAuth: []
      tags:
        - Data Lists
      summary: Delete Data List
      description: Permanently deletes a data list and all its items. Custom fields that reference this list will lose their option set and may need to be reconfigured.
      operationId: deleteDataList
      parameters:
        - name: data_list_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the list you want to delete
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties: {}
            examples:
              Delete Data List:
                value: {}
      responses:
        '204':
          description: Delete
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /data-list-items:
    get:
      security:
        - bearerAuth: []
      tags:
        - Data List Items
      summary: Get All Data List Items
      description: Retrieves all items within a specific data list. Items are the individual options (e.g., "United States", "Canada") that appear in dropdown or checkbox fields on registration forms. Filter by `data_list_id` to get items for a specific list.
      operationId: getAllDataListItems
      parameters:
        - name: data_list_id
          in: query
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the list you want to retrieve items for
        - name: fields
          in: query
          schema:
            type: string
            example: data_list_id,id,name
          description: string - optional - Comma separated list of fields you want to return
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /data-list-items/{data_list_item_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Data List Items
      summary: Get One Data List Item
      description: Retrieves a single data list item by its ID, including the item value, sort order, and parent list reference.
      operationId: getOneDataListItem
      parameters:
        - name: data_list_item_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the item you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: data_list_id,id,name
          description: string - optional - Comma separated list of fields you want to return
      responses:
        '200':
          description: Get An Data List Item Details
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  account_id:
                    type: number
                    example: 1
                  data_list_id:
                    type: number
                    example: 2
                  id:
                    type: number
                    example: 2
                  name:
                    type: string
                    example: test
              examples:
                Get An Data List Item Details:
                  value:
                    account_id: 1
                    data_list_id: 2
                    id: 2
                    name: test
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /data-list-items/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Data List Items
      summary: Create Data List Item
      description: Creates a new item within a data list. Requires `data_list_id` and the item `value` in the request body. The new item will appear as a selectable option in any custom field that references this data list.
      operationId: createDataListItem
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                data_list_id:
                  type: string
                  example: '3'
                name:
                  type: string
                  example: new_value
            examples:
              Create New Data List Item:
                value:
                  data_list_id: '3'
                  name: new_value
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                type: object
                properties:
                  created_at:
                    type: string
                    example: '2022-06-26 14:30:00'
                  updated_at:
                    type: string
                    example: '2022-06-26 14:30:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /data-list-items/update/{data_list_item_id}:
    put:
      security:
        - bearerAuth: []
      tags:
        - Data List Items
      summary: Update Data List Item
      description: Updates an existing data list item by its ID. You can modify the item value and sort order.
      operationId: updateDataListItem
      parameters:
        - name: data_list_item_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the item you want to update
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                name:
                  type: string
                  example: updated value
            examples:
              Update An Existing Data List Item:
                value:
                  name: updated value
      responses:
        '200':
          description: Update An Existing Data List Item
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  account_id:
                    type: number
                    example: 1
                  data_list_id:
                    type: number
                    example: 3
                  id:
                    type: number
                    example: 115
                  name:
                    type: string
                    example: updated value
              examples:
                Update An Existing Data List Item:
                  value:
                    account_id: 1
                    data_list_id: 3
                    id: 115
                    name: updated value
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /data-list-items/delete/{data_list_item_id}:
    delete:
      security:
        - bearerAuth: []
      tags:
        - Data List Items
      summary: Delete Data List Item
      description: Permanently deletes an item from a data list. The option will no longer appear in custom field dropdowns. Existing registrant records that selected this item will retain the value but it will not be selectable for new entries.
      operationId: deleteDataListItem
      parameters:
        - name: data_list_item_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the item you want to delete
      responses:
        '204':
          description: Delete
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /invitation-lists:
    get:
      security:
        - bearerAuth: []
      tags:
        - Invitation Lists
      summary: Get All Invitation Lists
      description: Retrieves all invitation lists for your account. Invitation lists are curated groups of contacts who are invited to register for specific events. Lists can be used to control registration access when invitation-only mode is enabled on an event.
      operationId: getAllInvitationLists
      parameters:
        - $ref: '#/components/parameters/FieldsParameter'
        - $ref: '#/components/parameters/SearchParameter'
        - $ref: '#/components/parameters/PageParameter'
        - $ref: '#/components/parameters/PerPageParameter'
        - $ref: '#/components/parameters/SortParameter'
        - $ref: '#/components/parameters/EventIdParameter'
      responses:
        '200':
          description: Collection
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvitationListCollection'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '403':
          $ref: '#/components/responses/ForbiddenResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
  /invitation-lists/{invitation_list_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Invitation Lists
      summary: Get Invitation List
      description: Retrieves a single invitation list by its ID, including the list name, associated event, and capacity settings.
      operationId: getInvitationList
      parameters:
        - $ref: '#/components/parameters/InvitationListIdParameter'
        - $ref: '#/components/parameters/FieldsParameter'
      responses:
        '200':
          description: Detail
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvitationListItem'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '403':
          $ref: '#/components/responses/ForbiddenResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
  /invitation-lists/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Invitation Lists
      summary: Create Invitation List
      description: Creates a new invitation list for an event. Requires `event_id` and `name` in the request body. After creating the list, use the Add Contact endpoint to populate it with contacts who should be invited to register.
      operationId: createInvitationList
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
                - event_id
                - name
              properties:
                event_id:
                  type: integer
                  example: 4261
                  description: The ID of the event this invitation list belongs to
                name:
                  type: string
                  example: test list cfs
                  description: The name of the invitation list
                notes:
                  type: string
                  example: random notes
                  description: Optional notes for the invitation list
            examples:
              Create New Invitation List:
                value:
                  event_id: 4261
                  name: test list cfs
                  notes: random notes
              Create Invitation List with Notes:
                value:
                  event_id: 4261
                  name: my invitation list
                  notes: This is a test invitation list for the event
              Create Simple Invitation List:
                value:
                  event_id: 4261
                  name: simple list
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvitationListItem'
        '400':
          $ref: '#/components/responses/BadRequestResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '403':
          $ref: '#/components/responses/ForbiddenResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
  /invitation-lists/update/{invitation_list_id}:
    put:
      security:
        - bearerAuth: []
      tags:
        - Invitation Lists
      summary: Update Invitation List
      description: Updates an existing invitation list by its ID. You can modify the list name and capacity settings.
      operationId: updateInvitationList
      parameters:
        - $ref: '#/components/parameters/InvitationListIdParameter'
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
                - name
              properties:
                name:
                  type: string
                  example: test list update
                  description: The name of the invitation list
                notes:
                  type: string
                  example: random notes
                  description: Optional notes for the invitation list
            examples:
              Update Invitation List Name:
                value:
                  name: test list update
              Update Invitation List with Notes:
                value:
                  name: updated invitation list
                  notes: Updated notes for the invitation list
              Update Only Notes:
                value:
                  name: existing name
                  notes: Updated notes only
      responses:
        '200':
          description: Update Object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvitationListItem'
        '400':
          $ref: '#/components/responses/BadRequestResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '403':
          $ref: '#/components/responses/ForbiddenResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
  /invitation-lists/{invitation_list_id}/contacts:
    get:
      security:
        - bearerAuth: []
      tags:
        - Invitation Lists
      summary: Get Contacts in Invitation List
      description: Retrieves all contacts belonging to an invitation list. Results are paginated and can be filtered by `contact_id` or `status`, and sorted by `contact_id`, `status`, or `event_id`. Use `expand=contact` to include the full contact record for each entry.
      operationId: getInvitationListContacts
      parameters:
        - $ref: '#/components/parameters/InvitationListIdParameter'
        - name: fields
          in: query
          schema:
            type: string
            example: contact_id,status
          description: 'string - optional - Comma-separated list of fields to return. Allowed values: `contact_id`, `status`. Defaults to `contact_id,status`.'
        - $ref: '#/components/parameters/SearchParameter'
        - $ref: '#/components/parameters/PageParameter'
        - $ref: '#/components/parameters/PerPageParameter'
        - name: sort
          in: query
          schema:
            type: string
            example: contact_id
          description: 'string - optional - Sort field. Allowed values: `contact_id`, `status`, `event_id`. Prefix with `-` for descending order (e.g. `-contact_id`). Defaults to `contact_id` ascending.'
        - name: expand
          in: query
          schema:
            type: string
            example: contact
          description: 'string - optional - Comma-separated list of related objects to embed. Allowed value: `contact` (includes the full contact record).'
      responses:
        '200':
          description: Collection
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvitationListContactCollection'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '403':
          $ref: '#/components/responses/ForbiddenResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
  /invitation-lists/{invitation_list_id}/contact/{contact_id}:
    post:
      security:
        - bearerAuth: []
      tags:
        - Invitation Lists
      summary: Add Contact to Invitation List
      description: Adds a contact to an invitation list, granting them permission to register for the associated event. Requires `invitation_list_id` as a path parameter and `contact_id` in the request body. The contact must already exist in your account's contact database.
      operationId: addContactToInvitationList
      parameters:
        - name: invitation_list_id
          in: path
          required: true
          schema:
            type: integer
            example: 34
          description: integer - required - The ID of the invitation list
        - $ref: '#/components/parameters/ContactIdParameter'
      responses:
        '201':
          description: Contact Added Successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactAddedResponse'
        '400':
          $ref: '#/components/responses/BadRequestResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '403':
          $ref: '#/components/responses/ForbiddenResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '409':
          $ref: '#/components/responses/ConflictResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
    delete:
      security:
        - bearerAuth: []
      tags:
        - Invitation Lists
      summary: Remove Contact from Invitation List
      description: |-
        ### Invitation Lists
        This endpoint removes a contact from an existing invitation list. It returns a success response when the contact is successfully removed.
      operationId: removeContactFromInvitationList
      parameters:
        - name: invitation_list_id
          in: path
          required: true
          schema:
            type: integer
            example: 34
          description: integer - required - The ID of the invitation list
        - $ref: '#/components/parameters/ContactIdParameter'
      responses:
        '200':
          description: Contact Removed Successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactRemovedResponse'
        '400':
          $ref: '#/components/responses/BadRequestResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '403':
          $ref: '#/components/responses/ForbiddenResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
  /discounts:
    get:
      security:
        - bearerAuth: []
      tags:
        - Discount Codes
      summary: Get All Discount Codes
      description: |-
        Retrieves all discount codes for a specific event. Discount codes can be percentage-based, absolute (fixed amount), or specific (custom fees per line item). Requires the `event_id` query parameter. Use `expand` to include `alternates`, `autopopulate` field mappings, `registrantCount`, or `reservedCount`.
        <details>
          <summary><b>Available Fields</b></summary>

          <p>These are the standard fields returned for each discount code:</p>
          <table>
            <thead>
              <tr>
                <th><strong>Name</strong></th>
                <th><strong>Type</strong></th>
                <th><strong>Description</strong></th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><code>id</code></td>
                <td>integer</td>
                <td>The ID of the discount code.</td>
              </tr>
              <tr>
                <td><code>parent_id</code></td>
                <td>integer (nullable)</td>
                <td>ID of the primary discount code when this row is an alternate; <code>null</code> for primary codes.</td>
              </tr>
              <tr>
                <td><code>event_id</code></td>
                <td>integer</td>
                <td>The ID of the event to which this discount is associated.</td>
              </tr>
              <tr>
                <td><code>code</code></td>
                <td>string</td>
                <td>The unique code for the discount.</td>
              </tr>
              <tr>
                <td><code>type</code></td>
                <td>string</td>
                <td>The type of discount: <code>percentage</code>, <code>absolute</code>, or <code>specific</code>.</td>
              </tr>
              <tr>
                <td><code>percentage_discount</code></td>
                <td>number</td>
                <td>The percentage value of the discount (when <code>type</code> is <code>percentage</code>).</td>
              </tr>
              <tr>
                <td><code>absolute_discount</code></td>
                <td>number</td>
                <td>The absolute monetary value of the discount (when <code>type</code> is <code>absolute</code>).</td>
              </tr>
              <tr>
                <td><code>applicable_line_items</code></td>
                <td>array of strings (nullable)</td>
                <td>Line items the discount applies to when <code>apply_to_all</code> is <code>0</code>. Standard values: <code>reg_type</code>, <code>package</code>, <code>session</code>, plus <code>c_&lt;questionId&gt;</code> for custom questions.</td>
              </tr>
              <tr>
                <td><code>apply_to_all</code></td>
                <td>integer (0 or 1)</td>
                <td>Returned as <code>0</code> or <code>1</code> (not a JSON boolean). <code>1</code> means the discount applies to every line item.</td>
              </tr>
              <tr>
                <td><code>capacity</code></td>
                <td>integer</td>
                <td>The maximum number of times this discount can be used. <code>0</code> means unlimited.</td>
              </tr>
              <tr>
                <td><code>min_group_size</code></td>
                <td>integer</td>
                <td>The minimum group size required to use this discount.</td>
              </tr>
              <tr>
                <td><code>registrants_per_use</code></td>
                <td>integer</td>
                <td>Maximum number of times the code can be used per group of N registrants.</td>
              </tr>
              <tr>
                <td><code>custom_fees</code></td>
                <td>object (nullable)</td>
                <td>Merged set of line-item-specific fees for <code>specific</code> discounts. Outer key is line-item type, inner key is line-item ID, value is the fee as a string.</td>
              </tr>
              <tr>
                <td><code>sold_out_message</code></td>
                <td>string (nullable)</td>
                <td>Custom message shown when the discount is sold out.</td>
              </tr>
              <tr>
                <td><code>notes</code></td>
                <td>string (nullable)</td>
                <td>Additional notes or comments about the discount.</td>
              </tr>
              <tr>
                <td><code>created_at</code></td>
                <td>string (date-time)</td>
                <td>Timestamp when the discount was created.</td>
              </tr>
              <tr>
                <td><code>updated_at</code></td>
                <td>string (date-time)</td>
                <td>Timestamp when the discount was last updated.</td>
              </tr>
            </tbody>
          </table>
        </details>
        <details>
          <summary><b>Extra Fields</b></summary>

          <p>Additional fields available via the <code>expand</code> query parameter:</p>
          <table>
            <thead>
              <tr>
                <th><strong>Name</strong></th>
                <th><strong>Type</strong></th>
                <th><strong>Description</strong></th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><code>alternates</code></td>
                <td>array of objects</td>
                <td>Alternate code list, which inherits the settings of the main code.</td>
              </tr>
              <tr>
                <td><code>autopopulate</code></td>
                <td>array of objects</td>
                <td>Registrant fields automatically populated when this discount is applied.</td>
              </tr>
              <tr>
                <td><code>registrantCount</code></td>
                <td>integer</td>
                <td>Number of registrants that used this discount code.</td>
              </tr>
              <tr>
                <td><code>reservedCount</code></td>
                <td>integer</td>
                <td>Number of reserved discount codes (in-progress registrations).</td>
              </tr>
            </tbody>
          </table>
        </details>
      operationId: getAllDiscountCodes
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve discount codes for
        - name: fields
          in: query
          schema:
            type: string
            example: absolute_discount,applicable_line_items,apply_to_all,capacity,code,created_at,custom_fees,event_id,id,notes,parent_id,percentage_discount,sold_out_message,type,updated_at
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: alternates,registrantCount
          description: 'string - optional - Comma separated list of expandable objects to include. Valid values: `alternates`, `autopopulate`, `registrantCount`, `reservedCount`.'
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/discountResponse'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /discounts/{discount_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Discount Codes
      summary: Get One Discount Code
      description: Retrieves a single discount code by its ID, including discount type (`percentage`, `absolute`, or `specific`), applicable line items, capacity limits, line-item-specific fees (`custom_fees`), and group registration settings.
      operationId: getOneDiscountCode
      parameters:
        - name: discount_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the discount you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: absolute_discount,applicable_line_items,capacity,code,created_at,custom_fees,event_id,id,notes,parent_id,percentage_discount,sold_out_message,type,updated_at
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: alternates,registrantCount
          description: 'string - optional - Comma separated list of expandable objects to include. Valid values: `alternates`, `autopopulate`, `registrantCount`, `reservedCount`.'
      responses:
        '200':
          description: Get Discount Code
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/discountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /discounts/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Discount Codes
      summary: Create Discount Code
      description: Creates a new discount code for an event. Requires `event_id`, `code`, and `type` (`percentage`, `absolute`, or `specific`). Set `capacity` to limit total usage, `apply_to_all` to apply across every line item, or list specific items in `applicable_line_items` for targeted discounts. For `specific`-type discounts, supply line-item-specific fees via `custom_fees_update`. Group constraints can be configured via `min_group_size`, `registrants_per_use`, and `all_registrants_in_group`. To create an alternate code, set `parent_id` to a primary code in the same event; the alternate inherits the parent's settings (see `parent_id`).
      operationId: createDiscountCode
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/discountCreateRequest'
            examples:
              Percentage Discount:
                value:
                  event_id: 261977
                  code: SPRINGSALE2024
                  type: percentage
                  percentage_discount: 15
                  apply_to_all: true
                  capacity: 10
              Alternate Code:
                value:
                  event_id: 261977
                  code: SPRINGSALE2024-A
                  type: percentage
                  parent_id: 6715880
              Specific Fees Override:
                value:
                  event_id: 261977
                  code: VIP-SESSION-FEES
                  type: specific
                  applicable_line_items:
                    - session
                  custom_fees_update:
                    session:
                      '4147126': '315'
                      '4147127': '337.5'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/discountCreateRequest'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/discountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          description: 'Validation failed, e.g. a missing `type`, a duplicate `code`, or a `parent_id` that does not exist, is deleted, is in another event, or is itself an alternate.'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /discounts/{discount_id}/clone:
    post:
      security:
        - bearerAuth: []
      tags:
        - Discount Codes
      summary: Clone Discount Code
      description: Creates a duplicate of an existing discount code, copying all settings (type, amount, capacity, line item rules, and group constraints). Optionally provide a new `code` value via the `code` query parameter; if omitted, the original code is used with "(Clone)" appended. Alternate discount codes cannot be cloned and will return a 400 error.
      operationId: cloneDiscountCode
      parameters:
        - name: discount_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the discount code you want to clone
        - name: code
          in: query
          schema:
            type: string
            example: SPRINGSALE2024
          description: Choose a unique code for the cloned discount. If omitted, the system uses the original code with '(Clone)' appended.
      responses:
        '201':
          description: Cloned
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/discountResponse'
        '400':
          description: Cloning is not allowed for Alternate Discount Codes.
          content:
            application/json:
              schema:
                type: object
                properties:
                  name:
                    type: string
                    example: Bad Request
                  message:
                    type: string
                    example: Cloning is not allowed for Alternate Discount Codes.
                  code:
                    type: integer
                    example: 0
                  status:
                    type: integer
                    example: 400
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /discounts/update/{discount_id}:
    put:
      security:
        - bearerAuth: []
      tags:
        - Discount Codes
      summary: Update Discount Code
      description: Updates an existing discount code by its ID. All body fields are optional; only the fields included in the request body will be updated. `event_id` cannot be changed — discounts are bound to their original event. To create an alternate code under an existing discount, pass `parent_id` to the create endpoint. The clone endpoint always creates a new primary code.
      operationId: updateDiscountCode
      parameters:
        - name: discount_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the Discount Code you want to update
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/discountUpdateRequest'
            examples:
              Adjust Capacity And Notes:
                value:
                  capacity: 25
                  notes: Increased capacity for marketing campaign
              Switch To Specific With Custom Fees:
                value:
                  type: specific
                  applicable_line_items:
                    - session
                  custom_fees_update:
                    session:
                      '4147126': '295'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/discountUpdateRequest'
      responses:
        '200':
          description: Updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/discountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /discounts/delete/{discount_id}:
    delete:
      security:
        - bearerAuth: []
      tags:
        - Discount Codes
      summary: Delete Discount Code
      description: Permanently deletes a discount code by its ID. The code will no longer be usable for future registrations. Existing registrants who already applied this discount are not affected. Deleting a primary code also deletes its alternate codes. A code cannot be deleted while any registrant has selected it (or, for a primary code, one of its alternates); the request is rejected with `409` and nothing is deleted.
      operationId: deleteDiscountCode
      parameters:
        - name: discount_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the discount code you want to delete
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties: {}
            examples:
              Delete A Discount Code:
                value: {}
      responses:
        '204':
          description: Delete
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: The code (or one of its alternates) has been selected by registrants and cannot be deleted.
        '500':
          $ref: '#/components/responses/InternalServerError'
  /events:
    get:
      security:
        - bearerAuth: []
      tags:
        - Events
      summary: Get All Events
      description: |-
        Retrieves a paginated list of events for your account. Returns event configuration, scheduling, and status information.

        Use `fields` to control which fields are returned (defaults to `id`, `name` when not specified). Use `expand` to include related objects: `folder`, `location`.

        Use `expand=capacityRemaining` to include the number of places left (the event capacity minus confirmed, attended, no-show, in-progress, allocated and waitlisted registrants and pending ticket seats, ignoring reg types excluded from event capacity). The value is an integer, or `null` when the event has no capacity (a capacity of 0 or unset means unlimited). It is calculated per event, so request it only when needed and keep `per-page` small. It cannot be used in `search` or `sort`.

        Use `search` to filter by any event field (e.g., `status=live`, `start_date>=2025-01-01`, `name=*conference*`). Supports operators: `=`, `!=`, `>=`, `<=`, `>`, `<`, `*contains*`, `*beginswith*`, `*endswith*`. Results are paginated with a maximum of 200 per page.
      operationId: getAllEvents
      x-codeSamples:
        - lang: cURL
          label: cURL
          source: |
            curl -X GET "https://api.swoogo.com/api/v1/events?fields=id,name,status,start_date,end_date&search=status%3Dlive&sort=-start_date" \
              -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
        - lang: JavaScript
          label: Node.js
          source: |
            const response = await fetch(
              'https://api.swoogo.com/api/v1/events?fields=id,name,status,start_date&search=status%3Dlive',
              { headers: { 'Authorization': 'Bearer YOUR_ACCESS_TOKEN' } }
            );
            const { items } = await response.json();
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://api.swoogo.com/api/v1/events",
                params={"fields": "id,name,status,start_date", "search": "status=live"},
                headers={"Authorization": "Bearer YOUR_ACCESS_TOKEN"},
            )
            events = response.json()["items"]
      parameters:
        - name: fields
          in: query
          schema:
            type: string
            example: capacity,close_date,close_time,created_at,created_by,description,domain,end_date,end_time,folder_id,free_event,hashtag,id,name,organizer_id,start_date,start_time,status,target_attendance,timezone,type_id,updated_at,updated_by,url,webinar_url
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: folder,location
          description: 'string - optional - Comma separated list of related objects to include. Valid values: folder, location, sessions, sponsors, speakers, translations, capacityRemaining'
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties: {}
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /events/{event_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Events
      summary: Get One Event
      description: |-
        Retrieves a single event by its unique ID. Returns the full event record including name, dates, times, timezone, capacity, status, and registration URL.

        Use `fields` to limit which fields are returned. Use `expand` to include related objects such as `folder` and `location`. Use `expand=capacityRemaining` to include the number of places left (the event capacity minus confirmed, attended, no-show, in-progress, allocated and waitlisted registrants and pending ticket seats, ignoring reg types excluded from event capacity). The value is an integer, or `null` when the event has no capacity (a capacity of 0 or unset means unlimited).
      operationId: getOneEvent
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: capacity,close_date,close_time,created_at,created_by,description,domain,end_date,end_time,folder_id,free_event,hashtag,id,name,organizer_id,start_date,start_time,status,target_attendance,timezone,type_id,updated_at,updated_by,url,webinar_url
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: folder,location
          description: 'string - optional - Comma separated list of related objects to include. Valid values: folder, location, sessions, sponsors, speakers, translations, capacityRemaining'
      responses:
        '200':
          description: Get Event
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /events/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Events
      summary: Create Event
      description: |-
        Creates a new event in your account. Returns the full event record on success.

        Required fields: `name`, `start_date`, `start_time`, `end_date`, `end_time`, and `timezone` (e.g., `US/Eastern`, `Europe/London`, `Asia/Tokyo` — see the [Formatting conventions](/api-reference/formatting-conventions#time-zones) page for the accepted identifiers). Optionally set `close_date` and `close_time` to control when registration closes, `folder_id` to organize the event, and `display_url` to set the registration page URL slug.

        The event is created in draft status by default. Configure registration types, packages, and sessions after creation.
      operationId: createEvent
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                close_date:
                  type: string
                  example: '2020-04-05'
                close_time:
                  type: string
                  example: '19:13:44'
                display_url:
                  type: string
                  example: new-event
                end_date:
                  type: string
                  example: '2020-04-02'
                end_time:
                  type: string
                  example: '22:15:04'
                folder_id:
                  type: string
                  example: '2'
                name:
                  type: string
                  example: New Event
                start_date:
                  type: string
                  example: '2020-04-01'
                start_time:
                  type: string
                  example: '23:12:10'
                timezone:
                  type: string
                  example: US/Eastern
            examples:
              Create New Event:
                value:
                  close_date: '2020-04-05'
                  close_time: '19:13:44'
                  display_url: new-event
                  end_date: '2020-04-02'
                  end_time: '22:15:04'
                  folder_id: '2'
                  name: New Event
                  start_date: '2020-04-01'
                  start_time: '23:12:10'
                  timezone: US/Eastern
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                type: object
                properties:
                  created_at:
                    type: string
                    example: '2022-06-26 14:30:00'
                  updated_at:
                    type: string
                    example: '2022-06-26 14:30:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /events/{event_id}/clone:
    post:
      security:
        - bearerAuth: []
      tags:
        - Events
      summary: Clone Event
      description: |-
        Creates a new event by cloning an existing one. Copies all event settings including registration types, packages, sessions, forms, and website configuration into a new event.

        The source event is identified by `event_id` in the path. Override any fields in the request body to customize the clone (e.g., new `name`, `start_date`, `display_url`). Fields not provided in the body inherit values from the source event.

        Cloning is asynchronous and may take a few moments to complete. Registrant data is never copied -- the cloned event starts with zero registrations.
      operationId: cloneEvent
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to clone
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                close_date:
                  type: string
                  example: ''
                close_time:
                  type: string
                  example: ''
                display_url:
                  type: string
                  example: ''
                end_date:
                  type: string
                  example: ''
                end_time:
                  type: string
                  example: ''
                folder_id:
                  type: string
                  example: ''
                name:
                  type: string
                  example: ''
                start_date:
                  type: string
                  example: ''
                start_time:
                  type: string
                  example: ''
                timezone:
                  type: string
                  example: ''
            examples:
              Clone Existing Event:
                value:
                  close_date: ''
                  close_time: ''
                  display_url: ''
                  end_date: ''
                  end_time: ''
                  folder_id: ''
                  name: ''
                  start_date: ''
                  start_time: ''
                  timezone: ''
      responses:
        '200':
          description: ''
  /events/update/{event_id}:
    put:
      security:
        - bearerAuth: []
      tags:
        - Events
      summary: Update Event
      description: |-
        Updates an existing event by its unique ID. Only the fields included in the request body are modified; omitted fields are left unchanged.

        You can update scheduling (`start_date`, `end_date`, `start_time`, `end_time`), metadata (`name`, `folder_id`, `description`), and registration settings (`close_date`, `close_time`, `capacity`). Changes to dates and times on a live event take effect immediately for the registration page.
      operationId: updateEvent
      parameters:
        - name: event_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to delete
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                end_date:
                  type: string
                  example: ''
                end_time:
                  type: string
                  example: ''
                folder_id:
                  type: string
                  example: ''
                name:
                  type: string
                  example: My Original Event Updated
                start_date:
                  type: string
                  example: '2021-08-28'
                start_time:
                  type: string
                  example: ''
            examples:
              Update An Existing Event:
                value:
                  end_date: ''
                  end_time: ''
                  folder_id: ''
                  name: My Original Event Updated
                  start_date: '2021-08-28'
                  start_time: ''
      responses:
        '200':
          description: ''
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /events/fields:
    get:
      security:
        - bearerAuth: []
      tags:
        - Event Fields
      summary: Get All Fields
      description: Retrieves all custom field definitions for events. These fields define the schema for additional event-level data (e.g., custom text fields, dropdowns, URLs). Each field includes its attribute name, display type, visibility, sort order, validation requirements, and available choices.
      operationId: getAllEventFields
      parameters:
        - name: fields
          in: query
          schema:
            type: string
            example: id,attribute,name,s_hint,type,visible,required,sort,allow_html,s_url_display_format,s_button_text,s_url_image_id,s_max_links,s_link_collection_fields,choices
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: translations
          description: 'string - optional - Comma separated list of related objects to include inline. Supported value: `translations`'
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /events/field:
    post:
      security:
        - bearerAuth: []
      tags:
        - Event Fields
      summary: Create Field
      description: Creates a new custom field definition for events. Specify the field name, type (text, dropdown, checkbox, etc.), visibility, sort order, and choices (for selection-type fields). The field will become available for data entry on events.
      operationId: createEventField
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                allow_html:
                  type: string
                  example: ''
                choices:
                  type: string
                  example: ''
                name:
                  type: string
                  example: ''
                required:
                  type: string
                  example: ''
                s_button_text:
                  type: string
                  example: ''
                s_link_collection_fields:
                  type: string
                  example: ''
                s_max_links:
                  type: string
                  example: ''
                s_url_display_format:
                  type: string
                  example: ''
                s_url_image_id:
                  type: string
                  example: ''
                sort:
                  type: string
                  example: ''
                type:
                  type: string
                  example: ''
                visible:
                  type: string
                  example: ''
            examples:
              Create Event Field:
                value:
                  allow_html: ''
                  choices: ''
                  name: ''
                  required: ''
                  s_button_text: ''
                  s_link_collection_fields: ''
                  s_max_links: ''
                  s_url_display_format: ''
                  s_url_image_id: ''
                  sort: ''
                  type: ''
                  visible: ''
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                type: object
                properties:
                  created_at:
                    type: string
                    example: '2022-06-26 14:30:00'
                  updated_at:
                    type: string
                    example: '2022-06-26 14:30:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /events/field/{field_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Event Fields
      summary: Get One Field
      description: Retrieves a single custom event field definition by its ID, including the attribute name, field type, visibility settings, validation rules, and available choices (for dropdown/radio fields).
      operationId: getOneEventField
      parameters:
        - name: field_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the field you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: id,attribute,name,s_hint,type,visible,required,sort,allow_html,s_url_display_format,s_button_text,s_url_image_id,s_max_links,s_link_collection_fields,choices
          description: string - optional - Comma separated list of fields you want to return
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                allow_html:
                  type: string
                  example: ''
                choices:
                  type: string
                  example: ''
                name:
                  type: string
                  example: ''
                required:
                  type: string
                  example: ''
                s_button_text:
                  type: string
                  example: ''
                s_link_collection_fields:
                  type: string
                  example: ''
                s_max_links:
                  type: string
                  example: ''
                s_url_display_format:
                  type: string
                  example: ''
                s_url_image_id:
                  type: string
                  example: ''
                sort:
                  type: string
                  example: ''
                type:
                  type: string
                  example: ''
                visible:
                  type: string
                  example: ''
            examples:
              Update An Existing Event Field:
                value:
                  allow_html: ''
                  choices: ''
                  name: ''
                  required: ''
                  s_button_text: ''
                  s_link_collection_fields: ''
                  s_max_links: ''
                  s_url_display_format: ''
                  s_url_image_id: ''
                  sort: ''
                  type: ''
                  visible: ''
      responses:
        '200':
          description: Get Event Field
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    put:
      security:
        - bearerAuth: []
      tags:
        - Event Fields
      summary: Update Field
      description: Updates an existing custom event field definition by its ID. You can modify the field name, type, visibility, sort order, validation rules, and available choices.
      operationId: updateEventField
      parameters:
        - name: field_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the field you want to update
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                allow_html:
                  type: string
                  example: ''
                choices:
                  type: string
                  example: ''
                name:
                  type: string
                  example: ''
                required:
                  type: string
                  example: ''
                s_button_text:
                  type: string
                  example: ''
                s_link_collection_fields:
                  type: string
                  example: ''
                s_max_links:
                  type: string
                  example: ''
                s_url_display_format:
                  type: string
                  example: ''
                s_url_image_id:
                  type: string
                  example: ''
                sort:
                  type: string
                  example: ''
                type:
                  type: string
                  example: ''
                visible:
                  type: string
                  example: ''
            examples:
              Update An Existing Event Field:
                value:
                  allow_html: ''
                  choices: ''
                  name: ''
                  required: ''
                  s_button_text: ''
                  s_link_collection_fields: ''
                  s_max_links: ''
                  s_url_display_format: ''
                  s_url_image_id: ''
                  sort: ''
                  type: ''
                  visible: ''
      responses:
        '200':
          description: ''
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    delete:
      security:
        - bearerAuth: []
      tags:
        - Event Fields
      summary: Delete Field
      description: Permanently deletes a custom event field definition by its ID. Any data stored in this field on existing events will no longer be accessible.
      operationId: deleteEventField
      parameters:
        - name: field_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the field you want to delete
      responses:
        '204':
          description: Delete
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /badges:
    get:
      security:
        - bearerAuth: []
      tags:
        - Event Badges
      summary: Get All Badges
      description: Retrieves all badge templates configured for an event. Badges are printable name tags or credentials for on-site check-in. Each badge includes its layout configuration and associated registration types.
      operationId: getAllEventBadges
      parameters:
        - name: event_id
          in: query
          schema:
            type: integer
            example: 1
          description: integer - optional - Get the badges for a specific event ID
        - name: fields
          in: query
          schema:
            type: string
            example: created_at,created_by,id,name,notes,updated_at,updated_by
          description: string - optional - Comma separated list of fields you want to return
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /badges/{badge_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Event Badges
      summary: Get One Badge
      description: Retrieves a single badge template by its ID, including the layout configuration, dimensions, and associated registration types.
      operationId: getOneEventBadge
      parameters:
        - name: badge_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the badge you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: created_at,created_by,id,name,notes,updated_at,updated_by
          description: string - optional - Comma separated list of fields you want to return
      responses:
        '200':
          description: Get Badge
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /badges/{badge_id}/generate/{registrant_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Event Badges
      summary: Create Badge
      description: Creates a new badge template for an event. Configure the badge layout, dimensions, and which registration types should use this badge for on-site printing.
      operationId: createEventBadge
      parameters:
        - name: badge_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the badge you want to get
        - name: registrant_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the registrant you want to generate a badge for
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                type: object
                properties:
                  created_at:
                    type: string
                    example: '2022-06-26 14:30:00'
                  updated_at:
                    type: string
                    example: '2022-06-26 14:30:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /folders:
    get:
      security:
        - bearerAuth: []
      tags:
        - Event Folders
      summary: Get All Folders
      description: Retrieves all event folders used to organize events in the dashboard. Folders support a hierarchical structure via `parent_id` for nested organization. Read-only endpoint.
      operationId: getAllEventFolders
      parameters:
        - name: fields
          in: query
          schema:
            type: string
            example: id,name,parent_id
          description: string - optional - Comma separated list of fields you want to return
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /folders/{folder_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Event Folders
      summary: Get One Folder
      description: Retrieves a single event folder by its ID, including the folder name and parent folder reference for hierarchical navigation.
      operationId: getOneEventFolder
      parameters:
        - name: folder_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the folder you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: id,name,parent_id
          description: string - optional - Comma separated list of fields you want to return
      responses:
        '200':
          description: Get Event Folder
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: number
                    example: 2
                  name:
                    type: string
                    example: Los Angeles
                  parent_id:
                    type: number
                    example: 0
              examples:
                Get Event Folder:
                  value:
                    id: 2
                    name: Los Angeles
                    parent_id: 0
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /event-questions:
    get:
      security:
        - bearerAuth: []
      tags:
        - Event Questions
      summary: Get All Questions
      description: |-
        Retrieves all registration form questions configured for an event. Questions define the fields that registrants fill out during registration (e.g., name, email, custom questions). Defaults to questions on the main website but can be filtered by module. Requires the `event_id` query parameter.
        <details>
          <summary><b>Extra Fields</b></summary>

          <p>This is the extra information that can be returned if required by specifying what you need in the expand variable:</p>
          <table>
            <thead>
              <tr>
                <th><strong>Name</strong></th>
                <th><strong>Type</strong></th>
                <th><strong>Description</strong></th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><code>choices</code></td>
                <td>array</td>
                <td>List of response options for the question (e.g. for dropdown, radio, or checkbox questions).</td>
              </tr>
              <tr>
                <td><code>page</code></td>
                <td>object</td>
                <td>The registration form page this question belongs to.</td>
              </tr>
              <tr>
                <td><code>translations</code></td>
                <td>object</td>
                <td>Question translations by language.</td>
              </tr>
            </tbody>
          </table>
        </details>
      operationId: getAllEventQuestions
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve questions for
        - name: fields
          in: query
          schema:
            type: string
            example: id,event_id,page_id,name,public_short_name,admin_short_name,hint,attribute,type,sort,required,visible,created_at,updated_at,module,form
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: choices
          description: string - optional - Comma separated list of related objects to include (choices, page, translations)
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /event-questions/{question_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Event Questions
      summary: Get One Question
      description: |-
        Retrieves a single registration form question by its ID, including the question text, field type, validation rules, and available choices. Use `expand` to include related data.
        <details>
          <summary><b>Extra Fields</b></summary>

          <p>This is the extra information that can be returned if required by specifying what you need in the expand variable:</p>
          <table>
            <thead>
              <tr>
                <th><strong>Name</strong></th>
                <th><strong>Type</strong></th>
                <th><strong>Description</strong></th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><code>choices</code></td>
                <td>array</td>
                <td>List of response options for the question (e.g. for dropdown, radio, or checkbox questions).</td>
              </tr>
              <tr>
                <td><code>page</code></td>
                <td>object</td>
                <td>The registration form page this question belongs to.</td>
              </tr>
              <tr>
                <td><code>translations</code></td>
                <td>object</td>
                <td>Question translations by language.</td>
              </tr>
            </tbody>
          </table>
        </details>
      operationId: getOneEventQuestion
      parameters:
        - name: question_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the question you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: id,event_id,page_id,name,public_short_name,admin_short_name,hint,attribute,type,sort,required,visible,created_at,updated_at
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: choices
          description: string - optional - Comma separated list of related objects to include (choices, page, translations)
      responses:
        '200':
          description: Get Event Question
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  attribute:
                    type: string
                    example: email
                  created_at:
                    type: string
                    example: '2016-09-06 18:32:59'
                  event_id:
                    type: number
                    example: 1
                  id:
                    type: number
                    example: 1
                  name:
                    type: string
                    example: Email Address
                  required:
                    type: boolean
                    example: true
                  updated_at:
                    type: string
                    example: '2016-09-06 18:32:59'
                  visible:
                    type: boolean
                    example: true
              examples:
                Get Event Question:
                  value:
                    attribute: email
                    created_at: '2016-09-06 18:32:59'
                    event_id: 1
                    id: 1
                    name: Email Address
                    required: true
                    updated_at: '2016-09-06 18:32:59'
                    visible: true
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /event-websites:
    get:
      security:
        - bearerAuth: []
      tags:
        - Event Websites
      summary: Get All Websites
      description: Retrieves all websites associated with an event. Each event can have multiple websites (e.g., main registration site, speaker portal, exhibitor portal). Requires the `event_id` query parameter. Read-only endpoint.
      operationId: getAllEventWebsites
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve websites for
        - name: fields
          in: query
          schema:
            type: string
            example: id,account_id,event_id,url,module,theme_id
          description: string - optional - Comma separated list of fields you want to return
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
            example: ''
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /event-websites/{website_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Event Websites
      summary: Get One Website
      description: Retrieves a single event website by its ID, including the site URL, configuration, and associated pages.
      operationId: getOneEventWebsite
      parameters:
        - name: website_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the website you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: id,account_id,event_id,url,module,theme_id
          description: string - optional - Comma separated list of fields you want to return
      responses:
        '200':
          description: Get A Website's Details
          content:
            application/json:
              schema:
                type: object
                properties:
                  account_id:
                    type: number
                    example: 1
                  event_id:
                    type: number
                    example: 1
                  id:
                    type: number
                    example: 1
                  url:
                    type: string
                    example: ''
              examples:
                Get A Website's Details:
                  value:
                    account_id: 1
                    event_id: 1
                    id: 1
                    url: ''
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /image/{image_type}/{image_id}/{field_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Images
      summary: Get Image URL
      description: Retrieves the URL for an image associated with a specific object (e.g., event logo, speaker photo, sponsor banner). Requires `image_type` (the object type), `image_id` (the object's ID), and `field_id` (the image field) as path parameters.
      operationId: getOneImageUrl
      parameters:
        - name: image_type
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the image you want to get
        - name: image_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the image you want to get
        - name: field_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the image you want to get
      responses:
        '200':
          description: Get an Image URL
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  field:
                    type: string
                    example: profile_picture
                  id:
                    type: number
                    example: 26361060
                  message:
                    type: string
                    example: File Retrieved Successfully
                  status:
                    type: number
                    example: 200
                  type:
                    type: string
                    example: registrant
                  url:
                    type: string
                    example: https://assets.swoogo.com/uploads/full/2879900-64fa2b4640a68.png
              examples:
                Get an Image URL:
                  value:
                    field: profile_picture
                    id: 26361060
                    message: File Retrieved Successfully
                    status: 200
                    type: registrant
                    url: https://assets.swoogo.com/uploads/full/2879900-64fa2b4640a68.png
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    put:
      security:
        - bearerAuth: []
      tags:
        - Images
      summary: Update Image Field
      description: 'Uploads or replaces an image for a specific field on an object (registrant, contact, or sponsor). Send as a `multipart/form-data` request with a single `file` parameter containing the image. The file must be no larger than 5MB and use a valid extension: jpg, jpeg, gif, png, webp, or svg. The `image_type` path parameter specifies the object type, `image_id` the object''s ID, and `field_id` the target image field (e.g., profile_picture).'
      operationId: updateImageField
      parameters:
        - name: image_type
          in: path
          required: true
          schema:
            type: string
            enum:
              - registrant
              - contact
              - sponsor
            example: contact
          description: string - required - The model type of the object being affected ('registrant', 'contact' or 'sponsor')
        - name: image_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The Swoogo ID of the object being affected
        - name: field_id
          in: path
          required: true
          schema:
            type: string
            example: c_12345
          description: string - required - The ID of the image field to be updated (e.g. profile_picture, c_12345)
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - file
              properties:
                file:
                  description: Image file no larger than 5MB in size and has one of these valid extensions 'jpg', 'jpeg', 'gif', 'png', 'webp', 'svg'
                  type: string
                  format: binary
      responses:
        '200':
          description: Image uploaded successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: File Uploaded Successfully
                  status:
                    type: integer
                    example: 200
                  type:
                    type: string
                    enum:
                      - registrant
                      - contact
                      - sponsor
                    example: registrant
                  id:
                    type: string
                    example: '1'
                  field:
                    type: string
                    example: profile_picture
                  url:
                    type: string
                    nullable: true
                    example: https://assets.swoogo.com/uploads/medium/123-abc.jpg
        '400':
          description: 'The request is invalid. Common causes: no file attached, file exceeds the 5MB size limit, unsupported file extension, invalid model type, missing field ID, or the specified field does not exist on the object.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                fileTooLarge:
                  summary: File exceeds size limit
                  value:
                    name: Bad Request
                    message: Your file must be a maximum of 5MB in size
                    code: 0
                    status: 400
                noFileAttached:
                  summary: No file in request
                  value:
                    name: Bad Request
                    message: There was no file attached to this request
                    code: 0
                    status: 400
                unsupportedType:
                  summary: Unsupported model type
                  value:
                    name: Bad Request
                    message: Model type not supported
                    code: 0
                    status: 400
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    delete:
      security:
        - bearerAuth: []
      tags:
        - Images
      summary: Delete Image Field
      description: Removes an image from a specific field on an object. The image file is deleted and the field is cleared. Requires `image_type`, `image_id`, and `field_id` as path parameters.
      operationId: deleteImageField
      parameters:
        - name: image_type
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the image you want to delete
        - name: image_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the image you want to delete
        - name: field_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the image you want to delete
      responses:
        '204':
          description: Delete
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /packages:
    get:
      security:
        - bearerAuth: []
      tags:
        - Packages
      summary: Get All Packages
      description: |-
        Retrieves all registration packages (pricing tiers) for a specific event. Packages define the pricing structure that registrants select during registration, including capacity limits and group size constraints. Requires the `event_id` query parameter.

        When the `fields` query parameter is omitted, the response only includes `id`, `name`, and `capacity` for each package. To retrieve additional fields, list them explicitly in `fields`. Use `expand` to include related objects such as fee pricing or translations.

        Soft-deleted packages are excluded from the results. Results default to the package `sort` order ascending unless overridden with the `sort` parameter.
        <details>
          <summary><b>Extra Fields</b></summary>

          <p>This is the extra information that can be returned if required by specifying what you need in the expand variable:</p>
          <table>
            <thead>
              <tr>
                <th><strong>Name</strong></th>
                <th><strong>Type</strong></th>
                <th><strong>Description</strong></th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><code>fees</code></td>
                <td>object</td>
                <td>Fee record for this package, including base price and any conditional pricing.</td>
              </tr>
              <tr>
                <td><code>earlyBirds</code></td>
                <td>object</td>
                <td>Early-bird pricing configuration for this package's fee. Contains a <code>type</code> string and either a flat <code>price</code>/<code>registrations</code> pair (registrations-based) or an <code>items</code> array of date-based tiers.</td>
              </tr>
              <tr>
                <td><code>translations</code></td>
                <td>object</td>
                <td>Custom translations for this package, keyed by language code (e.g. <code>en</code>, <code>fr</code>). Each value is an object of field name → translated string.</td>
              </tr>
            </tbody>
          </table>
        </details>
      operationId: getAllPackages
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve packages for
        - name: fields
          in: query
          schema:
            type: string
            example: id,name,public_short_name,admin_short_name,description,capacity,sold_out_message,min_group_size,max_group_size,created_at,updated_at
          description: string - optional - Comma separated list of fields you want to return. When omitted, only `id`, `name`, and `capacity` are returned.
        - name: expand
          in: query
          schema:
            type: string
            example: fees
          description: string - optional - Comma separated list of related objects to embed in each item. Supported values are `fees`, `earlyBirds`, and `translations`.
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*. Searchable fields are `id`, `name`, `public_short_name`, `admin_short_name`, `description`, `capacity`, `min_group_size`, `max_group_size`, `created_at`, and `updated_at`.
        - name: searchCondition
          in: query
          schema:
            type: string
            enum:
              - and
              - or
            default: and
          description: string - optional - Logical operator used to combine multiple `search` conditions. Defaults to `and` (all conditions must match). Set to `or` for any-match behavior.
          example: and
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page. Defaults to 25. Maximum is 200 when `expand` is present.
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id"). Defaults to ascending package sort order.
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          example: 1
                        name:
                          type: string
                          example: Gold Package
                        public_short_name:
                          type: string
                          example: Gold
                        admin_short_name:
                          type: string
                          example: Gold
                        description:
                          type: string
                          example: Full conference access including dinner.
                        capacity:
                          type: integer
                          nullable: true
                          example: 100
                        sold_out_message:
                          type: string
                          example: Sold Out
                        min_group_size:
                          type: integer
                          nullable: true
                          example: null
                        max_group_size:
                          type: integer
                          nullable: true
                          example: null
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                        fees:
                          type: object
                          description: Present when `expand=fees` is requested. Fee record for this package.
                          properties:
                            id:
                              type: integer
                              example: 42
                            package_id:
                              type: integer
                              example: 1
                            price:
                              type: number
                              format: float
                              nullable: true
                              example: 199
                            conditional_prices:
                              type: object
                              nullable: true
                              description: Object keyed by reg-type name, containing the conditional price for that reg type.
                              example:
                                Standard: '149.00'
                        earlyBirds:
                          type: object
                          description: Present when `expand=earlyBirds` is requested. Early-bird pricing configuration.
                          properties:
                            type:
                              type: string
                              description: Pricing strategy — `registrations` (count-based) or `date` (date-based).
                              example: date
                            price:
                              type: number
                              format: float
                              description: Flat early-bird price (only present when `type` is `registrations`).
                              example: 149
                            registrations:
                              type: integer
                              description: Registrant count cutoff (only present when `type` is `registrations`).
                              example: 50
                            items:
                              type: array
                              description: Date-based early-bird tiers (only present when `type` is `date`).
                              items:
                                type: object
                                properties:
                                  price:
                                    type: number
                                    format: float
                                    example: 149
                                  date:
                                    type: string
                                    example: '2024-03-01 00:00:00'
                                  conditional_fees:
                                    type: object
                                    description: Conditional prices for this tier, keyed by reg-type name.
                                    example:
                                      Standard: '129.00'
                        translations:
                          type: object
                          description: Present when `expand=translations` is requested. Custom translations keyed by language code.
                          additionalProperties:
                            type: object
                            description: Translation fields for a single language, keyed by field name.
                            additionalProperties:
                              type: string
                          example:
                            en:
                              name: Gold Package
                            fr:
                              name: Forfait Or
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 25
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /packages/{package_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Packages
      summary: Get One Package
      description: |-
        Retrieves a single registration package by its ID, including name, capacity, group size limits, and sold-out message. Use the `expand` parameter to include related `earlyBirds` pricing tiers.
        <details>
          <summary><b>Extra Fields</b></summary>

          <p>This is the extra information that can be returned if required by specifying what you need in the expand variable:</p>
          <table>
            <thead>
              <tr>
                <th><strong>Name</strong></th>
                <th><strong>Type</strong></th>
                <th><strong>Description</strong></th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><code>earlyBirds</code></td>
                <td>object</td>
                <td>List all available early birds for this package</td>
              </tr>
            </tbody>
          </table>
        </details>
      operationId: getOnePackage
      parameters:
        - name: package_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the package you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: id,name,public_short_name,admin_short_name,description,capacity,sold_out_message,min_group_size,max_group_size,created_at,updated_at
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: ''
          description: string - optional - Comma separated list of objects you want to return
      responses:
        '200':
          description: Get Package
          content:
            application/json:
              schema:
                type: object
                properties:
                  admin_short_name:
                    type: string
                    example: ''
                  capacity:
                    nullable: true
                    example: null
                  created_at:
                    type: string
                    example: '2017-01-20 09:59:39'
                  description:
                    type: string
                    example: ''
                  id:
                    type: number
                    example: 1
                  max_group_size:
                    nullable: true
                    example: null
                  min_group_size:
                    nullable: true
                    example: null
                  name:
                    type: string
                    example: Gold Package
                  public_short_name:
                    type: string
                    example: ''
                  sold_out_message:
                    type: string
                    example: Sold Out
                  updated_at:
                    type: string
                    example: '2017-05-26 14:44:05'
              examples:
                Get Package:
                  value:
                    admin_short_name: ''
                    capacity: null
                    created_at: '2017-01-20 09:59:39'
                    description: ''
                    id: 1
                    max_group_size: null
                    min_group_size: null
                    name: Gold Package
                    public_short_name: ''
                    sold_out_message: Sold Out
                    updated_at: '2017-05-26 14:44:05'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /packages/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Packages
      summary: Create Package
      description: Creates a new registration package for an event. Requires `event_id` and `name` in the request body. Optionally set `capacity` to limit the number of registrants who can select this package, and configure `min_group_size`/`max_group_size` for group registration constraints.
      operationId: createPackage
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                admin_short_name:
                  type: string
                  example: ''
                capacity:
                  type: string
                  example: ''
                event_id:
                  type: string
                  example: '1'
                name:
                  type: string
                  example: Sample Package
                public_short_name:
                  type: string
                  example: ''
            examples:
              Create A Package:
                value:
                  admin_short_name: ''
                  capacity: ''
                  event_id: '1'
                  name: Sample Package
                  public_short_name: ''
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                type: object
                properties:
                  created_at:
                    type: string
                    example: '2022-06-26 14:30:00'
                  updated_at:
                    type: string
                    example: '2022-06-26 14:30:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /packages/update/{package_id}:
    put:
      security:
        - bearerAuth: []
      tags:
        - Packages
      summary: Update Package
      description: Updates an existing registration package by its ID. You can modify the package name, capacity, group size limits, display names, and sold-out message. Only the fields included in the request body will be updated.
      operationId: updatePackage
      parameters:
        - name: package_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the package you want to update
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                admin_short_name:
                  type: string
                  example: ''
                capacity:
                  type: string
                  example: ''
                name:
                  type: string
                  example: Updated Package Name
                public_short_name:
                  type: string
                  example: ''
            examples:
              Update A Package:
                value:
                  admin_short_name: ''
                  capacity: ''
                  name: Updated Package Name
                  public_short_name: ''
      responses:
        '200':
          description: Update A Package
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  admin_short_name:
                    type: string
                    example: ''
                  capacity:
                    type: string
                    example: ''
                  created_at:
                    type: string
                    example: '2023-05-17 10:35:05'
                  description:
                    nullable: true
                    example: null
                  id:
                    type: number
                    example: 22
                  max_group_size:
                    nullable: true
                    example: null
                  min_group_size:
                    nullable: true
                    example: null
                  name:
                    type: string
                    example: Updated Package Name
                  public_short_name:
                    type: string
                    example: ''
                  sold_out_message:
                    type: string
                    example: Sold Out
                  updated_at:
                    type: string
                    example: '2023-05-17 10:46:19'
              examples:
                Update A Package:
                  value:
                    admin_short_name: ''
                    capacity: ''
                    created_at: '2023-05-17 10:35:05'
                    description: null
                    id: 22
                    max_group_size: null
                    min_group_size: null
                    name: Updated Package Name
                    public_short_name: ''
                    sold_out_message: Sold Out
                    updated_at: '2023-05-17 10:46:19'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /packages/delete/{package_id}:
    delete:
      security:
        - bearerAuth: []
      tags:
        - Packages
      summary: Delete Package
      description: Permanently deletes a registration package by its ID. This will remove the package as a selectable option for future registrations. Existing registrants already assigned to this package are not affected.
      operationId: deletePackage
      parameters:
        - name: package_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the package you want to delete
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties: {}
            examples:
              Delete Package:
                value: {}
      responses:
        '204':
          description: Delete
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /packages/{package_id}/fee:
    get:
      tags:
        - Package Fees
      summary: Get package fee configuration
      description: |
        Retrieve the current fee configuration for a specific package, including base price and conditional pricing.

        **Note:** Only standard conditional pricing is exposed through the API. Early bird pricing is not accessible.
      operationId: getPackageFee
      parameters:
        - name: package_id
          in: path
          required: true
          description: The unique identifier of the package
          schema:
            type: integer
            minimum: 1
          example: 2
      responses:
        '200':
          description: Package fee configuration retrieved successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/FeeResponse'
                  - type: object
                    properties:
                      package_id:
                        type: integer
                        description: The package ID this fee belongs to
                        example: 2
                    required:
                      - package_id
              examples:
                packageFee:
                  summary: Package fee with conditional pricing
                  value:
                    id: 124
                    package_id: 2
                    price: '20.00'
                    conditional_prices:
                      '76': '10.00'
                      '77': '5.00'
        '404':
          $ref: '#/components/responses/ParentNotFound'
    put:
      tags:
        - Package Fees
      summary: Update package fee configuration
      description: |
        Update the fee configuration for a specific package. You can update the base price and/or conditional pricing.

        **Important Notes:**
        - Only existing conditional pricing keys can be updated
        - Non-existent keys are silently ignored
        - Empty strings can be used to clear specific conditional prices
        - Early bird pricing cannot be modified through this API
      operationId: updatePackageFee
      parameters:
        - name: package_id
          in: path
          required: true
          description: The unique identifier of the package
          schema:
            type: integer
            minimum: 1
          example: 2
      requestBody:
        description: Fee configuration to update
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FeeUpdateRequest'
            examples:
              updatePriceOnly:
                $ref: '#/components/examples/updatePriceOnly'
              updateConditionalPricesOnly:
                $ref: '#/components/examples/updateConditionalPricesOnly'
              updateBothPriceAndConditional:
                $ref: '#/components/examples/updateBothPriceAndConditional'
              partialConditionalUpdate:
                $ref: '#/components/examples/partialConditionalUpdate'
              clearSpecificConditionalPrices:
                $ref: '#/components/examples/clearSpecificConditionalPrices'
              mixedConditionalOperations:
                $ref: '#/components/examples/mixedConditionalOperations'
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                price:
                  type: string
                  format: decimal
                  example: '25.00'
                conditional_prices[76]:
                  type: string
                  format: decimal
                  example: '15.00'
                conditional_prices[77]:
                  type: string
                  format: decimal
                  example: '8.00'
      responses:
        '200':
          description: Package fee updated successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/FeeResponse'
                  - type: object
                    properties:
                      package_id:
                        type: integer
                        description: The package ID this fee belongs to
                        example: 2
                    required:
                      - package_id
              examples:
                updatePriceOnly:
                  $ref: '#/components/examples/updatePriceOnly'
                updateConditionalPricesOnly:
                  $ref: '#/components/examples/updateConditionalPricesOnly'
                updateBothPriceAndConditional:
                  $ref: '#/components/examples/updateBothPriceAndConditional'
                partialConditionalUpdate:
                  $ref: '#/components/examples/partialConditionalUpdate'
                clearSpecificConditionalPrices:
                  $ref: '#/components/examples/clearSpecificConditionalPrices'
                mixedConditionalOperations:
                  $ref: '#/components/examples/mixedConditionalOperations'
        '404':
          $ref: '#/components/responses/ParentNotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
    delete:
      tags:
        - Package Fees
      summary: Remove package fee
      description: |
        Remove the fee for a specific package, effectively making it free. This sets the base price to 0 and clears all conditional pricing.

        **Note:** This operation cannot be undone through the API. The fee will need to be reconfigured manually if pricing needs to be restored.
      operationId: deletePackageFee
      parameters:
        - name: package_id
          in: path
          required: true
          description: The unique identifier of the package
          schema:
            type: integer
            minimum: 1
          example: 2
      responses:
        '200':
          description: Package fee removed successfully (package is now free)
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/FeeResponse'
                  - type: object
                    properties:
                      package_id:
                        type: integer
                        description: The package ID this fee belongs to
                        example: 2
                      price:
                        type: string
                        example: '0'
                      conditional_prices:
                        type: object
                        description: All conditional prices are cleared (empty strings)
                        example:
                          '76': ''
                          '77': ''
                    required:
                      - package_id
              examples:
                removedFee:
                  summary: Package fee removed (now free)
                  value:
                    id: 124
                    package_id: 2
                    price: '0'
                    conditional_prices:
                      '76': ''
                      '77': ''
        '404':
          $ref: '#/components/responses/ParentNotFound'
  /pages:
    get:
      security:
        - bearerAuth: []
      tags:
        - Pages
      summary: Get All Pages
      description: Retrieves all pages for a specific event website. Pages represent individual web pages within an event site (e.g., registration page, agenda, speaker directory). Requires the `event_id` query parameter. Read-only endpoint.
      operationId: getAllPages
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve pages for
        - name: fields
          in: query
          schema:
            type: string
            example: id,parent_id,event_id,event_website_id,name,slug,fullUrl,type,sort,icon,created_at,updated_at
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: eventQuestions,translations
          description: 'string - optional - Comma separated list of related objects to include inline. Supported values: `eventQuestions`, `translations`'
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /pages/{page_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Pages
      summary: Get One Page
      description: Retrieves a single event page by its ID, including the page name, slug, full URL, type (e.g., registration, agenda), sort order, and associated website. Read-only endpoint.
      operationId: getOnePage
      parameters:
        - name: page_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the page you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: id,parent_id,event_id,event_website_id,name,slug,fullUrl,type,sort,icon,created_at,updated_at
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: eventQuestions,translations
          description: 'string - optional - Comma separated list of related objects to include inline. Supported values: `eventQuestions`, `translations`'
      responses:
        '200':
          description: Get Page
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  created_at:
                    type: string
                    example: '2016-09-06 18:32:59'
                  event_id:
                    type: number
                    example: 1
                  id:
                    type: number
                    example: 1
                  name:
                    type: string
                    example: Begin Registration
                  slug:
                    type: string
                    example: begin
                  type:
                    type: string
                    example: registration
                  updated_at:
                    type: string
                    example: '2016-09-06 18:32:59'
              examples:
                Get Page:
                  value:
                    created_at: '2016-09-06 18:32:59'
                    event_id: 1
                    id: 1
                    name: Begin Registration
                    slug: begin
                    type: registration
                    updated_at: '2016-09-06 18:32:59'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /registrants:
    get:
      security:
        - bearerAuth: []
      tags:
        - Registrants
      summary: Get All Registrants
      description: |-
        Retrieves a paginated list of registrants for a specific event. Returns registrant profile data, registration status, and financial summaries.

        Requires `event_id` as a query parameter. Use `fields` to control which fields are returned (defaults to `id`, `first_name`, `last_name` when not specified). Use `expand` to include related address objects: `homeAddress`, `workAddress`, `billingAddress`.

        Use `search` to filter by any registrant field (e.g., `registration_status=confirmed`, `email=*@example.com*`). Supports operators: `=`, `!=`, `>=`, `<=`, `>`, `<`, `*contains*`, `*beginswith*`, `*endswith*`. Maximum 200 results per page with `per-page`, or up to 1000 per page when no `expand` is used.
      operationId: getAllRegistrants
      x-codeSamples:
        - lang: cURL
          label: cURL
          source: |
            curl -X GET "https://api.swoogo.com/api/v1/registrants?event_id=123&fields=id,email,first_name,last_name,registration_status&search=registration_status%3Dconfirmed&per-page=50" \
              -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
        - lang: JavaScript
          label: Node.js
          source: |
            const params = new URLSearchParams({
              event_id: '123',
              fields: 'id,email,first_name,last_name,registration_status',
              search: 'registration_status=confirmed',
              'per-page': '50',
            });

            const response = await fetch(
              `https://api.swoogo.com/api/v1/registrants?${params}`,
              { headers: { 'Authorization': 'Bearer YOUR_ACCESS_TOKEN' } }
            );

            const { items, _meta } = await response.json();
            console.log(`Page ${_meta.currentPage} of ${_meta.pageCount} (${_meta.totalCount} total)`);
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://api.swoogo.com/api/v1/registrants",
                params={
                    "event_id": 123,
                    "fields": "id,email,first_name,last_name,registration_status",
                    "search": "registration_status=confirmed",
                    "per-page": 50,
                },
                headers={"Authorization": "Bearer YOUR_ACCESS_TOKEN"},
            )

            data = response.json()
            for registrant in data["items"]:
                print(f"{registrant['first_name']} {registrant['last_name']} - {registrant['email']}")
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve registrants for
        - name: fields
          in: query
          schema:
            type: string
            example: id,event_id,group_id,reg_type_id,package_id,discount_code,email,prefix,first_name,middle_name,last_name,suffix,company,job_title,work_phone,mobile_phone,profile_picture,twitter_handle,gender,birth_date,cc_email,bio,vat_number,contact_id,session_ids,waitlisted_session_ids,notes,reference,ip_address,individual_net,individual_tax,individual_tax_2,individual_gross,group_net,group_tax,group_tax_2,group_gross,group_paid,created_at,updated_at,registered_at,cancelled_at,checked_in_at,ext_token,secure_id,timezone,registration_status,language,payment_method,po_number,group_balance_due,payment_status
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: homeAddress,workAddress,billingAddress
          description: string - optional - Comma separated list of objects you want to return
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties: {}
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /registrants/{registrant_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Registrants
      summary: Get One Registrant
      description: |-
        Retrieves a single registrant by their unique ID. Returns the full registrant profile including personal details, registration status, financial totals, and session assignments.

        Use `fields` to limit which fields are returned. Use `expand` to include related address objects: `homeAddress`, `workAddress`, `billingAddress`. Financial fields like `individual_net`, `group_gross`, and `payment_status` are always read-only.
      operationId: getOneRegistrant
      x-codeSamples:
        - lang: cURL
          label: cURL
          source: |
            curl -X GET "https://api.swoogo.com/api/v1/registrants/26361060?fields=id,email,first_name,last_name,registration_status,payment_status&expand=homeAddress" \
              -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
      parameters:
        - name: registrant_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the registrant you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: id,event_id,group_id,reg_type_id,package_id,discount_code,email,prefix,first_name,middle_name,last_name,suffix,company,job_title,work_phone,mobile_phone,profile_picture,twitter_handle,gender,birth_date,cc_email,bio,vat_number,contact_id,session_ids,waitlisted_session_ids,notes,reference,ip_address,individual_net,individual_tax,individual_tax_2,individual_gross,group_net,group_tax,group_tax_2,group_gross,group_paid,created_at,updated_at,registered_at,cancelled_at,checked_in_at,ext_token,secure_id,timezone,registration_status,language,payment_method,po_number,group_balance_due,payment_status
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: homeAddress,workAddress,billingAddress
          description: string - optional - Comma separated list of objects you want to return
      responses:
        '200':
          description: Get Registrant
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  bio:
                    type: string
                    example: ''
                  birth_date:
                    type: string
                    example: ''
                  cc_email:
                    type: string
                    example: ''
                  company:
                    type: string
                    example: Alan D Rosenburg Cpa Pc
                  created_at:
                    type: string
                    example: '2015-10-12 13:48:03'
                  email:
                    type: string
                    example: atomkiewicz@hotmail.com
                  event_id:
                    type: number
                    example: 1
                  first_name:
                    type: string
                    example: Aleshia
                  gender:
                    type: object
                    properties:
                      id:
                        type: number
                        example: 1
                      value:
                        type: string
                        example: Female
                  id:
                    type: number
                    example: 1
                  job_title:
                    type: string
                    example: ''
                  last_name:
                    type: string
                    example: Tomkiewicz
                  middle_name:
                    type: string
                    example: ''
                  mobile_phone:
                    type: string
                    example: ''
                  prefix:
                    type: string
                    example: ''
                  profile_picture:
                    type: string
                    example: ''
                  suffix:
                    type: string
                    example: ''
                  twitter_handle:
                    type: string
                    example: ''
                  updated_at:
                    type: string
                    example: '2015-10-12 13:48:15'
                  work_phone:
                    type: string
                    example: +44 1835 703597
              examples:
                Get Registrant:
                  value:
                    bio: ''
                    birth_date: ''
                    cc_email: ''
                    company: Alan D Rosenburg Cpa Pc
                    created_at: '2015-10-12 13:48:03'
                    email: atomkiewicz@hotmail.com
                    event_id: 1
                    first_name: Aleshia
                    gender:
                      id: 1
                      value: Female
                    id: 1
                    job_title: ''
                    last_name: Tomkiewicz
                    middle_name: ''
                    mobile_phone: ''
                    prefix: ''
                    profile_picture: ''
                    suffix: ''
                    twitter_handle: ''
                    updated_at: '2015-10-12 13:48:15'
                    work_phone: +44 1835 703597
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /registrants/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Registrants
      summary: Create Registrant
      description: |-
        Creates a new registrant for a specific event. Requires `event_id` and `email` at minimum. Returns the full registrant record on success.

        You can assign a `package_id`, `session_ids`, and `discount_code` in a single call to complete a full registration. Set `send_email=true` to trigger the confirmation email to the registrant. Set `override_capacity_errors=true` to register even when the event or sessions are at capacity.

        The `registration_status` defaults to `confirmed` if not specified. Financial fields (`individual_net`, `group_gross`, etc.) are calculated automatically and cannot be set directly.
      operationId: createRegistrant
      x-codeSamples:
        - lang: cURL
          label: cURL
          source: |
            curl -X POST "https://api.swoogo.com/api/v1/registrants/create" \
              -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
              -H "Content-Type: application/x-www-form-urlencoded" \
              -d "event_id=123&email=jane.doe@example.com&first_name=Jane&last_name=Doe&package_id=11&send_email=true"
        - lang: JavaScript
          label: Node.js
          source: |
            const response = await fetch('https://api.swoogo.com/api/v1/registrants/create', {
              method: 'POST',
              headers: {
                'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
                'Content-Type': 'application/x-www-form-urlencoded',
              },
              body: new URLSearchParams({
                event_id: '123',
                email: 'jane.doe@example.com',
                first_name: 'Jane',
                last_name: 'Doe',
                package_id: '11',
                send_email: 'true',
              }),
            });

            const registrant = await response.json();
            console.log(`Created registrant ${registrant.id}: ${registrant.email}`);
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.post(
                "https://api.swoogo.com/api/v1/registrants/create",
                headers={"Authorization": "Bearer YOUR_ACCESS_TOKEN"},
                data={
                    "event_id": 123,
                    "email": "jane.doe@example.com",
                    "first_name": "Jane",
                    "last_name": "Doe",
                    "package_id": 11,
                    "send_email": True,
                },
            )

            registrant = response.json()
            print(f"Created registrant {registrant['id']}")
      parameters:
        - name: override_capacity_errors
          in: query
          schema:
            type: string
            example: ''
          description: boolean - optional - If an item is sold out, an error will be shown and the registrant will not be updated. If this flag is enabled, the data will be updated
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                discount_code:
                  type: string
                  example: ''
                email:
                  type: string
                  example: ''
                event_id:
                  type: integer
                  example: 123
                first_name:
                  type: string
                  example: ''
                last_name:
                  type: string
                  example: ''
                payment_method:
                  type: string
                  example: ''
                po_number:
                  type: string
                  example: ''
                registration_status:
                  type: string
                  example: ''
                send_email:
                  type: string
                  example: ''
            examples:
              Create Registration:
                value:
                  discount_code: ''
                  email: ''
                  event_id: ''
                  first_name: ''
                  last_name: ''
                  payment_method: ''
                  po_number: ''
                  registration_status: ''
                  send_email: ''
          multipart/form-data:
            schema:
              type: object
              properties:
                email:
                  type: string
                  example: atomkiewicz@hotmail.com
                event_id:
                  type: string
                  example: '49'
                first_name:
                  type: string
                  example: Aleshia
                last_name:
                  type: string
                  example: Tomkiewicz
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                type: object
                properties:
                  created_at:
                    type: string
                    example: '2022-06-26 14:30:00'
                  updated_at:
                    type: string
                    example: '2022-06-26 14:30:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /registrants/update/{registrant_id}:
    put:
      security:
        - bearerAuth: []
      tags:
        - Registrants
      summary: Update Registrant
      description: |-
        Updates an existing registrant's profile data by their unique ID. Only the fields included in the request body are modified; omitted fields are left unchanged.

        You can update personal details (name, email, company), registration status, package, sessions, and custom fields. Financial fields (`individual_net`, `group_gross`, `payment_status`, etc.) are read-only and cannot be modified through this endpoint.

        Set `override_capacity_errors=true` to allow changes to packages or sessions that are at capacity. Without this flag, capacity-exceeded updates will return an error.
      operationId: updateRegistrant
      parameters:
        - name: registrant_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the registrant you want to update
        - name: override_capacity_errors
          in: query
          schema:
            type: string
            example: ''
          description: boolean - optional - If an item is sold out, an error will be shown and the registrant will not be updated. If this flag is enabled, the data will be updated
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                email:
                  type: string
                  example: ''
                first_name:
                  type: string
                  example: ''
                last_name:
                  type: string
                  example: ''
            examples:
              Update An Existing Registrant:
                value:
                  email: ''
                  first_name: ''
                  last_name: ''
          multipart/form-data:
            schema:
              type: object
              properties:
                email:
                  type: string
                  example: atomkiewicz@hotmail.com
                first_name:
                  type: string
                  example: Aleshia
                last_name:
                  type: string
                  example: Tomkiewicz
                override_capacity_errors:
                  type: string
                  example: 'false'
      responses:
        '200':
          description: Update Registrant
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  bio:
                    type: string
                    example: ''
                  birth_date:
                    type: string
                    example: ''
                  cancelled_at:
                    nullable: true
                    example: null
                  cc_email:
                    type: string
                    example: ''
                  checked_in_at:
                    nullable: true
                    example: null
                  company:
                    type: string
                    example: Alan D Rosenburg Cpa Pc
                  created_at:
                    type: string
                    example: '2019-08-30 16:57:59'
                  email:
                    type: string
                    example: atomkiewicz@hotmail.com
                  event_id:
                    type: number
                    example: 1
                  ext_token:
                    type: string
                    example: 5CIBDyTOnFEmLiG47T60v3KXO5SW4COH_1567184279
                  first_name:
                    type: string
                    example: Aleshia
                  gender:
                    type: object
                    properties:
                      id:
                        nullable: true
                        example: null
                      value:
                        nullable: true
                        example: null
                  group_balance_due:
                    type: number
                    example: 0
                  group_gross:
                    type: string
                    example: '0.00'
                  group_id:
                    type: number
                    example: 1
                  group_net:
                    type: string
                    example: '0.00'
                  group_paid:
                    type: string
                    example: '0.00'
                  group_tax:
                    type: string
                    example: '0.00'
                  h_check_out:
                    type: string
                    example: ''
                  id:
                    type: number
                    example: 1
                  individual_gross:
                    type: string
                    example: '0.00'
                  individual_net:
                    type: string
                    example: '0.00'
                  individual_tax:
                    type: string
                    example: '0.00'
                  ip_address:
                    type: string
                    example: 192.168.1.110
                  job_title:
                    type: string
                    example: ''
                  last_name:
                    type: string
                    example: Tomkiewicz
                  middle_name:
                    type: string
                    example: ''
                  mobile_phone:
                    type: string
                    example: ''
                  notes:
                    nullable: true
                    example: null
                  prefix:
                    type: string
                    example: ''
                  profile_picture:
                    type: string
                    example: ''
                  reference:
                    nullable: true
                    example: null
                  registration_status:
                    type: string
                    example: confirmed
                  session_ids:
                    type: array
                    items: {}
                    example: []
                  suffix:
                    type: string
                    example: ''
                  twitter_handle:
                    type: string
                    example: ''
                  updated_at:
                    type: string
                    example: '2019-11-12 21:51:55'
                  work_phone:
                    type: string
                    example: ''
              examples:
                Update Registrant:
                  value:
                    bio: ''
                    birth_date: ''
                    cancelled_at: null
                    cc_email: ''
                    checked_in_at: null
                    company: Alan D Rosenburg Cpa Pc
                    created_at: '2019-08-30 16:57:59'
                    email: atomkiewicz@hotmail.com
                    event_id: 1
                    ext_token: 5CIBDyTOnFEmLiG47T60v3KXO5SW4COH_1567184279
                    first_name: Aleshia
                    gender:
                      id: null
                      value: null
                    group_balance_due: 0
                    group_gross: '0.00'
                    group_id: 1
                    group_net: '0.00'
                    group_paid: '0.00'
                    group_tax: '0.00'
                    h_check_out: ''
                    id: 1
                    individual_gross: '0.00'
                    individual_net: '0.00'
                    individual_tax: '0.00'
                    ip_address: 192.168.1.110
                    job_title: ''
                    last_name: Tomkiewicz
                    middle_name: ''
                    mobile_phone: ''
                    notes: null
                    prefix: ''
                    profile_picture: ''
                    reference: null
                    registration_status: confirmed
                    session_ids: []
                    suffix: ''
                    twitter_handle: ''
                    updated_at: '2019-11-12 21:51:55'
                    work_phone: ''
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /registrants/token:
    post:
      security:
        - bearerAuth: []
      tags:
        - Registrants
      summary: Create Registrant Token
      description: |-
        Creates a pre-population token that allows registrant details to be pre-filled on a registration form. Returns a token and a ready-to-use resume URL.

        Pass `event_id` and any registrant fields (e.g., `fields[email]`, `fields[first_name]`, `fields[package_id]`) to generate a token. The returned URL (`https://client.swoogo.com/event/resume?i=TOKEN`) can be sent to the registrant to let them complete registration with their details pre-filled.

        Common use case: sending personalized registration links via email campaigns or CRM integrations where you already know some attendee details.
      operationId: createRegistrantToken
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                event_id:
                  type: string
                  example: '49'
                fields[email]:
                  type: string
                  example: atomkiewicz@hotmail.com
                fields[first_name]:
                  type: string
                  example: Aleshia
                fields[last_name]:
                  type: string
                  example: Tomkiewicz
                fields[package_id]:
                  type: string
                  example: '11'
                fields[reg_type_id]:
                  type: string
                  example: '20'
      responses:
        '200':
          description: Create Registrant Token
          content:
            application/json:
              schema:
                type: object
                properties:
                  event_id:
                    type: number
                    example: 49
                  id:
                    type: string
                    example: '123'
                  token:
                    type: string
                    example: nXGTJ-SfjLbOWNXwh6xXQDuUYFhZ5puH_1482142194
                  url:
                    type: string
                    example: https://client.swoogo.com/event/resume?i=nXGTJ-SfjLbOWNXwh6xXQDuUYFhZ5puH_1482142194
              examples:
                Create Registrant Token:
                  value:
                    event_id: 49
                    id: '123'
                    token: nXGTJ-SfjLbOWNXwh6xXQDuUYFhZ5puH_1482142194
                    url: https://client.swoogo.com/event/resume?i=nXGTJ-SfjLbOWNXwh6xXQDuUYFhZ5puH_1482142194
  /registrants/checkin:
    post:
      security:
        - bearerAuth: []
      tags:
        - Registrants
      summary: Check Registrant In
      description: |-
        Marks a registrant as checked in (or updates their attendance status) at the event. Sets the `checked_in_at` timestamp and updates the `registration_status` accordingly.

        Only registrants with a `confirmed` or `attended` status can be checked in. Registrants with status `cancelled`, `incomplete`, `in_progress`, or `api_created` cannot be checked in directly — update their status first.
      operationId: checkRegistrantIn
      x-codeSamples:
        - lang: cURL
          label: cURL
          source: |
            curl -X POST "https://api.swoogo.com/api/v1/registrants/checkin" \
              -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
              -H "Content-Type: multipart/form-data" \
              -F "id=26361060" \
              -F "status=attended"
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: The ID of the registrant to check in.
                  example: '26361060'
                status:
                  type: string
                  description: The attendance status to set. Use `attended` for check-in, `confirmed` to revert, or `no_show` to mark as absent.
                  enum:
                    - attended
                    - confirmed
                    - no_show
                  example: attended
      responses:
        '200':
          description: Check In Registrant
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: number
                    example: 1
                  status:
                    type: string
                    example: Attended
                  updated_at:
                    type: string
                    example: '2015-09-28 10:35:21'
              examples:
                Check In Registrant:
                  value:
                    id: 1
                    status: Attended
                    updated_at: '2015-09-28 10:35:21'
  /registrants/{registrant_id}/trigger-email/{email_type}:
    post:
      security:
        - bearerAuth: []
      tags:
        - Registrants
      summary: Email Registrant
      description: |-
        Triggers a transactional email to a registrant. Use this to re-send confirmation emails, send abandoned registration reminders, or notify registrants of modifications or cancellations.

        The email content is configured in your Swoogo event's email templates. This endpoint triggers the sending — it does not customize the email body.
      operationId: emailRegistrant
      parameters:
        - name: registrant_id
          in: path
          required: true
          schema:
            type: integer
            example: 26361060
          description: The ID of the registrant to send the email to.
        - name: email_type
          in: path
          required: true
          schema:
            type: string
            enum:
              - registration_created
              - registration_abandoned
              - registration_modified
              - registration_cancelled
            example: registration_created
          description: 'The type of email to trigger. Must be one of: `registration_created` (confirmation), `registration_abandoned` (reminder to complete), `registration_modified` (update notice), `registration_cancelled` (cancellation notice).'
      responses:
        '200':
          description: Email triggered successfully.
  /registrants/{registrant_id}/approve:
    post:
      security:
        - bearerAuth: []
      tags:
        - Apply to Attend
      summary: Approve Registrant
      description: |-
        Approves a registrant who applied to attend a restricted event. Sets `registration_status` to `approved` and sends the Apply to Attend approval email.

        Requires the event to have Apply to Attend enabled, and the registrant must currently be in `pending` or `denied` status. Registrants who never went through the Apply to Attend flow cannot be approved via this endpoint.
      operationId: approveRegistrant
      parameters:
        - name: registrant_id
          in: path
          required: true
          schema:
            type: integer
            example: 26361060
          description: integer - required - The ID of the registrant to approve
      responses:
        '200':
          description: Approve Registrant
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    example: 26361060
                  registration_status:
                    type: string
                    example: approved
                  updated_at:
                    type: string
                    example: '2024-05-01 09:00:00'
              examples:
                Approve Registrant:
                  value:
                    id: 26361060
                    registration_status: approved
                    updated_at: '2024-05-01 09:00:00'
        '400':
          description: Invalid registrant ID, the registrant is not currently in `pending` or `denied` status, or the registrant never went through the Apply to Attend flow.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          description: Apply to Attend is not enabled for this event, or the feature is not available on this account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /registrants/{registrant_id}/deny:
    post:
      security:
        - bearerAuth: []
      tags:
        - Apply to Attend
      summary: Deny Registrant
      description: |-
        Denies a registrant who applied to attend a restricted event. Sets `registration_status` to `denied` and sends the Apply to Attend denial email.

        Requires the event to have Apply to Attend enabled, and the registrant must currently be in `pending` or `approved` status. Registrants who never went through the Apply to Attend flow cannot be denied via this endpoint.
      operationId: denyRegistrant
      parameters:
        - name: registrant_id
          in: path
          required: true
          schema:
            type: integer
            example: 26361060
          description: integer - required - The ID of the registrant to deny
      responses:
        '200':
          description: Deny Registrant
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    example: 26361060
                  registration_status:
                    type: string
                    example: denied
                  updated_at:
                    type: string
                    example: '2024-05-01 09:00:00'
              examples:
                Deny Registrant:
                  value:
                    id: 26361060
                    registration_status: denied
                    updated_at: '2024-05-01 09:00:00'
        '400':
          description: Invalid registrant ID, the registrant is not currently in `pending` or `approved` status, or the registrant never went through the Apply to Attend flow.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          description: Apply to Attend is not enabled for this event, or the feature is not available on this account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /registrants/{registrant_id}/groups/{group_id}:
    post:
      security:
        - bearerAuth: []
      tags:
        - Registrant Groups
      summary: Add Registrant to Group
      description: Adds a registrant to an existing registration group. The target group is identified by `group_id` (which is the primary registrant's ID). Both registrants must belong to the same event. When added, the registrant's transactions and line items are consolidated under the group primary's financial records.
      operationId: addRegistrantToGroup
      parameters:
        - name: registrant_id
          in: path
          required: true
          schema:
            type: integer
            example: 123
          description: integer - required - The ID of the registrant to be added to the group
        - name: group_id
          in: path
          required: true
          schema:
            type: integer
            example: 456
          description: integer - required - The ID of the group to add the registrant to
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties: {}
            examples:
              Add Registrant To Group:
                value: {}
      responses:
        '200':
          description: Registrant successfully added to group
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    description: The registrant ID
                    example: 123
                  group_id:
                    type: integer
                    description: The group ID that the registrant was added to
                    example: 456
                  event_id:
                    type: integer
                    description: The event ID this registrant belongs to
                    example: 789
                  reg_type_id:
                    type: object
                    description: The registration type of the registrant
                    properties:
                      id:
                        type: integer
                        example: 1
                      value:
                        type: string
                        example: Standard
                  package_id:
                    type:
                      - 'null'
                      - integer
                    example: null
                  discount_code:
                    type:
                      - 'null'
                      - string
                    example: null
                  vat_number:
                    type: string
                    example: ''
                  first_name:
                    type: string
                    example: John
                  email:
                    type: string
                    example: user@example.com
                  sq_406:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          example: '1'
                        value:
                          type: string
                          example: Session 1
                  bio:
                    type: string
                    example: ''
                  last_name:
                    type: string
                    example: Smith
                  company:
                    type: string
                    example: Company Inc
                  job_title:
                    type: string
                    example: Manager
                  mobile_phone:
                    type: string
                    example: '+1234567890'
                  profile_picture:
                    type: string
                    example: https://example.com/profile.jpg
                  contact_id:
                    type: integer
                    example: 1
                  session_ids:
                    type: array
                    items:
                      type: string
                    example:
                      - '1'
                      - '2'
                  waitlisted_session_ids:
                    type: array
                    items:
                      type: string
                    example: []
                  notes:
                    type:
                      - 'null'
                      - string
                    example: null
                  reference:
                    type:
                      - 'null'
                      - string
                    example: null
                  ip_address:
                    type: string
                    example: 127.0.0.1
                  individual_net:
                    type: string
                    example: '0.00'
                  individual_tax:
                    type: string
                    example: '0.00'
                  individual_tax_2:
                    type: string
                    example: '0.00'
                  individual_gross:
                    type: string
                    example: '0.00'
                  group_net:
                    type: integer
                    example: 0
                  group_tax:
                    type: integer
                    example: 0
                  group_tax_2:
                    type: integer
                    example: 0
                  group_gross:
                    type: integer
                    example: 0
                  group_paid:
                    type: integer
                    example: 0
                  created_at:
                    type: string
                    format: date-time
                    example: '2025-01-01 12:00:00'
                  updated_at:
                    type: string
                    format: date-time
                    example: '2025-01-01 12:00:00'
                  registered_at:
                    type: string
                    format: date-time
                    example: '2025-01-01 12:00:00'
                  cancelled_at:
                    type:
                      - 'null'
                      - string
                    format: date-time
                    example: null
                  checked_in_at:
                    type:
                      - 'null'
                      - string
                    format: date-time
                    example: null
                  ext_token:
                    type: string
                    example: token123
                  secure_id:
                    type: string
                    example: id123
                  timezone:
                    type: string
                    example: UTC
                  registration_status:
                    type: string
                    example: confirmed
                  language:
                    type: string
                    example: en
                  payment_method:
                    type: string
                    example: credit_card
                  po_number:
                    type: string
                    example: ''
                  payment_status:
                    type: object
                    properties:
                      id:
                        type: integer
                        example: 0
                      value:
                        type: string
                        example: Unpaid
                  group_balance_due:
                    type: integer
                    example: 0
              examples:
                Successful Response:
                  value:
                    id: 123
                    group_id: 456
                    event_id: 789
                    reg_type_id:
                      id: 1
                      value: Standard
                    registration_status: confirmed
                    group_number: 1
                    created_at: '2025-01-01 12:00:00'
                    updated_at: '2025-01-01 12:00:00'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  name:
                    type: string
                    example: Bad Request
                  message:
                    type: string
                    example: The group_id parameter is required
                  code:
                    type: integer
                    example: 400
                  status:
                    type: integer
                    example: 400
        '401':
          description: Your request was made with invalid credentials.
          content:
            application/json:
              schema:
                type: object
                properties:
                  name:
                    type: string
                    example: Unauthorized
                  message:
                    type: string
                    example: Authentication token is missing or invalid
                  code:
                    type: integer
                    example: 401
                  status:
                    type: integer
                    example: 401
                  errors:
                    type: object
                    example:
                      auth: Invalid or expired authentication token
        '404':
          description: The registrant or group was not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  name:
                    type: string
                    example: Not Found
                  message:
                    type: string
                    example: The primary registrant was not found.
                  code:
                    type: integer
                    example: 404
                  status:
                    type: integer
                    example: 404
        '409':
          description: Failed to add registrant to group
          content:
            application/json:
              schema:
                type: object
                properties:
                  name:
                    type: string
                    example: Conflict
                  message:
                    type: string
                    example: The primary registrant must be from the same event.
                  code:
                    type: integer
                    example: 409
                  status:
                    type: integer
                    example: 409
        '422':
          description: Unprocessable entity
          content:
            application/json:
              schema:
                type: object
                properties:
                  name:
                    type: string
                    example: Unprocessable entity
                  message:
                    type: string
                    example: The specified registrant is not a primary registrant.
                  code:
                    type: integer
                    example: 422
                  status:
                    type: integer
                    example: 422
        '500':
          description: An error occurred while processing your request.
          content:
            application/json:
              schema:
                type: object
                properties:
                  name:
                    type: string
                    example: Internal Server Error
                  message:
                    type: string
                    example: An error occurred while processing your request.
                  code:
                    type: integer
                    example: 500
                  status:
                    type: integer
                    example: 500
  /registrants/{registrant_id}/group:
    delete:
      security:
        - bearerAuth: []
      tags:
        - Registrant Groups
      summary: Remove Registrant from Group
      description: Removes a registrant from their current registration group. The registrant becomes their own group primary with an independent financial record. Transactions are restored to the registrant's individual account. The registrant must not be the group primary to be removed.
      operationId: removeRegistrantFromGroup
      parameters:
        - name: registrant_id
          in: path
          required: true
          schema:
            type: integer
            example: 123
          description: integer - required - The ID of the registrant to remove from their current group
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties: {}
            examples:
              Remove Registrant From their current Group:
                value: {}
      responses:
        '200':
          description: Registrant successfully removed from group
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    description: The registrant ID
                    example: 123
                  group_id:
                    type: integer
                    description: The group ID that the registrant was added to
                    example: 123
                  event_id:
                    type: integer
                    description: The event ID this registrant belongs to
                    example: 789
                  reg_type_id:
                    type: object
                    description: The registration type of the registrant
                    properties:
                      id:
                        type: integer
                        example: 1
                      value:
                        type: string
                        example: Standard
                  package_id:
                    type:
                      - 'null'
                      - integer
                    example: null
                  discount_code:
                    type:
                      - 'null'
                      - string
                    example: null
                  vat_number:
                    type: string
                    example: ''
                  first_name:
                    type: string
                    example: John
                  email:
                    type: string
                    example: user@example.com
                  sq_406:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          example: '1'
                        value:
                          type: string
                          example: Session 1
                  bio:
                    type: string
                    example: ''
                  last_name:
                    type: string
                    example: Smith
                  company:
                    type: string
                    example: Company Inc
                  job_title:
                    type: string
                    example: Manager
                  mobile_phone:
                    type: string
                    example: '+1234567890'
                  profile_picture:
                    type: string
                    example: https://example.com/profile.jpg
                  contact_id:
                    type: integer
                    example: 1
                  session_ids:
                    type: array
                    items:
                      type: string
                    example:
                      - '1'
                      - '2'
                  waitlisted_session_ids:
                    type: array
                    items:
                      type: string
                    example: []
                  notes:
                    type:
                      - 'null'
                      - string
                    example: null
                  reference:
                    type:
                      - 'null'
                      - string
                    example: null
                  ip_address:
                    type: string
                    example: 127.0.0.1
                  individual_net:
                    type: string
                    example: '0.00'
                  individual_tax:
                    type: string
                    example: '0.00'
                  individual_tax_2:
                    type: string
                    example: '0.00'
                  individual_gross:
                    type: string
                    example: '0.00'
                  group_net:
                    type: integer
                    example: 0
                  group_tax:
                    type: integer
                    example: 0
                  group_tax_2:
                    type: integer
                    example: 0
                  group_gross:
                    type: integer
                    example: 0
                  group_paid:
                    type: integer
                    example: 0
                  created_at:
                    type: string
                    format: date-time
                    example: '2025-01-01 12:00:00'
                  updated_at:
                    type: string
                    format: date-time
                    example: '2025-01-01 12:00:00'
                  registered_at:
                    type: string
                    format: date-time
                    example: '2025-01-01 12:00:00'
                  cancelled_at:
                    type:
                      - 'null'
                      - string
                    format: date-time
                    example: null
                  checked_in_at:
                    type:
                      - 'null'
                      - string
                    format: date-time
                    example: null
                  ext_token:
                    type: string
                    example: token123
                  secure_id:
                    type: string
                    example: id123
                  timezone:
                    type: string
                    example: UTC
                  registration_status:
                    type: string
                    example: confirmed
                  language:
                    type: string
                    example: en
                  payment_method:
                    type: string
                    example: credit_card
                  po_number:
                    type: string
                    example: ''
                  payment_status:
                    type: object
                    properties:
                      id:
                        type: integer
                        example: 0
                      value:
                        type: string
                        example: Unpaid
                  group_balance_due:
                    type: integer
                    example: 0
              examples:
                Successful Response:
                  value:
                    id: 123
                    group_id: 123
                    event_id: 789
                    reg_type_id:
                      id: 1
                      value: Standard
                    registration_status: confirmed
                    group_number: 1
                    created_at: '2025-01-01 12:00:00'
                    updated_at: '2025-01-01 12:00:00'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  name:
                    type: string
                    example: Bad Request
                  message:
                    type: string
                    example: Invalid request parameters
                  code:
                    type: integer
                    example: 400
                  status:
                    type: integer
                    example: 400
        '401':
          description: Your request was made with invalid credentials.
          content:
            application/json:
              schema:
                type: object
                properties:
                  name:
                    type: string
                    example: Unauthorized
                  message:
                    type: string
                    example: Authentication token is missing or invalid
                  code:
                    type: integer
                    example: 401
                  status:
                    type: integer
                    example: 401
        '403':
          description: You do not have access to that resource.
          content:
            application/json:
              schema:
                type: object
                properties:
                  name:
                    type: string
                    example: Forbidden
                  message:
                    type: string
                    example: You do not have access to that resource.
                  code:
                    type: integer
                    example: 403
                  status:
                    type: integer
                    example: 403
        '404':
          description: The registrant was not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  name:
                    type: string
                    example: Not Found
                  message:
                    type: string
                    example: The registrant was not found.
                  code:
                    type: integer
                    example: 404
                  status:
                    type: integer
                    example: 404
        '409':
          description: Failed to remove registrant from group
          content:
            application/json:
              schema:
                type: object
                properties:
                  name:
                    type: string
                    example: Conflict
                  message:
                    type: string
                    example: Cannot remove registrant due to existing dependencies.
                  code:
                    type: integer
                    example: 409
                  status:
                    type: integer
                    example: 409
        '422':
          description: Unprocessable entity
          content:
            application/json:
              schema:
                type: object
                properties:
                  name:
                    type: string
                    example: Unprocessable entity
                  message:
                    type: string
                    example: The registrant is not part of any group.
                  code:
                    type: integer
                    example: 422
                  status:
                    type: integer
                    example: 422
        '500':
          description: An error occurred while processing your request.
          content:
            application/json:
              schema:
                type: object
                properties:
                  name:
                    type: string
                    example: Internal Server Error
                  message:
                    type: string
                    example: An error occurred while processing your request.
                  code:
                    type: integer
                    example: 500
                  status:
                    type: integer
                    example: 500
  /registrant-line-items:
    get:
      security:
        - bearerAuth: []
      tags:
        - Registrant Line Items
      summary: Get All Line Items
      description: Retrieves all financial line items for registrants within an event. Line items represent individual charges (packages, sessions, custom fees) on a registrant's invoice, including net/gross amounts, tax rates, and quantities. Requires the `event_id` query parameter. Use `search` to filter by registrant_id, object type, status, or amount.
      operationId: getAllRegistrantLineItems
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve line items for
        - name: fields
          in: query
          schema:
            type: string
            example: registrant_id,object,object_id,group_id,net,tax,tax_rate,gross, datetime,full_price_net,full_price_gross,question_id,quantity,status
          description: string - optional - Comma separated list of fields you want to return
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /registrant-line-item-audit:
    get:
      security:
        - bearerAuth: []
      tags:
        - Registrant Line Item Audits
      summary: Get All Line Item Audits
      description: Retrieves the audit trail for registrant line items within an event. Each audit record tracks a historical change to a line item, including price modifications, status changes, and discount applications. Requires the `event_id` query parameter. Useful for financial reconciliation and debugging pricing discrepancies.
      operationId: getAllRegistrantLineItemAudits
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: Integer - Required | The ID of the event the registrant is in
        - name: fields
          in: query
          schema:
            type: string
            example: registrant_id,object,object_id,group_id,net,tax,tax_rate,gross, datetime,full_price_net,full_price_gross,question_id,quantity,status
          description: string - optional - Comma separated list of fields you want to return
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /registrants/{registrant_id}/session/{session_id}:
    post:
      security:
        - bearerAuth: []
      tags:
        - Registrant Sessions
      summary: Create Registrant Session
      description: Adds a session to a registrant's selected sessions. Both `registrant_id` and `session_id` are required path parameters. By default, the request will fail if the session is at capacity or has scheduling conflicts. Set `override_capacity_errors` to bypass capacity checks, `send_email` to trigger a session confirmation email, or `validate_only` to check for conflicts without actually adding the session.
      operationId: createRegistrantSession
      x-codeSamples:
        - lang: cURL
          label: cURL
          source: |
            curl -X POST "https://api.swoogo.com/api/v1/registrants/26361060/session/101" \
              -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
      parameters:
        - name: registrant_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the registrant you want to use
        - name: session_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the session you want to use
        - name: override_capacity_errors
          in: query
          schema:
            type: string
            example: ''
          description: boolean - optional - If an item is sold out, an error will be shown and the registrant will not be updated. If this flag is enabled, the data will be updated
        - name: send_email
          in: query
          schema:
            type: string
          description: boolean - optional - If true then session confirmation emails will be automatically sent
        - name: validate_only
          in: query
          schema:
            type: string
          description: boolean - optional - If true, then the session won't be added, but checks for capacity and conflicts will be performed
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties: {}
            examples:
              Add Session To A Registrant's Selections:
                value: {}
      responses:
        '200':
          description: Add Registrant Session
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
              examples:
                Add Registrant Session:
                  value:
                    success: true
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    delete:
      security:
        - bearerAuth: []
      tags:
        - Registrant Sessions
      summary: Delete Registrant Session
      description: Removes a session from a registrant's selected sessions. Requires both `registrant_id` and `session_id` as path parameters. The registrant will no longer appear in the session's attendance list.
      operationId: deleteRegistrantSession
      parameters:
        - name: registrant_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the registrant you want to use
        - name: session_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the session you want to use
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties: {}
            examples:
              Remove Session From A Registrant's Selections:
                value: {}
      responses:
        '204':
          description: Delete
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /registrants/{registrant_id}/session-waitlist/{session_id}:
    post:
      security:
        - bearerAuth: []
      tags:
        - Registrant Session Waitlists
      summary: Create Session Waitlist Registrant
      description: Adds a registrant to the waitlist for a sold-out session. Requires both `registrant_id` and `session_id` as path parameters. When a spot opens up in the session, waitlisted registrants can be promoted to confirmed attendees.
      operationId: createWaitlistRegistrant
      parameters:
        - name: registrant_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the registrant you want to use
        - name: session_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the session you want to use
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                type: object
                properties:
                  created_at:
                    type: string
                    example: '2022-06-26 14:30:00'
                  updated_at:
                    type: string
                    example: '2022-06-26 14:30:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    delete:
      security:
        - bearerAuth: []
      tags:
        - Registrant Session Waitlists
      summary: Delete Session Waitlist Registrant
      description: Removes a registrant from a session's waitlist. Requires both `registrant_id` and `session_id` as path parameters. The registrant will no longer be in line for a spot if one opens up.
      operationId: deleteWaitlistRegistrant
      parameters:
        - name: registrant_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the registrant you want to use
        - name: session_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the session you want to use
      responses:
        '204':
          description: Delete
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /reg-types:
    get:
      security:
        - bearerAuth: []
      tags:
        - Registrant Types
      summary: Get All Types
      description: Retrieves all registration types for a specific event. Registration types (e.g., Attendee, Exhibitor, Speaker) categorize registrants and can have different pricing, capacity limits, and group size constraints. Requires the `event_id` query parameter.
      operationId: getAllRegistrantTypes
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve reg types for
        - name: fields
          in: query
          schema:
            type: string
            example: id,name,public_short_name,admin_short_name,description,capacity,exclude_from_event_capacity,sold_out_message,min_group_size,max_group_size,created_at,updated_at
          description: string - optional - Comma separated list of fields you want to return
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Get Registrant Types
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: reg-types.json?event_id=1&fields=id%2Cname%2Ccreated_at&page=1
                  _meta:
                    type: object
                    properties:
                      currentPage:
                        type: number
                        example: 1
                      pageCount:
                        type: number
                        example: 1
                      perPage:
                        type: number
                        example: 20
                      totalCount:
                        type: number
                        example: 2
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: number
                          example: 1
                        name:
                          type: string
                          example: Attendee
                    example:
                      - id: 1
                        name: Attendee
                      - id: 2
                        name: Exhibitor
              examples:
                Get Registrant Types:
                  value:
                    _links:
                      self:
                        href: reg-types.json?event_id=1&fields=id%2Cname%2Ccreated_at&page=1
                    _meta:
                      currentPage: 1
                      pageCount: 1
                      perPage: 20
                      totalCount: 2
                    items:
                      - id: 1
                        name: Attendee
                      - id: 2
                        name: Exhibitor
  /reg-types/{registrant_type_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Registrant Types
      summary: Get One Type
      description: |-
        Retrieves a single registration type by its ID, including name, capacity, group size limits, and sold-out message. Use the `expand` parameter to include related `earlyBirds` pricing tiers.
        <details>
          <summary><b>Extra Fields</b></summary>

          <p>This is the extra information that can be returned if required by specifying what you need in the expand variable:</p>
          <table>
            <thead>
              <tr>
                <th><strong>Name</strong></th>
                <th><strong>Type</strong></th>
                <th><strong>Description</strong></th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><code>earlyBirds</code></td>
                <td>object</td>
                <td>List all available early birds for this registration type</td>
              </tr>
            </tbody>
          </table>
        </details>
      operationId: getOneRegistrantType
      parameters:
        - name: registrant_type_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the registrant type you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: id,name,public_short_name,admin_short_name,description,capacity,exclude_from_event_capacity,sold_out_message,min_group_size,max_group_size,created_at,updated_at
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: ''
          description: string - optional - Comma separated list of objects you want to return
      responses:
        '200':
          description: Get Registrant Type
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  admin_short_name:
                    type: string
                    example: ''
                  capacity:
                    type: number
                    example: 30
                  exclude_from_event_capacity:
                    type: boolean
                    description: Whether this registration type is ignored when calculating event capacity (e.g. staff). Exclude these types when working out how much space is left in the event.
                    example: false
                  created_at:
                    type: string
                    example: '2019-08-14 15:08:49'
                  description:
                    type: string
                    example: ''
                  id:
                    type: number
                    example: 1
                  max_group_size:
                    nullable: true
                    example: null
                  min_group_size:
                    nullable: true
                    example: null
                  name:
                    type: string
                    example: Registration
                  public_short_name:
                    type: string
                    example: ''
                  sold_out_message:
                    type: string
                    example: Sold Out
                  updated_at:
                    type: string
                    example: '2019-08-14 15:08:57'
              examples:
                Get Registrant Type:
                  value:
                    admin_short_name: ''
                    capacity: 30
                    exclude_from_event_capacity: false
                    created_at: '2019-08-14 15:08:49'
                    description: ''
                    id: 1
                    max_group_size: null
                    min_group_size: null
                    name: Registration
                    public_short_name: ''
                    sold_out_message: Sold Out
                    updated_at: '2019-08-14 15:08:57'
  /reg-types/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Registrant Types
      summary: Create Type
      description: Creates a new registration type for an event. Requires `event_id` and `name` in the request body. Optionally set `capacity` to limit how many registrants can select this type, and `exclude_from_event_capacity` to ignore the type when calculating event capacity.
      operationId: createRegistrantType
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                capacity:
                  type: string
                  example: '20'
                event_id:
                  type: string
                  example: '1'
                exclude_from_event_capacity:
                  type: integer
                  enum:
                    - 0
                    - 1
                  description: Set to 1 to ignore this registration type when calculating event capacity (for example staff), or 0 to count it. New registration types count towards capacity unless this is set.
                  example: 0
                name:
                  type: string
                  example: Sample Reg Type
            examples:
              Create A Registrant Type:
                value:
                  capacity: '20'
                  event_id: '1'
                  name: Sample Reg Type
      responses:
        '201':
          description: Create A Registrant Type
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  admin_short_name:
                    nullable: true
                    example: null
                  capacity:
                    type: string
                    example: '20'
                  created_at:
                    type: string
                    example: '2023-05-17 10:15:53'
                  description:
                    nullable: true
                    example: null
                  exclude_from_event_capacity:
                    type: boolean
                    description: Whether this registration type is ignored when calculating event capacity (e.g. staff). Exclude these types when working out how much space is left in the event.
                    example: false
                  id:
                    type: number
                    example: 59
                  max_group_size:
                    nullable: true
                    example: null
                  min_group_size:
                    nullable: true
                    example: null
                  name:
                    type: string
                    example: Sample Reg Type
                  public_short_name:
                    nullable: true
                    example: null
                  sold_out_message:
                    nullable: true
                    example: null
                  updated_at:
                    type: string
                    example: '2023-05-17 10:15:53'
              examples:
                Create A Registrant Type:
                  value:
                    admin_short_name: null
                    capacity: '20'
                    created_at: '2023-05-17 10:15:53'
                    description: null
                    exclude_from_event_capacity: false
                    id: 59
                    max_group_size: null
                    min_group_size: null
                    name: Sample Reg Type
                    public_short_name: null
                    sold_out_message: null
                    updated_at: '2023-05-17 10:15:53'
  /reg-types/update/{registrant_type_id}:
    put:
      security:
        - bearerAuth: []
      tags:
        - Registrant Types
      summary: Update Type
      description: Updates an existing registration type by its ID. You can modify the name, capacity, whether it counts towards event capacity (`exclude_from_event_capacity`), group size limits, display names, and sold-out message. Only the fields included in the request body will be updated.
      operationId: updateRegistrantType
      parameters:
        - name: registrant_type_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the registrant type you want to update
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                admin_short_name:
                  type: string
                  example: ''
                capacity:
                  type: string
                  example: ''
                exclude_from_event_capacity:
                  type: integer
                  enum:
                    - 0
                    - 1
                  description: Set to 1 to ignore this registration type when calculating event capacity (for example staff), or 0 to count it. New registration types count towards capacity unless this is set.
                  example: 0
                name:
                  type: string
                  example: Updated Reg Type Name
                public_short_name:
                  type: string
                  example: ''
            examples:
              Update A Registrant Type:
                value:
                  admin_short_name: ''
                  capacity: ''
                  name: Updated Reg Type Name
                  public_short_name: ''
      responses:
        '200':
          description: Update A Registrant Type
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  admin_short_name:
                    type: string
                    example: ''
                  capacity:
                    type: string
                    example: ''
                  created_at:
                    type: string
                    example: '2023-05-17 10:15:53'
                  description:
                    nullable: true
                    example: null
                  exclude_from_event_capacity:
                    type: boolean
                    description: Whether this registration type is ignored when calculating event capacity (e.g. staff). Exclude these types when working out how much space is left in the event.
                    example: false
                  id:
                    type: number
                    example: 59
                  max_group_size:
                    nullable: true
                    example: null
                  min_group_size:
                    nullable: true
                    example: null
                  name:
                    type: string
                    example: Updated Reg Type Name
                  public_short_name:
                    type: string
                    example: ''
                  sold_out_message:
                    type: string
                    example: Sold Out
                  updated_at:
                    type: string
                    example: '2023-05-17 10:46:52'
              examples:
                Update A Registrant Type:
                  value:
                    admin_short_name: ''
                    capacity: ''
                    created_at: '2023-05-17 10:15:53'
                    description: null
                    exclude_from_event_capacity: false
                    id: 59
                    max_group_size: null
                    min_group_size: null
                    name: Updated Reg Type Name
                    public_short_name: ''
                    sold_out_message: Sold Out
                    updated_at: '2023-05-17 10:46:52'
  /reg-types/delete/{registrant_type_id}:
    delete:
      security:
        - bearerAuth: []
      tags:
        - Registrant Types
      summary: Delete Type
      description: Permanently deletes a registration type by its ID. The type will no longer be available as a selection for new registrations. Existing registrants already assigned to this type are not affected.
      operationId: deleteRegistrantType
      parameters:
        - name: registrant_type_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the registrant type you want to delete
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties: {}
            examples:
              Delete Registrant Type:
                value: {}
      responses:
        '204':
          description: Delete Reg Type
          content:
            text/plain:
              examples:
                Delete Reg Type:
                  value: ''
  /scans/sessions:
    get:
      security:
        - bearerAuth: []
      tags:
        - Session Scans
      summary: Get All Scans
      description: Retrieves all session check-in scan records for an event. Scans are created when a registrant's badge or QR code is scanned at a session entrance, providing a timestamped record of physical check-in. Requires the `event_id` query parameter.
      operationId: getAllSessionScans
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve scans for
        - name: session_id
          in: query
          schema:
            type: string
            example: ''
          description: integer - optional - Optionally see only the scans for one session
        - name: registrant_id
          in: query
          schema:
            type: string
            example: ''
          description: integer - optional - The ID of the registrant the scan is associated with
        - name: fields
          in: query
          schema:
            type: string
            example: id,event_id,registrant_id,typecreated_by,created_at,scan_id
          description: string - optional - Comma separated list of fields you want to return
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /scans/registrant/{registrant_id}/session/{session_id}:
    post:
      security:
        - bearerAuth: []
      tags:
        - Session Scans
      summary: Create Session Scan
      description: |
        Records a new check-in scan for a registrant at a session. Requires `registrant_id` and `session_id` as path parameters.
        Use this to programmatically check in attendees at session entrances, equivalent to scanning their badge or QR code.
      operationId: createSessionScan
      parameters:
        - name: registrant_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the registrant you want to use
        - name: session_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the session you want to use
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                event_id:
                  type: string
                  example: '8048'
                prevent_check_in:
                  type: boolean
                  example: false
                  description: Optional boolean parameter to prevent the registrant's overall registration status from changing to "attended" during session check-in. When true, the registrant will be checked into the session but their overall registration status will remain unchanged. When false or omitted, the registrant's status will be updated to "attended" as usual.
            examples:
              Scan A Registrant In To A Session:
                value:
                  event_id: '8048'
      responses:
        '200':
          description: Create Object (or return existing scan if duplicate)
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    example: 69
                    description: The unique identifier of the created scan
                  event_id:
                    type: integer
                    example: 787
                    description: The ID of the event
                  registrant_id:
                    type: integer
                    example: 1395
                    description: The ID of the registrant
                  type:
                    type: string
                    example: session
                    description: The type of scan
                  created_by:
                    type: integer
                    example: 1
                    description: The ID of the user who created the scan
                  created_at:
                    type: string
                    example: '2025-09-18 21:26:08'
                    description: The timestamp when the scan was created
                  scan_id:
                    type: integer
                    example: 696
                    description: The ID of the session being scanned
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: The requested resource does not exist.
          content:
            application/json:
              schema:
                type: object
                properties:
                  name:
                    type: string
                    example: Not Found
                  message:
                    type: string
                    example: Session Not Found
                    description: Specific error message for session-related 404 errors
                  code:
                    type: integer
                    example: 0
                  status:
                    type: integer
                    example: 404
              examples:
                session_not_found:
                  summary: Session Not Found
                  value:
                    name: Not Found
                    message: Session Not Found
                    code: 0
                    status: 404
        '500':
          $ref: '#/components/responses/InternalServerError'
    delete:
      security:
        - bearerAuth: []
      tags:
        - Session Scans
      summary: Delete Scan
      description: Deletes a session check-in scan record for a specific registrant and session. Use this to reverse an accidental check-in or correct scanning errors.
      operationId: deleteSessionScan
      parameters:
        - name: registrant_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the registrant you want to use
        - name: session_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the session you want to use
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                event_id:
                  type: string
                  example: '8048'
            examples:
              Undo scanning a registrant in to a session:
                value:
                  event_id: '8048'
      responses:
        '204':
          description: Delete
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sessions:
    get:
      security:
        - bearerAuth: []
      tags:
        - Sessions
      summary: Get All Sessions
      description: |-
        Retrieves a paginated list of sessions for a specific event. Returns session scheduling, capacity, track, and configuration details.

        Requires `event_id` as a query parameter. Use `fields` to control which fields are returned. Use `search` to filter by any session field (e.g., `date=2025-08-08`, `session_status=live`, `name=*keynote*`). Supports operators: `=`, `!=`, `>=`, `<=`, `>`, `<`, `*contains*`, `*beginswith*`, `*endswith*`.

        Use `expand` to include related objects: `speakers`, `location`, `track`, `translations`, `sessionAttendance`, `registrantCount`, `reservedCount`, `earlyBirds`. Results are paginated with a maximum of 200 per page.

        <details>
          <summary><b>Available Fields</b></summary>

          <p>These are the standard fields available for configuring a session:</p>
          <table>
            <thead>
              <tr>
                <th><strong>Name</strong></th>
                <th><strong>Type</strong></th>
                <th><strong>Description</strong></th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><code>id</code></td>
                <td>integer</td>
                <td>Unique identifier for the session.</td>
              </tr>
              <tr>
                <td><code>event_id</code></td>
                <td>integer</td>
                <td>ID of the event associated with this session.</td>
              </tr>
              <tr>
                <td><code>name</code></td>
                <td>string</td>
                <td>Title or name of the session.</td>
              </tr>
              <tr>
                <td><code>admin_short_name</code></td>
                <td>string</td>
                <td>Admin-specific short name for internal usage.</td>
              </tr>
              <tr>
                <td><code>badge_name</code></td>
                <td>string</td>
                <td>Display name on attendee badges.</td>
              </tr>
              <tr>
                <td><code>description</code></td>
                <td>string</td>
                <td>Detailed description of the session.</td>
              </tr>
              <tr>
                <td><code>date</code></td>
                <td>string (date)</td>
                <td>The date when the session will take place.</td>
              </tr>
              <tr>
                <td><code>start_time</code></td>
                <td>string (time)</td>
                <td>Start time of the session.</td>
              </tr>
              <tr>
                <td><code>end_time</code></td>
                <td>string (time)</td>
                <td>End time of the session.</td>
              </tr>
              <tr>
                <td><code>use_event_timezone</code></td>
                <td>integer</td>
                <td>Whether the event's default timezone is applied to the session.</td>
              </tr>
              <tr>
                <td><code>timezone</code></td>
                <td>string</td>
                <td>Timezone for the session (see TZ Identifier column in the <a href="https://en.wikipedia.org/wiki/List_of_tz_database_time_zones" target="_blank">List of TZ Database Time Zones</a>).</td>
              </tr>
              <tr>
                <td><code>capacity</code></td>
                <td>integer</td>
                <td>Maximum number of attendees allowed.</td>
              </tr>
              <tr>
                <td><code>location_id</code></td>
                <td>integer</td>
                <td>Identifier for the location.</td>
              </tr>
              <tr>
                <td><code>track_id</code></td>
                <td>integer</td>
                <td>Identifier for the session's track.</td>
              </tr>
              <tr>
                <td><code>selection_control</code></td>
                <td>string</td>
                <td>Specifies whether the session is optional or included by default, setting the value 'session_included'.</td>
              </tr>
              <tr>
                <td><code>webinar_url</code></td>
                <td>string (uri)</td>
                <td>URL for the webinar if the session is virtual.</td>
              </tr>
              <tr>
                <td><code>sold_out_message</code></td>
                <td>string</td>
                <td>Custom message displayed when the session is sold out.</td>
              </tr>
              <tr>
                <td><code>secure_id</code></td>
                <td>string</td>
                <td>Secure identifier for the session.</td>
              </tr>
              <tr>
                <td><code>session_status</code></td>
                <td>string</td>
                <td>Current status of the session. Possible values: <code>submitted</code>, <code>approved</code>, <code>rejected</code>, <code>converted</code>, <code>live</code>.</td>
              </tr>
              <tr>
                <td><code>locked_when_saved</code></td>
                <td>boolean</td>
                <td>Whether the session is locked after being saved.</td>
              </tr>
              <tr>
                <td><code>selected_by_default</code></td>
                <td>boolean</td>
                <td>Indicates if the session is selected by default for attendees.</td>
              </tr>
              <tr>
                <td><code>prevent_session_conflicts</code></td>
                <td>boolean</td>
                <td>Whether should prevent conflicts with other sessions when selecting this session.</td>
              </tr>
              <tr>
                <td><code>custom_fields</code></td>
                <td>object</td>
                <td>Custom fields associated with the session. Key-value pairs can be dynamic.</td>
              </tr>
            </tbody>
          </table>
        </details>
        <details>
          <summary><b>Extra Fields</b></summary>

          <p>This is the extra information that can be returned if required by specifying what you need in the expand variable:</p>
          <table>
            <thead>
              <tr>
                <th><strong>Name</strong></th>
                <th><strong>Type</strong></th>
                <th><strong>Description</strong></th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><code>speakers</code></td>
                <td>object</td>
                <td>List of speakers assigned to this session</td>
              </tr>
              <tr>
                <td><code>location</code></td>
                <td>object</td>
                <td>Selected Location for this event</td>
              </tr>
              <tr>
                <td><code>track</code></td>
                <td>object</td>
                <td>Selected track for this event</td>
              </tr>
              <tr>
                <td><code>translations</code></td>
                <td>object</td>
                <td>Custom translations set for this event</td>
              </tr>
              <tr>
                <td><code>sessionAttendance</code></td>
                <td>object</td>
                <td>Session Attendance Information</td>
              </tr>
              <tr>
                <td><code>registrantCount</code></td>
                <td>object</td>
                <td>Number of Registrants registered to this session</td>
              </tr>
              <tr>
                <td><code>reservedCount</code></td>
                <td>object</td>
                <td>Number of Reserved seats for this session</td>
              </tr>
              <tr>
                <td><code>earlyBirds</code></td>
                <td>object</td>
                <td>List all available early birds for this session</td>
              </tr>
            </tbody>
          </table>
        </details>
      operationId: getAllSessions
      x-codeSamples:
        - lang: cURL
          label: cURL
          source: |
            curl -X GET "https://api.swoogo.com/api/v1/sessions?event_id=123&fields=id,name,date,start_time,end_time,capacity&expand=speakers,location&sort=date" \
              -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
        - lang: JavaScript
          label: Node.js
          source: |
            const response = await fetch(
              'https://api.swoogo.com/api/v1/sessions?event_id=123&expand=speakers,location',
              { headers: { 'Authorization': 'Bearer YOUR_ACCESS_TOKEN' } }
            );
            const { items } = await response.json();
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://api.swoogo.com/api/v1/sessions",
                params={"event_id": 123, "expand": "speakers,location"},
                headers={"Authorization": "Bearer YOUR_ACCESS_TOKEN"},
            )
            sessions = response.json()["items"]
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve sessions for
        - name: fields
          in: query
          schema:
            type: string
            example: id,event_id,name,admin_short_name,badge_name,description,date,start_time,end_time,times_with_timezone,use_event_timezone,timezone,capacity,notes,location,location_id,track,track_id,session_included,webinar_url,type_id,direct_link,virtual_link,created_at,updated_at
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: track
          description: string - optional - Comma separated list of objects you want to return
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          example: 1
                        event_id:
                          type: integer
                          example: 12345
                        name:
                          type: string
                          example: Event Management Basics
                        admin_short_name:
                          type: string
                          example: MgmtBasics
                        badge_name:
                          type: string
                          example: Basics of Management
                        description:
                          type: string
                          example: An interactive workshop on event management fundamentals.
                        date:
                          type: string
                          example: '2025-08-08'
                        start_time:
                          type: string
                          example: '11:45:00'
                        end_time:
                          type: string
                          example: '12:45:00'
                        times_with_timezone:
                          type: string
                          example: 10:00 AM - 12:00 PM (+09)
                        use_event_timezone:
                          type: boolean
                          example: true
                        timezone:
                          type: string
                          example: Europe/London
                        capacity:
                          type: integer
                          example: 20
                        notes:
                          nullable: true
                          example: null
                        location:
                          type: string
                          example: null
                        location_id:
                          type: integer
                          example: null
                        track:
                          type: string
                          example: null
                        track_id:
                          type: integer
                          example: null
                        session_included:
                          type: boolean
                          example: false
                        locked_when_saved:
                          type: boolean
                          example: true
                        selected_by_default:
                          type: boolean
                          example: false
                        prevent_session_conflicts:
                          type: boolean
                          example: false
                        session_status:
                          type: string
                          example: live
                        webinar_url:
                          type: string
                          example: ''
                        direct_link:
                          type: string
                          example: https://demo.swoogo.com/test-event/session/1/admin-name
                        virtual_link:
                          type: string
                          example: https://local.demo.swoogo.com/test-event/v/s-1
                        created_at:
                          type: string
                          example: '2025-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2025-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sessions/{session_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Sessions
      summary: Get One Session
      description: |-
        Retrieves a single session by its unique ID. Returns the full session record including name, date, times, capacity, location, track, and status.

        Use `fields` to limit which fields are returned. Use `expand` to include related objects such as `speakers`, `location`, `track`, `translations`, `sessionAttendance`, `registrantCount`, `reservedCount`, and `earlyBirds`.
      operationId: getOneSession
      parameters:
        - name: session_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the session you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: id,event_id,name,admin_short_name,badge_name,description,date,start_time,end_time,times_with_timezone,use_event_timezone,timezone,capacity,notes,location,location_id,track,track_id,session_included,webinar_url,type_id,direct_link,virtual_link,created_at,updated_at
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: track
          description: string - optional - Comma separated list of objects you want to return
      responses:
        '200':
          description: Get Session
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/sessionFields'
              examples:
                Get Session:
                  value:
                    capacity: '20'
                    created_at: '2015-09-28 09:20:03'
                    date: '2015-08-08'
                    description: null
                    end_time: '12:45:00'
                    id: 1
                    location: null
                    location_id: null
                    name: Symposium
                    notes: null
                    start_time: '11:30:00'
                    track: null
                    track_id: null
                    type_id: null
                    updated_at: '2015-09-28 09:20:03'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sessions/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Sessions
      summary: Create Session
      description: |-
        Creates a new session within an event. Returns the full session record on success.

        Required fields: `event_id`, `name`, and `date`. Optionally set `start_time`, `end_time`, `capacity`, `location_id`, `track_id`, `timezone`, and `description`. If `timezone` is not provided, the session inherits the event's timezone.

        Sessions are created with `session_status=live` by default. Use `selection_control` to set whether the session is optional or automatically included in registrations.
      operationId: createSession
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/sessionFields'
            examples:
              Create A New Session:
                value:
                  date: '2016-01-22'
                  event_id: '1'
                  name: Sample Session
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/sessionFields'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sessions/update/{session_id}:
    put:
      security:
        - bearerAuth: []
      tags:
        - Sessions
      summary: Update Session
      description: |-
        Updates an existing session by its unique ID. Only the fields included in the request body are modified; omitted fields are left unchanged.

        You can update scheduling (`date`, `start_time`, `end_time`), metadata (`name`, `description`, `track_id`, `location_id`), capacity, and session behavior (`selection_control`, `locked_when_saved`, `prevent_session_conflicts`). Changes to a live session take effect immediately for attendees viewing the agenda.
      operationId: updateSession
      parameters:
        - name: session_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the session you want to update
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/sessionFields'
            examples:
              Update An Existing Session:
                value:
                  date: '2023-03-02'
                  end_time: '12:00:00'
                  name: Updated Name
                  start_time: '10:00:00'
      responses:
        '200':
          description: Update Session
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/sessionFields'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sessions/delete/{session_id}:
    delete:
      security:
        - bearerAuth: []
      tags:
        - Sessions
      summary: Delete Session
      description: |-
        Permanently deletes a session by its unique ID. Returns a `204 No Content` response on success.

        Deleting a session removes it from all registrant session assignments and from the event agenda. This action cannot be undone. Any registrants assigned to this session will have it removed from their `session_ids`.
      operationId: deleteSession
      parameters:
        - name: session_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the session you want to delete
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties: {}
            examples:
              Delete Session:
                value: {}
      responses:
        '204':
          description: Delete
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sessions/fields:
    get:
      security:
        - bearerAuth: []
      tags:
        - Session Fields
      summary: Get All Fields
      description: Retrieves all custom field definitions for sessions. These fields define the schema for additional data that can be captured on sessions (e.g., custom text fields, dropdowns, URLs). Each field includes its attribute name, display type, visibility, sort order, and validation requirements.
      operationId: getAllSessionFields
      parameters:
        - name: fields
          in: query
          schema:
            type: string
            example: id,attribute,name,s_hint,type,visible,required,sort,allow_html,s_url_display_format,s_button_text,s_url_image_id,s_max_links,s_link_collection_fields
          description: string - optional - Comma separated list of fields you want to return
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: expand
          in: query
          schema:
            type: string
            example: translations
          description: 'string - optional - Comma separated list of related objects to include inline. Supported value: `translations`'
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sessions/field:
    post:
      security:
        - bearerAuth: []
      tags:
        - Session Fields
      summary: Create Field
      description: Creates a new custom field definition for sessions. Specify the field name, type (text, dropdown, checkbox, etc.), visibility, sort order, and choices (for selection-type fields). The field will become available for data entry on all sessions.
      operationId: createSessionField
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                choices:
                  type: array
                  items:
                    type: string
                    example: first
                  example:
                    - first
                    - second
                    - third
                name:
                  type: string
                  example: new session field
                type:
                  type: string
                  example: dropDownList
            examples:
              Create Session Field:
                value:
                  choices:
                    - first
                    - second
                    - third
                  name: new session field
                  type: dropDownList
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                allow_html:
                  type: string
                  example: ''
                choices:
                  type: string
                  example: ''
                name:
                  type: string
                  example: ''
                required:
                  type: string
                  example: ''
                s_button_text:
                  type: string
                  example: ''
                s_link_collection_fields:
                  type: string
                  example: ''
                s_max_links:
                  type: string
                  example: ''
                s_url_display_format:
                  type: string
                  example: ''
                s_url_image_id:
                  type: string
                  example: ''
                sort:
                  type: string
                  example: ''
                type:
                  type: string
                  example: ''
                visible:
                  type: string
                  example: ''
            examples:
              Create Session Field:
                value:
                  allow_html: ''
                  choices: ''
                  name: ''
                  required: ''
                  s_button_text: ''
                  s_link_collection_fields: ''
                  s_max_links: ''
                  s_url_display_format: ''
                  s_url_image_id: ''
                  sort: ''
                  type: ''
                  visible: ''
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                type: object
                properties:
                  created_at:
                    type: string
                    example: '2022-06-26 14:30:00'
                  updated_at:
                    type: string
                    example: '2022-06-26 14:30:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sessions/field/{field_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Session Fields
      summary: Get One Field
      description: Retrieves a single custom session field definition by its ID, including the attribute name, field type, visibility settings, validation rules, and available choices (for dropdown/radio fields).
      operationId: getOneSessionField
      parameters:
        - name: field_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the field you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: id,attribute,name,s_hint,type,visible,required,sort,allow_html,s_url_display_format,s_button_text,s_url_image_id,s_max_links,s_link_collection_fields
          description: string - optional - Comma separated list of fields you want to return
      responses:
        '200':
          description: Get Session Field
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  allow_html:
                    type: boolean
                    example: false
                  attribute:
                    type: string
                    example: c_57
                  choices:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: number
                          example: 109
                        name:
                          type: string
                          example: 'Basic: 0-1 years of experience with the topic/product; looking for a basic introduction'
                        sort:
                          type: number
                          example: 0
                    example:
                      - id: 109
                        name: 'Basic: 0-1 years of experience with the topic/product; looking for a basic introduction'
                        sort: 0
                      - id: 110
                        name: 'Intermediate: 1-3 years of experience with the topic/product: comfortable with basic functions; looking to dive deeper'
                        sort: 1
                      - id: 111
                        name: 'Advanced: 3+ years of experience with the topic/product; well-versed in all functions‚ looking to learn complexities and new trends'
                        sort: 2
                  id:
                    type: number
                    example: 57
                  name:
                    type: string
                    example: dropdown list
                  required:
                    type: boolean
                    example: false
                  settings:
                    nullable: true
                    example: null
                  sort:
                    type: number
                    example: 11
                  type:
                    type: string
                    example: dropDownList
                  visible:
                    type: boolean
                    example: true
              examples:
                Get Session Field:
                  value:
                    allow_html: false
                    attribute: c_57
                    choices:
                      - id: 109
                        name: 'Basic: 0-1 years of experience with the topic/product; looking for a basic introduction'
                        sort: 0
                      - id: 110
                        name: 'Intermediate: 1-3 years of experience with the topic/product: comfortable with basic functions; looking to dive deeper'
                        sort: 1
                      - id: 111
                        name: 'Advanced: 3+ years of experience with the topic/product; well-versed in all functions‚ looking to learn complexities and new trends'
                        sort: 2
                    id: 57
                    name: dropdown list
                    required: false
                    settings: null
                    sort: 11
                    type: dropDownList
                    visible: true
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    put:
      security:
        - bearerAuth: []
      tags:
        - Session Fields
      summary: Update Field
      description: Updates an existing custom session field definition by its ID. You can modify the field name, type, visibility, sort order, validation rules, and available choices.
      operationId: updateSessionField
      parameters:
        - name: field_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the field you want to update
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                choices:
                  type: array
                  items:
                    type: object
                    properties:
                      delete:
                        type: boolean
                        example: true
                      id:
                        example: 149
                        anyOf:
                          - type: number
                            example: 149
                          - type: string
                            example: '152'
                      name:
                        type: string
                        example: new choice
                  example:
                    - delete: true
                      id: 149
                    - name: new choice
                    - id: '152'
                      name: updated choice
                name:
                  type: string
                  example: updated name
            examples:
              Update An Existing Session Field:
                value:
                  choices:
                    - delete: true
                      id: 149
                    - name: new choice
                    - id: '152'
                      name: updated choice
                  name: updated name
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                allow_html:
                  type: string
                  example: ''
                choices:
                  type: string
                  example: ''
                name:
                  type: string
                  example: ''
                required:
                  type: string
                  example: ''
                s_button_text:
                  type: string
                  example: ''
                s_link_collection_fields:
                  type: string
                  example: ''
                s_max_links:
                  type: string
                  example: ''
                s_url_display_format:
                  type: string
                  example: ''
                s_url_image_id:
                  type: string
                  example: ''
                sort:
                  type: string
                  example: ''
                visible:
                  type: string
                  example: ''
            examples:
              Update An Existing Session Field:
                value:
                  allow_html: ''
                  choices: ''
                  name: ''
                  required: ''
                  s_button_text: ''
                  s_link_collection_fields: ''
                  s_max_links: ''
                  s_url_display_format: ''
                  s_url_image_id: ''
                  sort: ''
                  visible: ''
      responses:
        '200':
          description: Update An Existing Session Field
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  allow_html:
                    type: boolean
                    example: false
                  attribute:
                    type: string
                    example: c_104
                  choices:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: number
                          example: 150
                        name:
                          type: string
                          example: second
                        sort:
                          type: number
                          example: 1
                    example:
                      - id: 150
                        name: second
                        sort: 1
                      - id: 151
                        name: third
                        sort: 2
                      - id: 152
                        name: updated choice
                        sort: 3
                      - id: 153
                        name: new choice
                        sort: 4
                  id:
                    type: number
                    example: 104
                  name:
                    type: string
                    example: updated name
                  required:
                    type: boolean
                    example: false
                  settings:
                    nullable: true
                    example: null
                  sort:
                    type: number
                    example: 28
                  type:
                    type: string
                    example: dropDownList
                  visible:
                    type: boolean
                    example: true
              examples:
                Update An Existing Session Field:
                  value:
                    allow_html: false
                    attribute: c_104
                    choices:
                      - id: 150
                        name: second
                        sort: 1
                      - id: 151
                        name: third
                        sort: 2
                      - id: 152
                        name: updated choice
                        sort: 3
                      - id: 153
                        name: new choice
                        sort: 4
                    id: 104
                    name: updated name
                    required: false
                    settings: null
                    sort: 28
                    type: dropDownList
                    visible: true
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    delete:
      security:
        - bearerAuth: []
      tags:
        - Session Fields
      summary: Delete Field
      description: Permanently deletes a custom session field definition by its ID. Any data stored in this field on existing sessions will no longer be accessible.
      operationId: deleteSessionField
      parameters:
        - name: field_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the field you want to delete
      responses:
        '204':
          description: Delete
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sessions/{session_id}/fee:
    get:
      tags:
        - Session Fees
      summary: Get session fee configuration
      description: |
        Retrieve the current fee configuration for a specific session, including base price and conditional pricing.

        **Note:** Only standard conditional pricing is exposed through the API. Early bird pricing is not accessible.
      operationId: getSessionFee
      parameters:
        - name: session_id
          in: path
          required: true
          description: The unique identifier of the session
          schema:
            type: integer
            minimum: 1
          example: 73
      responses:
        '200':
          description: Session fee configuration retrieved successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/FeeResponse'
                  - type: object
                    properties:
                      session_id:
                        type: integer
                        description: The session ID this fee belongs to
                        example: 73
                    required:
                      - session_id
              examples:
                sessionFee:
                  summary: Session fee with conditional pricing
                  value:
                    id: 124
                    session_id: 73
                    price: '20.00'
                    conditional_prices:
                      '76': '10.00'
                      '77': '5.00'
        '404':
          $ref: '#/components/responses/ParentNotFound'
    put:
      tags:
        - Session Fees
      summary: Update session fee configuration
      description: |
        Update the fee configuration for a specific session. You can update the base price and/or conditional pricing.

        **Important Notes:**
        - Only existing conditional pricing keys can be updated
        - Non-existent keys are silently ignored
        - Empty strings can be used to clear specific conditional prices
        - Early bird pricing cannot be modified through this API
      operationId: updateSessionFee
      parameters:
        - name: session_id
          in: path
          required: true
          description: The unique identifier of the session
          schema:
            type: integer
            minimum: 1
          example: 73
      requestBody:
        description: Fee configuration to update
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FeeUpdateRequest'
            examples:
              updatePriceOnly:
                $ref: '#/components/examples/updatePriceOnly'
              updateConditionalPricesOnly:
                $ref: '#/components/examples/updateConditionalPricesOnly'
              updateBothPriceAndConditional:
                $ref: '#/components/examples/updateBothPriceAndConditional'
              partialConditionalUpdate:
                $ref: '#/components/examples/partialConditionalUpdate'
              clearSpecificConditionalPrices:
                $ref: '#/components/examples/clearSpecificConditionalPrices'
              mixedConditionalOperations:
                $ref: '#/components/examples/mixedConditionalOperations'
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                price:
                  type: string
                  format: decimal
                  example: '25.00'
                conditional_prices[76]:
                  type: string
                  format: decimal
                  example: '15.00'
                conditional_prices[77]:
                  type: string
                  format: decimal
                  example: '8.00'
      responses:
        '200':
          description: Session fee updated successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/FeeResponse'
                  - type: object
                    properties:
                      session_id:
                        type: integer
                        description: The session ID this fee belongs to
                        example: 73
                    required:
                      - session_id
              examples:
                updatePriceOnly:
                  $ref: '#/components/examples/updatePriceOnly'
                updateConditionalPricesOnly:
                  $ref: '#/components/examples/updateConditionalPricesOnly'
                updateBothPriceAndConditional:
                  $ref: '#/components/examples/updateBothPriceAndConditional'
                partialConditionalUpdate:
                  $ref: '#/components/examples/partialConditionalUpdate'
                clearSpecificConditionalPrices:
                  $ref: '#/components/examples/clearSpecificConditionalPrices'
                mixedConditionalOperations:
                  $ref: '#/components/examples/mixedConditionalOperations'
        '404':
          $ref: '#/components/responses/ParentNotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
    delete:
      tags:
        - Session Fees
      summary: Remove session fee
      description: |
        Remove the fee for a specific session, effectively making it free. This sets the base price to 0 and clears all conditional pricing.

        **Note:** This operation cannot be undone through the API. The fee will need to be reconfigured manually if pricing needs to be restored.
      operationId: deleteSessionFee
      parameters:
        - name: session_id
          in: path
          required: true
          description: The unique identifier of the session
          schema:
            type: integer
            minimum: 1
          example: 73
      responses:
        '200':
          description: Session fee removed successfully (session is now free)
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/FeeResponse'
                  - type: object
                    properties:
                      session_id:
                        type: integer
                        description: The session ID this fee belongs to
                        example: 73
                      price:
                        type: string
                        example: '0'
                      conditional_prices:
                        type: object
                        description: All conditional prices are cleared (empty strings)
                        example:
                          '76': ''
                          '77': ''
                    required:
                      - session_id
              examples:
                removedFee:
                  summary: Session fee removed (now free)
                  value:
                    id: 124
                    session_id: 73
                    price: '0'
                    conditional_prices:
                      '76': ''
                      '77': ''
        '404':
          $ref: '#/components/responses/ParentNotFound'
  /locations:
    get:
      security:
        - bearerAuth: []
      tags:
        - Session Locations
      summary: Get All Locations
      description: Retrieves all session locations (rooms/venues) for a specific event. Locations can be assigned to sessions and include details like name, capacity, and address. Requires the `event_id` query parameter.
      operationId: getAllSessionLocations
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve locations for
        - name: fields
          in: query
          schema:
            type: string
            example: id,name,capacity,color,use_event_address,created_by,created_at,updated_by,updated_at
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: address
          description: 'string - optional - Comma separated list of related objects to include inline. Supported value: `address`'
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
            example: ''
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /locations/{location_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Session Locations
      summary: Get One Location
      description: Retrieves a single session location by its ID, including the location name, capacity, and address details.
      operationId: getOneSessionLocation
      parameters:
        - name: location_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the location you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: id,name,capacity,color,use_event_address,created_by,created_at,updated_by,updated_at
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: address
          description: 'string - optional - Comma separated list of related objects to include inline. Supported value: `address`'
      responses:
        '200':
          description: Get Location
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /locations/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Session Locations
      summary: Create Location
      description: 'Creates a new session location (room/venue) for an event. Requires `event_id` and `name` in the request body. Optional fields: `capacity` (max occupancy), `color` (hex code used for display in session calendars), and `use_event_address` (when true, the location reuses the event''s address rather than its own).'
      operationId: createSessionLocation
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
                - event_id
                - name
              properties:
                event_id:
                  type: integer
                  description: ID of the event this location belongs to.
                  example: 1464
                name:
                  type: string
                  maxLength: 255
                  description: Display name of the location.
                  example: Main Hall
                capacity:
                  type: integer
                  description: Maximum number of attendees the location can hold.
                  example: 100
                color:
                  type: string
                  maxLength: 7
                  description: Hex colour code (including the leading `#`) used when rendering sessions assigned to this location.
                  example: '#FF0000'
                use_event_address:
                  type: integer
                  enum:
                    - 0
                    - 1
                  description: '`1` when the location reuses the event''s address (no standalone address is created); `0` to use the location''s own address. Defaults to `1` when omitted. Only `0` and `1` are accepted — `true`/`false` will be rejected with a 422 validation error.'
                  example: 0
            examples:
              Create A New Location:
                value:
                  event_id: 1464
                  name: Main Hall
                  capacity: 100
                  color: '#FF0000'
                  use_event_address: 0
      responses:
        '201':
          description: Location created
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    example: 42
                  name:
                    type: string
                    example: Main Hall
                  capacity:
                    type: integer
                    nullable: true
                    example: 100
                  color:
                    type: string
                    nullable: true
                    example: '#FF0000'
                  use_event_address:
                    type: boolean
                    example: false
                  created_by:
                    type: integer
                    description: ID of the user who created the location.
                    example: 12345
                  created_at:
                    type: string
                    example: '2022-06-26 14:30:00'
                  updated_by:
                    type: integer
                    description: ID of the user who last updated the location.
                    example: 12345
                  updated_at:
                    type: string
                    example: '2022-06-26 14:30:00'
        '400':
          description: Bad Request - the `event_id` parameter is missing or not a valid integer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                name: Bad Request
                message: Invalid event_id specified
                code: 0
                status: 400
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          description: Data validation failed. The response is an array of per-field error objects — for example, when `name` is missing or `color` exceeds 7 characters.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    field:
                      type: string
                      example: name
                    message:
                      type: string
                      example: Name cannot be blank.
        '500':
          $ref: '#/components/responses/InternalServerError'
  /locations/update/{location_id}:
    put:
      security:
        - bearerAuth: []
      tags:
        - Session Locations
      summary: Update Location
      description: Updates an existing session location by its ID. You can modify the name, capacity, and address. Only the fields included in the request body will be updated.
      operationId: updateSessionLocation
      parameters:
        - name: location_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the location you want to update
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                capacity:
                  type: string
                  example: ''
                color:
                  type: string
                  example: ''
                name:
                  type: string
                  example: ''
                use_event_address:
                  type: string
                  example: ''
            examples:
              Update An Existing Location:
                value:
                  capacity: ''
                  color: ''
                  name: ''
                  use_event_address: ''
      responses:
        '200':
          description: ''
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /locations/delete/{location_id}:
    delete:
      security:
        - bearerAuth: []
      tags:
        - Session Locations
      summary: Delete Location
      description: Permanently deletes a session location by its ID. Sessions currently assigned to this location will need to be reassigned to a different location.
      operationId: deleteSessionLocation
      parameters:
        - name: location_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the location you want to delete
      responses:
        '204':
          description: Delete
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /session-attendances:
    get:
      security:
        - bearerAuth: []
      tags:
        - Session Attendance
      summary: Get All Attendance
      description: Retrieves all session attendance records for an event. Each record links a registrant to a session and tracks whether they actually attended (as opposed to just being registered). Requires the `event_id` query parameter. Useful for post-event reporting and CE credit tracking.
      operationId: getAllSessionAttendance
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve attendance for
        - name: fields
          in: query
          schema:
            type: string
            example: session_id,registrant_id,waiting_room_date,check_in_date,check_out_date,duration,on_demand_date,physical_arrived_at,virtual_arrived_at,virtual_departed_at,virtual_duration,has_physical_checkin,has_virtual_checkin
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: session,registrant
          description: string - optional - Comma separated list of objects you want to return
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
            example: ''
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /session-attendances/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Session Attendance
      summary: Create Session Attendance
      description: Creates a new attendance record to mark a registrant as having attended a session. Requires `session_id` and `registrant_id` in the request body. This is separate from session registration and represents actual physical attendance.
      operationId: createSessionAttendance
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                session_id:
                  type: string
                  example: '123'
                  required: true
                registrant_id:
                  type: string
                  example: '123'
                  required: true
                waiting_room_date:
                  type: string
                  example: '2022-06-26 14:30:00'
                check_in_date:
                  type: string
                  example: '2022-06-26 14:30:00'
                check_out_date:
                  type: string
                  example: '2022-06-26 14:30:00'
                on_demand_date:
                  type: string
                  example: '2022-06-26 14:30:00'
            examples:
              Create Session Attendance:
                value:
                  session_id: '123'
                  registrant_id: '123'
                  waiting_room_date: '2022-06-26 14:30:00'
                  check_in_date: '2022-06-26 15:30:00'
                  check_out_date: '2022-06-26 16:30:00'
          multipart/form-data:
            schema:
              type: object
              properties:
                registrant_id:
                  type: string
                  example: '123'
                session_id:
                  type: string
                  example: '123'
                check_in_date:
                  type: string
                  example: '2022-06-26 15:30:00'
                check_out_date:
                  type: string
                  example: '2022-06-26 16:30:00'
      responses:
        '201':
          description: Session Attendance created successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    example: 789
                  session_id:
                    type: string
                    example: '123'
                  registrant_id:
                    type: string
                    example: '456'
                  waiting_room_date:
                    type: string
                    nullable: true
                    example: '2022-06-26 14:25:00'
                  check_in_date:
                    type: string
                    nullable: true
                    example: '2022-06-26 15:30:00'
                  check_out_date:
                    type: string
                    nullable: true
                    example: '2022-06-26 16:30:00'
                  duration:
                    type: string
                    nullable: true
                    example: '60'
                  on_demand_date:
                    type: string
                    nullable: true
                    example: '2022-06-27 10:00:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          description: Validation error occurred.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    field:
                      type: string
                      example: registrant_id
                    message:
                      type: string
                      example: Invalid Registrant
              examples:
                Invalid Registrant:
                  value:
                    - field: registrant_id
                      message: Invalid Registrant
                Invalid Session:
                  value:
                    - field: session_id
                      message: Invalid Session
                Duplicate Attendance:
                  value:
                    - field: registrant_id
                      message: Record already exists. Please use the Update endpoint with session_attendance_id = 123
                Invalid Date Format:
                  value:
                    - field: check_in_date
                      message: Invalid date format
                    - field: check_out_date
                      message: Invalid date format
        '500':
          $ref: '#/components/responses/InternalServerError'
  /session-attendances/update/{session_attendance_id}:
    put:
      security:
        - bearerAuth: []
      tags:
        - Session Attendance
      summary: Update Session Attendance
      description: Updates an existing session attendance record by its ID. Use this to modify the attendance status or other details of a previously recorded attendance entry.
      operationId: updateSessionAttendance
      parameters:
        - name: session_attendance_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the object you want to update
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                waiting_room_date:
                  type: string
                  example: '2022-06-26 14:30:00'
                check_in_date:
                  type: string
                  example: '2022-06-26 14:30:00'
                check_out_date:
                  type: string
                  example: '2022-06-26 14:30:00'
                on_demand_date:
                  type: string
                  example: '2022-06-26 14:30:00'
            examples:
              Update Session Attendance:
                value:
                  waiting_room_date: '2022-06-26 14:30:00'
                  check_in_date: '2022-06-26 15:30:00'
                  check_out_date: '2022-06-26 16:30:00'
          multipart/form-data:
            schema:
              type: object
              properties:
                check_in_date:
                  type: string
                  example: '2022-06-26 15:30:00'
                check_out_date:
                  type: string
                  example: '2022-06-26 16:30:00'
      responses:
        '200':
          description: Session Attendance updated successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    example: 789
                  session_id:
                    type: string
                    example: '123'
                  registrant_id:
                    type: string
                    example: '456'
                  waiting_room_date:
                    type: string
                    example: '2022-06-26 14:25:00'
                  check_in_date:
                    type: string
                    example: '2022-06-26 15:30:00'
                  check_out_date:
                    type: string
                    example: '2022-06-26 16:30:00'
                  duration:
                    type: string
                    example: '60'
                  on_demand_date:
                    type: string
                    example: '2022-06-27 10:00:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /speakers:
    get:
      security:
        - bearerAuth: []
      tags:
        - Speakers
      summary: Get All Speakers
      description: Returns a paginated list of speakers for a specific event. Requires the `event_id` query parameter. Default fields returned are `id`, `first_name`, and `last_name` -- use `fields` to request additional properties and `expand=sessions` to include each speaker's assigned sessions. Use `search` to filter by any speaker field (e.g., `company=Acme`) and `sort` to control ordering.
      operationId: getAllSpeakers
      x-codeSamples:
        - lang: cURL
          label: cURL
          source: |
            curl -X GET "https://api.swoogo.com/api/v1/speakers?event_id=123&fields=id,first_name,last_name,company,bio&expand=sessions" \
              -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve speakers for
        - name: fields
          in: query
          schema:
            type: string
            example: id,first_name,last_name,company
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: ''
          description: string - optional - Comma separated list of objects you want to return
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /speakers/{speaker_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Speakers
      summary: Get One Speaker
      description: Returns the full details of a single speaker by `speaker_id`. Use `fields` to limit which properties are returned and `expand=sessions` to include the list of sessions assigned to this speaker. Speaker profile data (name, email, company, bio) originates from the linked contact record.
      operationId: getOneSpeaker
      parameters:
        - name: speaker_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the speaker you want to use
        - name: fields
          in: query
          schema:
            type: string
            example: id,first_name,last_name,company
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: sessions
          description: string - optional - Use sessions to include the list of sessions assigned to this speaker
      responses:
        '200':
          description: Get Speaker
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  bio:
                    nullable: true
                    example: null
                  company:
                    type: string
                    example: Stinson Leonard Street
                  created_at:
                    type: string
                    example: '2016-09-06 18:32:59'
                  email:
                    type: string
                    example: joel.abrahamson@stinsonleonard.com
                  event_id:
                    type: number
                    example: 1
                  first_name:
                    type: string
                    example: Joel
                  id:
                    type: number
                    example: 1
                  job_title:
                    nullable: true
                    example: null
                  last_name:
                    type: string
                    example: Abrahamson
                  profile_picture:
                    type: string
                    example: ''
                  updated_at:
                    type: string
                    example: '2016-09-06 18:32:59'
              examples:
                Get Speaker:
                  value:
                    bio: null
                    company: Stinson Leonard Street
                    created_at: '2016-09-06 18:32:59'
                    email: joel.abrahamson@stinsonleonard.com
                    event_id: 1
                    first_name: Joel
                    id: 1
                    job_title: null
                    last_name: Abrahamson
                    profile_picture: ''
                    updated_at: '2016-09-06 18:32:59'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /speakers/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Speakers
      summary: Create Speaker
      description: Creates a new speaker for an event by linking an existing contact. Both `event_id` and `contact_id` are required. The speaker's profile data (name, email, company, bio) is pulled from the linked contact record. Returns the newly created speaker object. Note that speakers cannot be updated via PUT -- to change speaker details, update the underlying contact or delete and re-create the speaker.
      operationId: createSpeaker
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                contact_id:
                  type: string
                  example: '4'
                event_id:
                  type: string
                  example: '55'
            examples:
              Create A New Speaker:
                value:
                  contact_id: '4'
                  event_id: '55'
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                type: object
                properties:
                  created_at:
                    type: string
                    example: '2022-06-26 14:30:00'
                  updated_at:
                    type: string
                    example: '2022-06-26 14:30:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /speakers/delete/{speaker_id}:
    delete:
      security:
        - bearerAuth: []
      tags:
        - Speakers
      summary: Delete Speaker
      description: Permanently removes a speaker from an event by `speaker_id`. This also removes any session associations for the speaker. The underlying contact record is not affected. Note that there is no PUT endpoint for speakers -- to modify speaker data, update the linked contact record directly.
      operationId: deleteSpeaker
      parameters:
        - name: speaker_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the speaker you want to use
      responses:
        '204':
          description: Delete Speaker
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /speakers/{speaker_id}/session.json:
    post:
      security:
        - bearerAuth: []
      tags:
        - Speaker Sessions
      summary: Add sessions to speaker (JSON body)
      description: Assigns a speaker to one or more sessions in a single request using a JSON body with an array of `session_ids`. The speaker is identified by `speaker_id` in the path. All sessions must belong to the same event as the speaker. Returns the full speaker object including the updated sessions list on success, or validation errors if any session ID is invalid.
      operationId: createSpeakerSessionJson
      parameters:
        - name: speaker_id
          in: path
          required: true
          schema:
            type: integer
            example: 3
          description: integer - required - The ID of the speaker you want to associate sessions with
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - session_ids
              properties:
                session_ids:
                  type: array
                  items:
                    type: integer
                  description: array of integers - required - The list of session IDs to associate with the speaker
      responses:
        '201':
          description: Speaker updated with associated sessions
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    example: 101
                  event_id:
                    type: integer
                    example: 12
                  contact_id:
                    type: integer
                    example: 77
                  cfs_speaker:
                    type: boolean
                    example: false
                  email:
                    type: string
                    example: john.doe@example.com
                  bio:
                    type: string
                    example: Seasoned speaker in tech events.
                  first_name:
                    type: string
                    example: John
                  prefix:
                    type: string
                    example: Mr.
                  last_name:
                    type: string
                    example: Doe
                  company:
                    type: string
                    example: Tech Solutions
                  middle_name:
                    type: string
                    example: Andrew
                  job_title:
                    type: string
                    example: CTO
                  work_phone:
                    type: string
                    example: +1 123-456-7890
                  mobile_phone:
                    type: string
                    example: +1 987-654-3210
                  suffix:
                    type: string
                    example: Jr.
                  profile_picture:
                    type: string
                    example: https://example.com/uploads/speakers/101.jpg
                  twitter_handle:
                    type: string
                    example: '@john_doe'
                  gender:
                    type: object
                    properties:
                      id:
                        type: integer
                        nullable: true
                        example: null
                      value:
                        type: string
                        nullable: true
                        example: null
                  birth_date:
                    type: string
                    example: '1985-06-15'
                  cc_email:
                    type: string
                    example: assistant@example.com
                  vat_number:
                    type: string
                    example: '123456789'
                  created_at:
                    type: string
                    format: date-time
                    example: '2025-01-15 10:30:00'
                  direct_link:
                    type: string
                    example: https://conference.example.com/event12/speaker/101/john-doe
                  updated_at:
                    type: string
                    format: date-time
                    example: '2025-04-01 14:45:00'
                  event_sort:
                    type: integer
                    example: 2
                  sessions:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          example: 201
                        event_id:
                          type: integer
                          example: 12
                        name:
                          type: string
                          example: Opening Keynote
                        admin_short_name:
                          type: string
                          example: ''
                        badge_name:
                          type: string
                          example: ''
                        description:
                          type: string
                          example: <p>Welcome session</p>
                        date:
                          type: string
                          format: date
                          example: '2025-06-01'
                        start_time:
                          type: string
                          example: '09:00:00'
                        end_time:
                          type: string
                          example: '10:00:00'
                        times_with_timezone:
                          type: string
                          example: 9:00 AM - 10:00 AM (EST)
                        use_event_timezone:
                          type: boolean
                          example: true
                        timezone:
                          type: string
                          example: America/New_York
                        capacity:
                          type: integer
                          nullable: true
                          example: null
                        notes:
                          type: string
                          nullable: true
                          example: null
                        location:
                          type: string
                          nullable: true
                          example: null
                        location_id:
                          type: integer
                          nullable: true
                          example: null
                        track:
                          type: string
                          nullable: true
                          example: null
                        track_id:
                          type: integer
                          nullable: true
                          example: null
                        session_included:
                          type: boolean
                          example: false
                        locked_when_saved:
                          type: boolean
                          example: false
                        selected_by_default:
                          type: boolean
                          example: false
                        prevent_session_conflicts:
                          type: boolean
                          example: true
                        session_status:
                          type: string
                          example: live
                        type_id:
                          type: integer
                          nullable: true
                          example: null
                        webinar_url:
                          type: string
                          nullable: true
                          example: null
                        direct_link:
                          type: string
                          example: https://conference.example.com/event12/session/201/opening-keynote
                        virtual_link:
                          type: string
                          nullable: true
                          example: null
                        created_at:
                          type: string
                          format: date-time
                          example: '2025-03-01 08:00:00'
                        updated_at:
                          type: string
                          format: date-time
                          example: '2025-03-15 09:00:00'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                type: object
                properties:
                  name:
                    type: string
                    example: Bad Request
                  message:
                    type: string
                    example: Invalid JSON or missing 'session_ids'
                  code:
                    type: integer
                    example: 0
                  status:
                    type: integer
                    example: 400
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: The requested resource does not exist.
          content:
            application/json:
              schema:
                type: object
                properties:
                  name:
                    type: string
                    example: Not Found
                  message:
                    type: string
                    example: The requested speaker or session does not exist.
                  code:
                    type: integer
                    example: 0
                  status:
                    type: integer
                    example: 404
        '500':
          $ref: '#/components/responses/InternalServerError'
  /speakers/{speaker_id}/session/{session_id}:
    post:
      security:
        - bearerAuth: []
      tags:
        - Speaker Sessions
      summary: Create Speaker
      description: Assigns a speaker to a single session by providing both `speaker_id` and `session_id` as path parameters. The speaker and session must belong to the same event. Returns the created association. To assign a speaker to multiple sessions at once, use the JSON body variant of this endpoint instead.
      operationId: createSpeakerSession
      parameters:
        - name: speaker_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the speaker you want to use
        - name: session_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the session you want to use
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                type: object
                properties:
                  created_at:
                    type: string
                    example: '2022-06-26 14:30:00'
                  updated_at:
                    type: string
                    example: '2022-06-26 14:30:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    delete:
      security:
        - bearerAuth: []
      tags:
        - Speaker Sessions
      summary: Delete Speaker
      description: Removes a speaker from a specific session by providing both `speaker_id` and `session_id` as path parameters. This only removes the association -- the speaker and session records themselves are not deleted.
      operationId: deleteSpeakerSession
      parameters:
        - name: speaker_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the speaker you want to use
        - name: session_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the session you want to use
      responses:
        '200':
          description: Remove Session From A Speaker
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  bio:
                    type: string
                    example: "<div><strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</div>"
                  birth_date:
                    type: string
                    example: ''
                  c_127:
                    type: object
                    properties:
                      id:
                        type: string
                        example: ''
                      value:
                        nullable: true
                        example: null
                  c_142:
                    type: string
                    example: https://www.google.com
                  c_148:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          example: '54'
                        value:
                          type: string
                          example: test
                    example:
                      - id: '54'
                        value: test
                  c_158:
                    type: string
                    example: ''
                  c_197:
                    type: string
                    example: https://google.com
                  c_209:
                    type: array
                    items: {}
                    example: []
                  c_693:
                    type: string
                    example: ''
                  c_694:
                    type: string
                    example: ''
                  c_696:
                    type: string
                    example: ''
                  c_699:
                    type: string
                    example: ''
                  cc_email:
                    type: string
                    example: ''
                  company:
                    type: string
                    example: alabala
                  created_at:
                    type: string
                    example: '2017-08-28 18:55:53'
                  direct_link:
                    type: string
                    example: https://local.alex.swoogo.com/1734/speaker/1027/alex-000503453
                  email:
                    type: string
                    example: alex0004@swoogo.com
                  event_id:
                    type: number
                    example: 55
                  first_name:
                    type: string
                    example: alex
                  gender:
                    type: object
                    properties:
                      id:
                        nullable: true
                        example: null
                      value:
                        nullable: true
                        example: null
                  id:
                    type: number
                    example: 1027
                  job_title:
                    type: string
                    example: ''
                  last_name:
                    type: string
                    example: '000503453'
                  middle_name:
                    type: string
                    example: ''
                  mobile_phone:
                    type: string
                    example: ''
                  prefix:
                    type: string
                    example: ''
                  profile_picture:
                    type: string
                    example: https://assets.swoogo-qa.com/uploads/full/832-5d1373ca4cb0b.png
                  sessions:
                    type: array
                    items:
                      type: object
                      properties:
                        badge_name:
                          type: string
                          nullable: true
                          example: ''
                        c_22:
                          type: string
                          nullable: true
                          example: custom 1
                        c_38:
                          type: string
                          nullable: true
                          example: <a href="http://www.google.com">http://www.google.com</a>
                        c_39:
                          type: string
                          example: ''
                        c_40:
                          type: string
                          nullable: true
                          example: test
                        c_44:
                          type: array
                          items:
                            type: object
                            properties:
                              id:
                                type: string
                                example: '59'
                              value:
                                type: string
                                example: two
                          example:
                            - id: '59'
                              value: two
                        c_49:
                          type: string
                          nullable: true
                          example: <a href="http://www.google.com">http://www.google.com</a>
                        c_53:
                          type: string
                          nullable: true
                          example: alex@test.com
                        c_54:
                          type: string
                          nullable: true
                          example: '2018-09-06'
                        c_55:
                          type: string
                          nullable: true
                          example: '01:30:00'
                        c_56:
                          type: string
                          nullable: true
                          example: null
                        c_57:
                          type: object
                          properties:
                            id:
                              type: string
                              nullable: true
                              example: ''
                            value:
                              nullable: true
                              example: null
                        capacity:
                          type: number
                          nullable: true
                          example: 20
                        created_at:
                          type: string
                          example: '2017-12-20 19:51:47'
                        date:
                          type: string
                          nullable: true
                          example: '2020-01-30'
                        description:
                          type: string
                          example: <p><strong>lorem ipsym</strong></p>
                        direct_link:
                          type: string
                          example: https://local.alex.swoogo.com/1734/session/69/network-table-1-test
                        end_time:
                          type: string
                          nullable: true
                          example: '01:30:00'
                        event_id:
                          type: number
                          example: 55
                        id:
                          type: number
                          example: 69
                        location:
                          type: string
                          example: Waitrose
                        name:
                          type: string
                          example: network table 1 test
                        notes:
                          nullable: true
                          example: null
                        session_included:
                          type: boolean
                          example: false
                        start_time:
                          type: string
                          nullable: true
                          example: '00:00:00'
                        timezone:
                          type: string
                          example: Europe/London
                        track:
                          type: string
                          example: 'Day 1: Interactive Learning Session'
                        type_id:
                          type: object
                          properties:
                            id:
                              type: number
                              nullable: true
                              example: 14
                            value:
                              type: string
                              nullable: true
                              example: Symposium
                        updated_at:
                          type: string
                          example: '2020-01-29 17:21:58'
                        use_event_timezone:
                          type: boolean
                          example: true
                        webinar_url:
                          nullable: true
                          example: null
                    example:
                      - badge_name: ''
                        c_22: custom 1
                        c_38: <a href="http://www.google.com">http://www.google.com</a>
                        c_39: ''
                        c_40: test
                        c_44:
                          - id: '59'
                            value: two
                        c_49: <a href="http://www.google.com">http://www.google.com</a>
                        c_53: alex@test.com
                        c_54: '2018-09-06'
                        c_55: '01:30:00'
                        c_56: null
                        c_57:
                          id: ''
                          value: null
                        capacity: 20
                        created_at: '2017-12-20 19:51:47'
                        date: '2020-01-30'
                        description: <p><strong>lorem ipsym</strong></p>
                        direct_link: https://local.alex.swoogo.com/1734/session/69/network-table-1-test
                        end_time: '01:30:00'
                        event_id: 55
                        id: 69
                        location: Waitrose
                        name: network table 1 test
                        notes: null
                        session_included: false
                        start_time: '00:00:00'
                        timezone: Europe/London
                        track: 'Day 1: Interactive Learning Session'
                        type_id:
                          id: 14
                          value: Symposium
                        updated_at: '2020-01-29 17:21:58'
                        use_event_timezone: true
                        webinar_url: null
                      - badge_name: ''
                        c_22: ''
                        c_38: null
                        c_39: ''
                        c_40: ''
                        c_44: []
                        c_49: null
                        c_53: ''
                        c_54: null
                        c_55: '01:30:00'
                        c_56: <a href="https://www.google.com">https://www.google.com</a>
                        c_57:
                          id: ''
                          value: null
                        capacity: 1
                        created_at: '2018-05-08 14:15:11'
                        date: null
                        description: ''
                        direct_link: https://local.alex.swoogo.com/1734/session/96/paid_
                        end_time: null
                        event_id: 55
                        id: 96
                        location: Reading Station
                        name: paid_
                        notes: null
                        session_included: false
                        start_time: null
                        timezone: Europe/London
                        track: 'Day 0: Interactive Learning Session'
                        type_id:
                          id: null
                          value: null
                        updated_at: '2019-08-29 11:37:36'
                        use_event_timezone: true
                        webinar_url: null
                      - badge_name: null
                        c_22: null
                        c_38: null
                        c_39: ''
                        c_40: null
                        c_44: []
                        c_49: null
                        c_53: null
                        c_54: null
                        c_55: null
                        c_56: null
                        c_57:
                          id: null
                          value: null
                        capacity: null
                        created_at: '2019-04-18 08:01:15'
                        date: '2017-11-20'
                        description: Team planning meeting.<br />
                        direct_link: https://local.alex.swoogo.com/1734/session/199/ctt-team-planning-meeting
                        end_time: '20:55:00'
                        event_id: 55
                        id: 199
                        location: Committee Room 2
                        name: CT&T Team Planning Meeting
                        notes: null
                        session_included: false
                        start_time: '18:30:00'
                        timezone: Europe/London
                        track: Miscellaneous
                        type_id:
                          id: 0
                          value: null
                        updated_at: '2020-08-20 13:30:43'
                        use_event_timezone: true
                        webinar_url: null
                  suffix:
                    type: string
                    example: ''
                  twitter_handle:
                    type: string
                    example: ''
                  updated_at:
                    type: string
                    example: '2020-06-11 17:26:03'
                  work_phone:
                    type: string
                    example: +1 201-555-5555
              examples:
                Remove Session From A Speaker:
                  value:
                    bio: "<div><strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.<strong>Lorem Ipsum</strong>\_is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</div>"
                    birth_date: ''
                    c_127:
                      id: ''
                      value: null
                    c_142: https://www.google.com
                    c_148:
                      - id: '54'
                        value: test
                    c_158: ''
                    c_197: https://google.com
                    c_209: []
                    c_693: ''
                    c_694: ''
                    c_696: ''
                    c_699: ''
                    cc_email: ''
                    company: alabala
                    created_at: '2017-08-28 18:55:53'
                    direct_link: https://local.alex.swoogo.com/1734/speaker/1027/alex-000503453
                    email: alex0004@swoogo.com
                    event_id: 55
                    first_name: alex
                    gender:
                      id: null
                      value: null
                    id: 1027
                    job_title: ''
                    last_name: '000503453'
                    middle_name: ''
                    mobile_phone: ''
                    prefix: ''
                    profile_picture: https://assets.swoogo-qa.com/uploads/full/832-5d1373ca4cb0b.png
                    sessions:
                      - badge_name: ''
                        c_22: custom 1
                        c_38: <a href="http://www.google.com">http://www.google.com</a>
                        c_39: ''
                        c_40: test
                        c_44:
                          - id: '59'
                            value: two
                        c_49: <a href="http://www.google.com">http://www.google.com</a>
                        c_53: alex@test.com
                        c_54: '2018-09-06'
                        c_55: '01:30:00'
                        c_56: null
                        c_57:
                          id: ''
                          value: null
                        capacity: 20
                        created_at: '2017-12-20 19:51:47'
                        date: '2020-01-30'
                        description: <p><strong>lorem ipsym</strong></p>
                        direct_link: https://local.alex.swoogo.com/1734/session/69/network-table-1-test
                        end_time: '01:30:00'
                        event_id: 55
                        id: 69
                        location: Waitrose
                        name: network table 1 test
                        notes: null
                        session_included: false
                        start_time: '00:00:00'
                        timezone: Europe/London
                        track: 'Day 1: Interactive Learning Session'
                        type_id:
                          id: 14
                          value: Symposium
                        updated_at: '2020-01-29 17:21:58'
                        use_event_timezone: true
                        webinar_url: null
                      - badge_name: ''
                        c_22: ''
                        c_38: null
                        c_39: ''
                        c_40: ''
                        c_44: []
                        c_49: null
                        c_53: ''
                        c_54: null
                        c_55: '01:30:00'
                        c_56: <a href="https://www.google.com">https://www.google.com</a>
                        c_57:
                          id: ''
                          value: null
                        capacity: 1
                        created_at: '2018-05-08 14:15:11'
                        date: null
                        description: ''
                        direct_link: https://local.alex.swoogo.com/1734/session/96/paid_
                        end_time: null
                        event_id: 55
                        id: 96
                        location: Reading Station
                        name: paid_
                        notes: null
                        session_included: false
                        start_time: null
                        timezone: Europe/London
                        track: 'Day 0: Interactive Learning Session'
                        type_id:
                          id: null
                          value: null
                        updated_at: '2019-08-29 11:37:36'
                        use_event_timezone: true
                        webinar_url: null
                      - badge_name: null
                        c_22: null
                        c_38: null
                        c_39: ''
                        c_40: null
                        c_44: []
                        c_49: null
                        c_53: null
                        c_54: null
                        c_55: null
                        c_56: null
                        c_57:
                          id: null
                          value: null
                        capacity: null
                        created_at: '2019-04-18 08:01:15'
                        date: '2017-11-20'
                        description: Team planning meeting.<br />
                        direct_link: https://local.alex.swoogo.com/1734/session/199/ctt-team-planning-meeting
                        end_time: '20:55:00'
                        event_id: 55
                        id: 199
                        location: Committee Room 2
                        name: CT&T Team Planning Meeting
                        notes: null
                        session_included: false
                        start_time: '18:30:00'
                        timezone: Europe/London
                        track: Miscellaneous
                        type_id:
                          id: 0
                          value: null
                        updated_at: '2020-08-20 13:30:43'
                        use_event_timezone: true
                        webinar_url: null
                    suffix: ''
                    twitter_handle: ''
                    updated_at: '2020-06-11 17:26:03'
                    work_phone: +1 201-555-5555
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sponsors:
    get:
      security:
        - bearerAuth: []
      tags:
        - Sponsors
      summary: Get All Sponsors
      description: Returns a paginated list of sponsors for a specific event. Requires the `event_id` query parameter. Default fields returned are `id` and `name` -- use `fields` to request additional properties such as website, description, level, logo_id, and direct_link. Use `search` to filter by any sponsor field and `sort` to control ordering.
      operationId: getAllSponsors
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve sponsors for
        - name: fields
          in: query
          schema:
            type: string
            example: id,event_id,name,website,description,logo_id,level,webinar_url,video_url,notes,created_at,updated_at,direct_link
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: translations,sponsorAttendance
          description: 'string - optional - Comma separated list of related objects to include inline. Supported values: `translations`, `sponsorAttendance`'
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sponsors/{sponsor_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Sponsors
      summary: Get One Sponsor
      description: Returns the full details of a single sponsor by `sponsor_id`, including name, description, level, website, logo, and direct link. Use `fields` to limit which properties are returned.
      operationId: getOneSponsor
      parameters:
        - name: sponsor_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the sponsor you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: id,event_id,name,website,description,logo_id,level,webinar_url,video_url,notes,created_at,updated_at,direct_link
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: translations,sponsorAttendance
          description: 'string - optional - Comma separated list of related objects to include inline. Supported values: `translations`, `sponsorAttendance`'
      responses:
        '200':
          description: Get Sponsor
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  created_at:
                    type: string
                    example: '2015-09-28 09:20:03'
                  description:
                    type: string
                    example: Sample description
                  event_id:
                    type: number
                    example: 1
                  id:
                    type: number
                    example: 1
                  level:
                    type: object
                    properties:
                      id:
                        type: number
                        example: 2
                      value:
                        type: string
                        example: Gold
                  logo_id:
                    nullable: true
                    example: null
                  name:
                    type: string
                    example: Sample Sponsor
                  notes:
                    nullable: true
                    example: null
                  updated_at:
                    type: string
                    example: '2015-09-28 09:20:03'
                  website:
                    nullable: true
                    example: null
              examples:
                Get Sponsor:
                  value:
                    created_at: '2015-09-28 09:20:03'
                    description: Sample description
                    event_id: 1
                    id: 1
                    level:
                      id: 2
                      value: Gold
                    logo_id: null
                    name: Sample Sponsor
                    notes: null
                    updated_at: '2015-09-28 09:20:03'
                    website: null
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sponsors/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Sponsors
      summary: Create Sponsor
      description: Creates a new sponsor for an event. Both `event_id` and `name` are required. You can also set optional fields such as website, description, level, and logo_id. Returns the newly created sponsor object.
      operationId: createSponsor
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                event_id:
                  type: string
                  example: ''
                name:
                  type: string
                  example: ''
            examples:
              Create Sponsor:
                value:
                  event_id: ''
                  name: ''
          multipart/form-data:
            schema:
              type: object
              properties:
                event_id:
                  required: true
                  description: integer - required - The ID of the event you want to create a sponsor for
                  type: integer
                  example: 55
                name:
                  required: true
                  description: string - required - The name of the sponsor
                  type: string
                  example: api sponsor
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                type: object
                properties:
                  created_at:
                    type: string
                    example: '2022-06-26 14:30:00'
                  updated_at:
                    type: string
                    example: '2022-06-26 14:30:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sponsors/update/{sponsor_id}:
    put:
      security:
        - bearerAuth: []
      tags:
        - Sponsors
      summary: Update One Sponsor
      description: Updates an existing sponsor by `sponsor_id`. Send only the fields you want to change -- any omitted fields retain their current values. Updatable fields include name, website, description, level, logo_id, and notes. Returns the full updated sponsor object.
      operationId: updateSponsor
      parameters:
        - name: sponsor_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the sponsor you want to update
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                name:
                  type: string
                  example: ''
            examples:
              Update An Existing Sponsor:
                value:
                  name: ''
          multipart/form-data:
            schema:
              type: object
              properties:
                name:
                  type: string
                  example: updated
      responses:
        '200':
          description: Update Sponsor
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  created_at:
                    type: string
                    example: '2020-07-29 10:54:15'
                  description:
                    nullable: true
                    example: null
                  direct_link:
                    type: string
                    example: https://www.swoogo.com/1734/sponsor/94/test-update
                  event_id:
                    type: number
                    example: 55
                  id:
                    type: number
                    example: 1
                  level:
                    type: object
                    properties:
                      id:
                        nullable: true
                        example: null
                      value:
                        nullable: true
                        example: null
                  logo_id:
                    type: string
                    example: ''
                  name:
                    type: string
                    example: updated
                  notes:
                    nullable: true
                    example: null
                  updated_at:
                    type: string
                    example: '2020-07-29 11:59:37'
                  webinar_url:
                    nullable: true
                    example: null
                  website:
                    type: string
                    example: ''
              examples:
                Update Sponsor:
                  value:
                    created_at: '2020-07-29 10:54:15'
                    description: null
                    direct_link: https://www.swoogo.com/1734/sponsor/94/test-update
                    event_id: 55
                    id: 1
                    level:
                      id: null
                      value: null
                    logo_id: ''
                    name: updated
                    notes: null
                    updated_at: '2020-07-29 11:59:37'
                    webinar_url: null
                    website: ''
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sponsors/delete/{sponsor_id}:
    delete:
      security:
        - bearerAuth: []
      tags:
        - Sponsors
      summary: Delete Sponsor
      description: Permanently deletes a sponsor from an event by `sponsor_id`. This also removes any sponsor attendance records and custom field values associated with the sponsor. This action cannot be undone.
      operationId: deleteSponsor
      parameters:
        - name: sponsor_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the sponsor you want to delete
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties: {}
            examples:
              Delete Sponsor:
                value: {}
      responses:
        '204':
          description: Delete
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sponsors/fields:
    get:
      security:
        - bearerAuth: []
      tags:
        - Sponsor Fields
      summary: Get All Fields
      description: Returns a paginated list of custom field definitions available for sponsors. These define the schema for custom data that can be stored on sponsor records (e.g., sponsorship level, booth number). Each field includes its type, name, sort order, visibility, and choices (for dropdown/multi-select fields). Use `search` to filter and `fields` to limit returned properties.
      operationId: getAllSponsorFields
      parameters:
        - name: fields
          in: query
          schema:
            type: string
            example: id,attribute,name,s_hint,type,visible,required,sort,allow_html,s_url_display_format,s_button_text,s_url_image_id,s_max_links,s_link_collection_fields
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: translations
          description: 'string - optional - Comma separated list of related objects to include inline. Supported values: `translations`'
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sponsors/field/{field_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Sponsor Fields
      summary: Get One Field
      description: Returns the full details of a single sponsor custom field definition by `field_id`, including its type, name, attribute key, sort order, visibility, required flag, and available choices (for dropdown or multi-select fields).
      operationId: getOneSponsorField
      parameters:
        - name: field_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the field you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: id,attribute,name,s_hint,type,visible,required,sort,allow_html,s_url_display_format,s_button_text,s_url_image_id,s_max_links,s_link_collection_fields
          description: string - optional - Comma separated list of fields you want to return
      responses:
        '200':
          description: Get Sponsor Field
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  allow_html:
                    type: boolean
                    example: false
                  attribute:
                    type: string
                    example: level
                  choices:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: number
                          example: 47
                        name:
                          type: string
                          example: Gold
                        sort:
                          type: number
                          example: 0
                    example:
                      - id: 47
                        name: Gold
                        sort: 0
                      - id: 48
                        name: update choice name
                        sort: 1
                      - id: 49
                        name: Bronze
                        sort: 2
                      - id: 68
                        name: Platinum
                        sort: 4
                      - id: 137
                        name: new choices of level
                        sort: 6
                      - id: 138
                        name: new choices of level
                        sort: 7
                      - id: 139
                        name: new choices of level
                        sort: 8
                      - id: 140
                        name: new choices of level
                        sort: 9
                      - id: 141
                        name: new choices of level
                        sort: 10
                      - id: 142
                        name: new choices of level
                        sort: 11
                  id:
                    type: number
                    example: 27
                  name:
                    type: string
                    example: new level of sponsorship 1
                  required:
                    type: boolean
                    example: false
                  settings:
                    nullable: true
                    example: null
                  sort:
                    type: number
                    example: 4
                  type:
                    type: string
                    example: dropDownList
                  visible:
                    type: boolean
                    example: true
              examples:
                Get Sponsor Field:
                  value:
                    allow_html: false
                    attribute: level
                    choices:
                      - id: 47
                        name: Gold
                        sort: 0
                      - id: 48
                        name: update choice name
                        sort: 1
                      - id: 49
                        name: Bronze
                        sort: 2
                      - id: 68
                        name: Platinum
                        sort: 4
                      - id: 137
                        name: new choices of level
                        sort: 6
                      - id: 138
                        name: new choices of level
                        sort: 7
                      - id: 139
                        name: new choices of level
                        sort: 8
                      - id: 140
                        name: new choices of level
                        sort: 9
                      - id: 141
                        name: new choices of level
                        sort: 10
                      - id: 142
                        name: new choices of level
                        sort: 11
                    id: 27
                    name: new level of sponsorship 1
                    required: false
                    settings: null
                    sort: 4
                    type: dropDownList
                    visible: true
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    put:
      security:
        - bearerAuth: []
      tags:
        - Sponsor Fields
      summary: Update Field
      description: 'Updates an existing sponsor custom field definition by `field_id`. Send only the properties you want to change. For choice-based fields, you can add new choices, update existing choices by `id`, or delete choices by passing `delete: true` with the choice `id`. Returns the full updated field definition including all current choices.'
      operationId: updateSponsorField
      parameters:
        - name: field_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the field you want to update
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                choices:
                  type: array
                  items:
                    type: object
                    properties:
                      delete:
                        type: boolean
                        example: true
                      id:
                        type: number
                        example: 136
                      name:
                        type: string
                        example: new choices of level
                  example:
                    - name: new choices of level
                    - delete: true
                      id: 136
                    - id: 48
                      name: update choice name
                name:
                  type: string
                  example: new level of sponsorship 1
            examples:
              Update An Existing Sponsor Field:
                value:
                  choices:
                    - name: new choices of level
                    - delete: true
                      id: 136
                    - id: 48
                      name: update choice name
                  name: new level of sponsorship 1
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                allow_html:
                  type: string
                  example: ''
                choices:
                  type: string
                  example: ''
                name:
                  type: string
                  example: ''
                required:
                  type: string
                  example: ''
                s_button_text:
                  type: string
                  example: ''
                s_link_collection_fields:
                  type: string
                  example: ''
                s_max_links:
                  type: string
                  example: ''
                s_url_display_format:
                  type: string
                  example: ''
                s_url_image_id:
                  type: string
                  example: ''
                sort:
                  type: string
                  example: ''
                visible:
                  type: string
                  example: ''
            examples:
              Update An Existing Sponsor Field:
                value:
                  allow_html: ''
                  choices: ''
                  name: ''
                  required: ''
                  s_button_text: ''
                  s_link_collection_fields: ''
                  s_max_links: ''
                  s_url_display_format: ''
                  s_url_image_id: ''
                  sort: ''
                  visible: ''
      responses:
        '200':
          description: Update An Existing Sponsor Field
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  allow_html:
                    type: boolean
                    example: false
                  attribute:
                    type: string
                    example: level
                  choices:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: number
                          example: 47
                        name:
                          type: string
                          example: Gold
                        sort:
                          type: number
                          example: 0
                    example:
                      - id: 47
                        name: Gold
                        sort: 0
                      - id: 48
                        name: update choice name
                        sort: 1
                      - id: 49
                        name: Bronze
                        sort: 2
                      - id: 68
                        name: Platinum
                        sort: 4
                      - id: 137
                        name: new choices of level
                        sort: 6
                      - id: 138
                        name: new choices of level
                        sort: 7
                      - id: 139
                        name: new choices of level
                        sort: 8
                      - id: 140
                        name: new choices of level
                        sort: 9
                      - id: 141
                        name: new choices of level
                        sort: 10
                      - id: 142
                        name: new choices of level
                        sort: 11
                  id:
                    type: number
                    example: 27
                  name:
                    type: string
                    example: new level of sponsorship 1
                  required:
                    type: boolean
                    example: false
                  settings:
                    nullable: true
                    example: null
                  sort:
                    type: number
                    example: 4
                  type:
                    type: string
                    example: dropDownList
                  visible:
                    type: boolean
                    example: true
              examples:
                Update An Existing Sponsor Field:
                  value:
                    allow_html: false
                    attribute: level
                    choices:
                      - id: 47
                        name: Gold
                        sort: 0
                      - id: 48
                        name: update choice name
                        sort: 1
                      - id: 49
                        name: Bronze
                        sort: 2
                      - id: 68
                        name: Platinum
                        sort: 4
                      - id: 137
                        name: new choices of level
                        sort: 6
                      - id: 138
                        name: new choices of level
                        sort: 7
                      - id: 139
                        name: new choices of level
                        sort: 8
                      - id: 140
                        name: new choices of level
                        sort: 9
                      - id: 141
                        name: new choices of level
                        sort: 10
                      - id: 142
                        name: new choices of level
                        sort: 11
                    id: 27
                    name: new level of sponsorship 1
                    required: false
                    settings: null
                    sort: 4
                    type: dropDownList
                    visible: true
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    delete:
      security:
        - bearerAuth: []
      tags:
        - Sponsor Fields
      summary: Delete Field
      description: Permanently deletes a sponsor custom field definition by `field_id`. This removes the field schema and all stored values for this field across all sponsors. This action cannot be undone.
      operationId: deleteSponsorField
      parameters:
        - name: field_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the field you want to delete
      responses:
        '204':
          description: Delete Sponsor Field
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sponsors/field:
    post:
      security:
        - bearerAuth: []
      tags:
        - Sponsor Fields
      summary: Create Field
      description: Creates a new custom field definition for sponsors. Requires `name` and `type` (e.g., textInput, dropDownList, textArea). For choice-based types, include a `choices` array. Optional properties include sort order, visibility, required flag, and HTML settings. Returns the newly created field definition.
      operationId: createSponsorField
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                allow_html:
                  type: string
                  example: ''
                choices:
                  type: string
                  example: ''
                name:
                  type: string
                  example: ''
                required:
                  type: string
                  example: ''
                s_button_text:
                  type: string
                  example: ''
                s_link_collection_fields:
                  type: string
                  example: ''
                s_max_links:
                  type: string
                  example: ''
                s_url_display_format:
                  type: string
                  example: ''
                s_url_image_id:
                  type: string
                  example: ''
                sort:
                  type: string
                  example: ''
                type:
                  type: string
                  example: ''
                visible:
                  type: string
                  example: ''
            examples:
              Create Sponsor Field:
                value:
                  allow_html: ''
                  choices: ''
                  name: ''
                  required: ''
                  s_button_text: ''
                  s_link_collection_fields: ''
                  s_max_links: ''
                  s_url_display_format: ''
                  s_url_image_id: ''
                  sort: ''
                  type: ''
                  visible: ''
          multipart/form-data:
            schema:
              type: object
              properties:
                name:
                  description: string - required - The name of the field
                  type: string
                  example: test
                type:
                  description: string - required - The type of the field
                  type: string
                  example: dropDownList
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                type: object
                properties:
                  created_at:
                    type: string
                    example: '2022-06-26 14:30:00'
                  updated_at:
                    type: string
                    example: '2022-06-26 14:30:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sponsor-attendances:
    get:
      security:
        - bearerAuth: []
      tags:
        - Sponsor Attendance
      summary: Get All Attendance
      description: Returns a paginated list of sponsor attendance records for a specific event. Requires the `event_id` query parameter. Each record tracks a sponsor's participation or booth presence at the event. Use `search` to filter results and `fields` to limit which properties are returned.
      operationId: getAllSponsorAttendance
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve attendance for
        - name: fields
          in: query
          schema:
            type: string
            example: ''
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: registrant,sponsor
          description: 'string - optional - Comma separated list of related objects to include inline. Supported values: `registrant`, `sponsor`'
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
            example: ''
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /tracks:
    get:
      security:
        - bearerAuth: []
      tags:
        - Tracks
      summary: Get All Tracks
      description: Retrieves all tracks for a specific event. Tracks are thematic categories used to organize sessions (e.g., "Technical", "Business", "Workshop"). Requires the `event_id` query parameter. Sessions can be assigned to tracks to help attendees filter and navigate the agenda.
      operationId: getAllTracks
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve tracks for
        - name: fields
          in: query
          schema:
            type: string
            example: id,name,color,created_by,created_at,updated_at,updated_by
          description: string - optional - Comma separated list of fields you want to return
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
            example: ''
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /tracks/{track_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Tracks
      summary: Get One Track
      description: Retrieves a single session track by its ID, including the track name and color.
      operationId: getOneTrack
      parameters:
        - name: track_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the track you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: id,name,color,created_by,created_at,updated_at,updated_by
          description: string - optional - Comma separated list of fields you want to return
      responses:
        '200':
          description: Get Track
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /tracks/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Tracks
      summary: Create Track
      description: Creates a new session track for an event. Requires `event_id` and `name` in the request body. Once created, sessions can be assigned to this track to categorize the event agenda.
      operationId: createTrack
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                event_id:
                  type: string
                  example: ''
                name:
                  type: string
                  example: ''
                color:
                  type: string
                  example: '#000000'
            examples:
              Create A New Track:
                value:
                  event_id: ''
                  name: ''
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                type: object
                properties:
                  created_at:
                    type: string
                    example: '2022-06-26 14:30:00'
                  updated_at:
                    type: string
                    example: '2022-06-26 14:30:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /tracks/update/{track_id}:
    put:
      security:
        - bearerAuth: []
      tags:
        - Tracks
      summary: Update Track
      description: Updates an existing session track by its ID. You can modify the track name, color, and description.
      operationId: updateTrack
      parameters:
        - name: track_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the track you want to update
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                name:
                  type: string
                  example: ''
            examples:
              Update An Existing Track:
                value:
                  name: ''
      responses:
        '200':
          description: ''
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /tracks/delete/{track_id}:
    delete:
      security:
        - bearerAuth: []
      tags:
        - Tracks
      summary: Delete Track
      description: Permanently deletes a session track by its ID. Sessions currently assigned to this track will need to be reassigned or will lose their track categorization.
      operationId: deleteTrack
      parameters:
        - name: track_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the track you want to delete
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties: {}
            examples:
              Delete Sponsor:
                value: {}
      responses:
        '204':
          description: Delete
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /transactions:
    get:
      security:
        - bearerAuth: []
      tags:
        - Transactions
      summary: Get All Transactions
      description: Retrieves all financial transaction records for a specific event. Transactions include payments, refunds, and credits linked to registrants. Requires the `event_id` query parameter. Each record contains the amount, type (e.g., credit_card_payment, wire_transfer_refund), status, and associated registrant. Use `search` to filter by registrant_id, status, amount, or date range.
      operationId: getAllTransactions
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve transactions for
        - name: fields
          in: query
          schema:
            type: string
            example: id,registrant_id,type,datetime,status,amount,created_at,created_by,updated_at,updated_by,card_type,card_number_last_4,name_on_card,notes,gateway_id
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: paymentGateway,registrant
          description: 'string - optional - Comma separated list of related objects to include inline. Supported values: `paymentGateway`, `registrant`'
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*. Searchable fields include id, registrant_id, type, datetime, status, amount, payment_method_fee, currency, card_type, card_number_last_4, name_on_card, gateway_transaction_id, gateway_id, notes, created_by, created_at, updated_by, updated_at, order_number
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /transactions/{transaction_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Transactions
      summary: Get One Transaction
      description: Retrieves a single transaction by its ID, including payment details (amount, type, status), card information (last 4 digits, card type), associated registrant, and payment gateway used.
      operationId: getOneTransaction
      parameters:
        - name: transaction_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the track you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: id,registrant_id,type,datetime,status,amount,created_at,created_by,updated_at,updated_by,card_type,card_number_last_4,name_on_card,notes,gateway_id
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: paymentGateway,registrant
          description: 'string - optional - Comma separated list of related objects to include inline. Supported values: `paymentGateway`, `registrant`'
      responses:
        '200':
          description: Get Transaction
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  amount:
                    type: string
                    example: '-166.00'
                  card_number_last_4:
                    type: number
                    example: 1111
                  card_type:
                    type: string
                    example: amex
                  created_at:
                    type: string
                    example: '2016-09-26 12:54:22'
                  created_by:
                    type: number
                    example: 1
                  datetime:
                    type: string
                    example: '2016-09-26 12:54:17'
                  gateway_id:
                    type: number
                    example: 2
                  id:
                    type: number
                    example: 2
                  name_on_card:
                    type: string
                    example: Certification Test
                  notes:
                    type: string
                    example: note
                  registrant_id:
                    type: number
                    example: 1
                  paymentGateway:
                    type: object
                    properties:
                      name:
                        type: string
                        example: Paymentech Bin 2
                  registrant:
                    type: object
                    properties:
                      group_id:
                        type: number
                        example: 1
                      id:
                        type: number
                        example: 1
                      po_number:
                        type: string
                        example: '1234'
                  status:
                    type: string
                    example: confirmed
                  type:
                    type: string
                    example: credit_card_payment
                  updated_at:
                    type: string
                    example: '2016-09-26 12:54:22'
                  updated_by:
                    type: number
                    example: 1
              examples:
                Get Transaction:
                  value:
                    amount: '-166.00'
                    card_number_last_4: 1111
                    card_type: amex
                    created_at: '2016-09-26 12:54:22'
                    created_by: 1
                    datetime: '2016-09-26 12:54:17'
                    gateway_id: 2
                    id: 2
                    name_on_card: Certification Test
                    notes: note
                    registrant_id: 1
                    paymentGateway:
                      name: Paymentech Bin 2
                    registrant:
                      group_id: 1
                      id: 1
                      po_number: '1234'
                    status: confirmed
                    type: credit_card_payment
                    updated_at: '2016-09-26 12:54:22'
                    updated_by: 1
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /transactions/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Transactions
      summary: Create Transaction
      description: Creates an offline transaction record for a registrant. Use this for payments or refunds processed outside the online payment gateway (e.g., wire transfers, checks, cash). Requires `event_id`, `registrant_id`, `type`, and `amount`. The `type` must be an offline payment or refund type such as `wire_transfer_payment`, `check_payment`, `cash_refund`, etc. Online payment types (e.g., credit_card_payment) cannot be created through this endpoint.
      operationId: createTransaction
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
                - event_id
                - registrant_id
                - type
                - amount
              properties:
                event_id:
                  type: integer
                  description: ID of the event to which this transaction is associated.
                  example: 1
                registrant_id:
                  type: integer
                  description: ID of the registrant this transaction belongs to
                  example: 1
                type:
                  type: string
                  description: 'Type of transaction. Available values: <br>• **Payments**: offline_credit_card_payment, wire_transfer_payment, check_payment, cash_payment,  past_event_credit_payment, offline_google_wallet_payment, offline_paypal_payment, other_payment <br>• **Refunds**: offline_credit_card_refund, wire_transfer_refund, check_refund, cash_refund, offline_google_wallet_refund, offline_paypal_refund, other_refund'
                  example: wire_transfer_payment
                datetime:
                  type: string
                  description: Transaction date and time (format Y-m-d H:i:s)
                  example: '2025-06-04 14:30:00'
                status:
                  type: string
                  description: 'Status of the transaction. Available values: <br>• **confirmed**: Processed, <br>• **failed**: Failed, <br>• **pending**: Pending, <br>• **duplicate**: Duplicate'
                  example: confirmed
                amount:
                  type: number
                  format: float
                  description: Amount of the transaction
                  example: -166
                notes:
                  type: string
                  description: Additional notes for the transaction
                  example: Payment for registration
            examples:
              Create A New Transaction:
                value:
                  event_id: 1
                  registrant_id: 1
                  type: credit_card_payment
                  datetime: '2025-06-04 14:30:00'
                  status: confirmed
                  amount: 166
                  notes: Payment for registration
      responses:
        '201':
          description: Transaction Created
          content:
            application/json:
              schema:
                type: object
                properties:
                  registrant_id:
                    type: integer
                    example: 1
                  type:
                    type: string
                    example: credit_card_payment
                  datetime:
                    type: string
                    example: '2025-06-04 14:30:00'
                  status:
                    type: string
                    example: confirmed
                  amount:
                    type: number
                    format: float
                    example: -166
                  notes:
                    type: string
                    example: Payment for registration
                  created_at:
                    type: string
                    example: '2025-06-04 14:30:00'
                  updated_at:
                    type: string
                    example: '2025-06-04 14:30:00'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /transactions/delete/{transaction_id}:
    delete:
      security:
        - bearerAuth: []
      tags:
        - Transactions
      summary: Delete Transaction
      description: Permanently deletes a transaction record by its ID. This removes the financial record from the registrant's payment history and may affect their payment status and balance due calculations.
      operationId: deleteTransaction
      parameters:
        - name: transaction_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the transaction you want to delete
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties: {}
            examples:
              Delete Transaction:
                value: {}
      responses:
        '204':
          description: Transaction deleted successfully
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /webhook-groups:
    get:
      security:
        - bearerAuth: []
      tags:
        - Webhook Groups
      summary: Get All Webhook Groups
      description: |-
        Retrieves all webhook groups. Webhook groups organize individual webhooks and control which events they apply to. A group is assigned to one or more events, and all webhooks within the group will fire for those events. This allows you to manage webhook configurations across multiple events centrally.
        <details>
          <summary><b>Available Fields</b></summary>

          <p>These are the standard fields available for configuring a webhook:</p>
          <table>
            <thead>
              <tr>
                <th><strong>Name</strong></th>
                <th><strong>Type</strong></th>
                <th><strong>Description</strong></th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><code>id</code></td>
                <td>integer</td>
                <td>The ID of the webhook group.</td>
              </tr>
              <tr>
                <td><code>name</code></td>
                <td>string</td>
                <td>The name of the webhook group.</td>
              </tr>
              <tr>
                <td><code>headers</code></td>
                <td>array</td>
                <td>Defined headers for the group.</td>
              </tr>
              <tr>
                <td><code>notification_emails</code></td>
                <td>array</td>
                <td>Emails notified when a webhook in the group fails.</td>
              </tr>
            </tbody>
          </table>
        </details>
        <details>
          <summary><b>Extra Fields</b></summary>

          <p>Additional information that can be returned by specifying the desired fields in the <code>expand</code> parameter:</p>
          <table>
            <thead>
              <tr>
                <th><strong>Name</strong></th>
                <th><strong>Type</strong></th>
                <th><strong>Description</strong></th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><code>webhooks</code></td>
                <td>object</td>
                <td>List of webhooks associated with this group.</td>
              </tr>
            </tbody>
          </table>
        </details>
      operationId: getAllWebhookGroups
      parameters:
        - name: fields
          in: query
          schema:
            type: string
            example: id,name,headers,notification_emails,created_at,created_by,updated_at,updated_by
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: ''
          description: string - optional - Comma separated list of objects you want to return
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                          description: The name of the webhook group. This value must be unique.
                          example: Sample Webhook Group
                        headers:
                          type: array
                          items:
                            type: object
                            properties:
                              key:
                                type: string
                                description: The key for the header.
                                example: Authorization
                              value:
                                type: string
                                description: The value associated with the header key.
                                example: Bearer token
                          description: A list of key-value pairs representing headers for the webhook group.
                          example:
                            - key: Authentication
                              value: Bearer Token
                            - key: Content-Type
                              value: application/json
                        notification_emails:
                          type: array
                          items:
                            type: string
                            description: A list of email addresses to be notified if any webhook within the group fails.
                            example: example@email.com
                          description: Notification email list for failure alerts.
                          example:
                            - notify@example.com
                            - test@example.com
                        created_at:
                          type: string
                          example: '2023-04-21 15:46:23'
                        updated_at:
                          type: string
                          example: '2023-04-21 15:47:37'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /webhook-groups/{webhook_group_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Webhook Groups
      summary: Get One Webhook Group
      description: Retrieves a single webhook group by its ID, including the group name, associated event IDs, and the list of webhooks it contains.
      operationId: getOneWebhookGroup
      parameters:
        - name: webhook_group_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the Webhook Group you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: id,name,headers,notification_emails,created_at,created_by,updated_at,updated_by
          description: string - optional - Comma separated list of fields you want to return
      responses:
        '200':
          description: Get Webhook Group
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/webhookGroupFields'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /webhook-groups/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Webhook Groups
      summary: Create Webhook Group
      description: Creates a new webhook group. Specify the group name and assign it to one or more events. After creating the group, use the Create Webhook endpoint to add individual webhook configurations to it.
      operationId: createWebhookGroup
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/webhookGroupFields'
            examples:
              Create A New Webhook Group:
                value:
                  name: Sample Webhook Group
                  headers:
                    - key: Authentication
                      value: Bearer Token
                    - key: Content-Type
                      value: application/json
                  notification_emails:
                    - test@email.com
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/webhookGroupFields'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /webhook-groups/update/{webhook_group_id}:
    put:
      security:
        - bearerAuth: []
      tags:
        - Webhook Groups
      summary: Update Webhook Group
      description: Updates an existing webhook group by its ID. You can modify the group name and the list of events it applies to.
      operationId: updateWebhookGroup
      parameters:
        - name: webhook_group_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the Webhook Group you want to update
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/webhookGroupFields'
            examples:
              Update An Existing Webhook Group:
                value:
                  name: Sample Webhook Group
                  headers:
                    - key: Authentication
                      value: Bearer Token
                    - key: Content-Type
                      value: application/json
                  notification_emails:
                    - test@email.com
      responses:
        '200':
          description: Update Webhook Group
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/webhookGroupFields'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /webhook-groups/delete/{webhook_group_id}:
    delete:
      security:
        - bearerAuth: []
      tags:
        - Webhook Groups
      summary: Delete Webhook Group
      description: Permanently deletes a webhook group and all webhooks it contains. All HTTP callbacks from webhooks in this group will immediately stop firing.
      operationId: deleteWebhookGroup
      parameters:
        - name: webhook_group_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the Webhook Group you want to delete
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties: {}
            examples:
              Delete A Webhook Group:
                value: {}
      responses:
        '204':
          description: Delete
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /webhooks:
    get:
      security:
        - bearerAuth: []
      tags:
        - Webhooks
      summary: Get All Webhooks
      description: |-
        Retrieves all webhook configurations. Webhooks send HTTP POST callbacks to your specified URL when events occur in Swoogo (e.g., new registration, session check-in, payment received). Each webhook defines the target URL, trigger event type, and which webhook group it belongs to.
        <details>
          <summary><b>Available Fields</b></summary>

          <p>These are the standard fields available for configuring a webhook:</p>
          <table>
            <thead>
              <tr>
                <th><strong>Name</strong></th>
                <th><strong>Type</strong></th>
                <th><strong>Description</strong></th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><code>id</code></td>
                <td>integer</td>
                <td>The ID of the webhook.</td>
              </tr>
              <tr>
                <td><code>name</code></td>
                <td>string</td>
                <td>The name of the webhook.</td>
              </tr>
              <tr>
                <td><code>url</code></td>
                <td>string</td>
                <td>The URL that data should be sent to.</td>
              </tr>
              <tr>
                <td><code>trigger_object</code></td>
                <td>string</td>
                <td>The object that will cause the webhook to run.</td>
              </tr>
              <tr>
                <td><code>trigger_on_insert</code></td>
                <td>boolean</td>
                <td>Trigger when the object is inserted.</td>
              </tr>
              <tr>
                <td><code>trigger_on_update</code></td>
                <td>boolean</td>
                <td>Trigger when the object is updated.</td>
              </tr>
              <tr>
                <td><code>trigger_on_delete</code></td>
                <td>boolean</td>
                <td>Trigger when the object is deleted.</td>
              </tr>
              <tr>
                <td><code>fields</code></td>
                <td>array</td>
                <td>Array of fields which, when changed, will cause the webhook to run.</td>
              </tr>
              <tr>
                <td><code>public_user</code></td>
                <td>boolean</td>
                <td>Run the webhook for a public user.</td>
              </tr>
              <tr>
                <td><code>admin_user</code></td>
                <td>boolean</td>
                <td>Run the webhook for an admin user.</td>
              </tr>
              <tr>
                <td><code>api_call</code></td>
                <td>boolean</td>
                <td>Run the webhook on an API call.</td>
              </tr>
              <tr>
                <td><code>any_event</code></td>
                <td>boolean</td>
                <td>Run the webhook for any events (only applicable for some objects such as registrants).</td>
              </tr>
              <tr>
                <td><code>event_ids</code></td>
                <td>array</td>
                <td>Array of event IDs to run the webhook for (if <code>any_event</code> is false).</td>
              </tr>
              <tr>
                <td><code>all_fields</code></td>
                <td>boolean</td>
                <td>Should this run for changes to all fields?</td>
              </tr>
            </tbody>
          </table>
        </details>
        <details>
          <summary><b>Extra Fields</b></summary>

          <p>Additional information that can be returned by specifying the desired fields in the <code>expand</code> parameter:</p>
          <table>
            <thead>
              <tr>
                <th><strong>Name</strong></th>
                <th><strong>Type</strong></th>
                <th><strong>Description</strong></th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><code>group</code></td>
                <td>object</td>
                <td>Details about the Webhook Group associated with the item.</td>
              </tr>
            </tbody>
          </table>
        </details>
      operationId: getAllWebhooks
      parameters:
        - name: fields
          in: query
          schema:
            type: string
            example: id,name,url,content_type,post_field_data,use_default_fields,custom_fields,notes,trigger_object,trigger_on_insert,trigger_on_update,trigger_on_delete,all_fields,fields,public_user,admin_user,api_call,any_event,event_ids,created_at,created_by,updated_at,updated_by
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: ''
          description: string - optional - Comma separated list of objects you want to return
        - name: search
          in: query
          schema:
            type: string
            example: id>123
          description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '5'
          description: integer - optional - The number of results per page (to a max of 200)
        - name: sort
          in: query
          schema:
            type: string
          description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
        - name: ids
          in: query
          schema:
            type: string
          description: Comma-separated list of IDs to retrieve. When provided, only records matching these IDs are returned. All values must be positive integers. Maximum 100 IDs per request.
          example: 1,2,3
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                          description: The name of the webhook.
                          example: Sample Webhook
                        url:
                          type: string
                          description: The URL that data should be sent to.
                          required: true
                          example: https://www.example.com/webhook
                        trigger_object:
                          type: string
                          enum:
                            - event
                            - contact
                            - registrant
                            - speaker
                            - sponsor
                            - session
                            - session_attendance
                            - registrant_line_item
                          description: The object that will cause the webhook to trigger.
                          example: registrant
                        group_id:
                          type: integer
                          description: Identifier for the webhook group.
                        headers:
                          type: array
                          items:
                            type: object
                            properties:
                              key:
                                type: string
                                description: Header key.
                                example: Authorization
                              value:
                                type: string
                                description: Header value.
                                example: Bearer token
                          description: Array of headers for the webhook.
                          example:
                            - key: Authentication
                              value: Bearer Token
                        trigger_on_insert:
                          type: boolean
                          description: Trigger the webhook when the object is inserted.
                          example: true
                        trigger_on_update:
                          type: boolean
                          description: Trigger the webhook when the object is updated.
                          example: true
                        trigger_on_delete:
                          type: boolean
                          description: Trigger the webhook when the object is deleted.
                          example: false
                        public_user:
                          type: boolean
                          description: Run the webhook for public users.
                          example: false
                        admin_user:
                          type: boolean
                          description: Run the webhook for admin users.
                          example: true
                        api_call:
                          type: boolean
                          description: Trigger the webhook during an API call.
                          example: true
                        all_fields:
                          type: boolean
                          description: Run the webhook for changes to all fields.
                          example: false
                        any_event:
                          type: boolean
                          description: Run the webhook for any event.
                          example: false
                        use_default_fields:
                          type: boolean
                          description: Use default fields for the webhook.
                          example: true
                        enabled:
                          type: boolean
                          description: Indicates whether the webhook is enabled.
                          example: true
                        event_ids:
                          type: array
                          items:
                            type: integer
                          description: List of event IDs to trigger the webhook.
                          example:
                            - 1
                            - 2
                            - 3
                        fields:
                          type: array
                          items:
                            type: object
                            description: Custom JSON object fields that trigger the webhook.
                          description: Array of fields to trigger the webhook when changed.
                          example:
                            - value
                        content_type:
                          type: string
                          enum:
                            - json
                            - post
                          description: The content type for webhook payloads.
                          example: json
                        notes:
                          type: string
                          description: Additional notes for the webhook.
                          example: This webhook is for test purposes.
                        post_field_data:
                          type: array
                          items:
                            type: string
                            enum:
                              - id
                              - value
                          description: Fields to include in the webhook POST data.
                          example:
                            - id
                            - value
                        custom_fields:
                          description: Custom fields for the webhook (type unspecified).
                          type: array
                          items:
                            type: object
                            properties:
                              key:
                                type: string
                                description: Key to identify value on response.
                                example: event_id
                              type:
                                type: string
                                description: The object that will cause the webhook to trigger.
                                enum:
                                  - event
                                  - contact
                                  - registrant
                                  - speaker
                                  - sponsor
                                  - session
                                  - session_attendance
                                  - registrant_line_item
                                example: registrant
                              value:
                                type: string
                                description: Field name.
                                example: id
                          example:
                            - key: event_id
                              type: registrant
                              value: event_id
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 20
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /webhooks/{webhook_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Webhooks
      summary: Get One Webhook
      description: Retrieves a single webhook configuration by its ID, including the target URL, trigger event type, HTTP method, headers, and associated webhook group.
      operationId: getOneWebhook
      parameters:
        - name: webhook_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the webhook you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: id,name,url,content_type,post_field_data,use_default_fields,custom_fields,notes,trigger_object,trigger_on_insert,trigger_on_update,trigger_on_delete,all_fields,fields,public_user,admin_user,api_call,any_event,event_ids,created_at,created_by,updated_at,updated_by
          description: string - optional - Comma separated list of fields you want to return
      responses:
        '200':
          description: Get Webhook
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/webhookFields'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /webhooks/create:
    post:
      security:
        - bearerAuth: []
      tags:
        - Webhooks
      summary: Create Webhook
      description: Creates a new webhook configuration. Specify the target URL, trigger event type, HTTP method, and optional custom headers. The webhook must be assigned to a webhook group, which controls which events it applies to.
      operationId: createWebhook
      x-codeSamples:
        - lang: cURL
          label: cURL
          source: |
            curl -X POST "https://api.swoogo.com/api/v1/webhooks/create" \
              -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
              -H "Content-Type: application/x-www-form-urlencoded" \
              -d "name=Registrant Updates&webhook_group_id=1&trigger_object=registrant&trigger_on_insert=1&trigger_on_update=1&url=https://example.com/webhooks/registrant&content_type=json"
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/webhookFields'
            examples:
              Create A New Webhook:
                value:
                  name: Sample Webhook
                  trigger_object: registrant
                  trigger_on_update: '1'
                  url: https://www.example.com/new_webhook
      responses:
        '201':
          description: Create Object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/webhookFields'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /webhooks/update/{webhook_id}:
    put:
      security:
        - bearerAuth: []
      tags:
        - Webhooks
      summary: Update Webhook
      description: Updates an existing webhook configuration by its ID. You can modify the target URL, trigger event type, HTTP method, headers, and active status.
      operationId: updateWebhook
      parameters:
        - name: webhook_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the webhook you want to update
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/webhookFields'
            examples:
              Update An Existing Webhook:
                value:
                  name: Sample Webhook
                  trigger_object: registrant
                  trigger_on_update: '1'
                  url: https://www.example.com/updated_webhook
      responses:
        '200':
          description: Update Webhook
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/webhookFields'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /webhooks/delete/{webhook_id}:
    delete:
      security:
        - bearerAuth: []
      tags:
        - Webhooks
      summary: Delete Webhook
      description: Permanently deletes a webhook configuration by its ID. The webhook will immediately stop sending HTTP callbacks for its trigger event type.
      operationId: deleteWebhook
      parameters:
        - name: webhook_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the webhook you want to delete
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties: {}
            examples:
              Delete A Webhook:
                value: {}
      responses:
        '204':
          description: Delete
          content: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /registrations/audit:
    get:
      security:
        - bearerAuth: []
      tags:
        - Registration Audit
      summary: Get Registration Audit
      description: Returns a time-bounded audit log of registrant status changes for an event. Each record captures the registrant's status at a point in time, along with their group, full name, email, and session selections. Requires both `event_id` and `start_time` query parameters. Supports up to 1,000 results per page. Use `status_mode=current` to return the current registration status snapshot instead of the audit trail.
      operationId: getRegistrationAudit
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve audit records for
        - name: start_time
          in: query
          required: true
          schema:
            type: string
            example: '2024-01-01 00:00:00'
          description: string - required - ISO 8601 datetime (YYYY-MM-DD HH:MM:SS). Returns records updated at or after this timestamp. Must be provided to prevent unbounded queries.
        - name: end_time
          in: query
          schema:
            type: string
            example: '2024-12-31 23:59:59'
          description: string - optional - ISO 8601 datetime. Returns records updated before this timestamp.
        - name: fields
          in: query
          schema:
            type: string
            example: registrant_id,group_id,full_name,email,registration_status,session_ids,updated_at
          description: string - optional - Comma separated list of fields you want to return. The registrant_id field is always returned.
        - name: status_mode
          in: query
          schema:
            type: string
            enum:
              - current
              - combined
            example: current
          description: string - optional - Controls what registration status data is returned. 'current' returns the present-day status snapshot; 'combined' merges audit and current status. Defaults to audit mode when omitted.
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '100'
          description: integer - optional - The number of results per page (to a max of 1000)
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        registrant_id:
                          type: integer
                          example: 101
                        group_id:
                          type: integer
                          example: 2
                        full_name:
                          type: string
                          example: Jane Smith
                        email:
                          type: string
                          example: jane@example.com
                        registration_status:
                          type: string
                          example: confirmed
                        session_ids:
                          type: string
                          example: 10,11,12
                        updated_at:
                          type: string
                          example: '2024-06-01 14:30:00'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 100
        '400':
          description: Bad Request — missing required parameter (event_id or start_time)
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /registrations/audit/sessions:
    get:
      security:
        - bearerAuth: []
      tags:
        - Registration Audit
      summary: Get Registration Audit Sessions
      description: Returns a time-bounded audit log of session attendance changes across all registrants for an event. Each record captures the registrant's session selections and attendance type at a point in time. Requires both `event_id` and `start_time` query parameters. Supports up to 1,000 results per page.
      operationId: getRegistrationAuditSessions
      parameters:
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve audit records for
        - name: start_time
          in: query
          required: true
          schema:
            type: string
            example: '2024-01-01 00:00:00'
          description: string - required - ISO 8601 datetime (YYYY-MM-DD HH:MM:SS). Returns records updated at or after this timestamp.
        - name: end_time
          in: query
          schema:
            type: string
            example: '2024-12-31 23:59:59'
          description: string - optional - ISO 8601 datetime. Returns records updated before this timestamp.
        - name: fields
          in: query
          schema:
            type: string
            example: registrant_id,group_id,full_name,email,updated_at,type,session_ids
          description: string - optional - Comma separated list of fields you want to return. The registrant_id field is always returned.
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '100'
          description: integer - optional - The number of results per page (to a max of 1000)
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        registrant_id:
                          type: integer
                          example: 101
                        group_id:
                          type: integer
                          example: 2
                        full_name:
                          type: string
                          example: Jane Smith
                        email:
                          type: string
                          example: jane@example.com
                        type:
                          type: string
                          description: The audited field that changed. `session_ids` for changes to a registrant's session selections; `session_attendance` for changes to session check-in/check-out data.
                          enum:
                            - session_ids
                            - session_attendance
                          example: session_ids
                        session_ids:
                          type: string
                          example: 10,11,12
                        updated_at:
                          type: string
                          example: '2024-06-01 14:30:00'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 100
        '400':
          description: Bad Request — missing required parameter (event_id or start_time)
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /registrations/audit/{id}/sessions:
    get:
      security:
        - bearerAuth: []
      tags:
        - Registration Audit
      summary: Get Registrant Audit Sessions
      description: Returns a time-bounded audit log of session attendance changes for a specific registrant. Each record captures the registrant's session selections and attendance type at a point in time. Requires both `event_id` and `start_time` query parameters. Supports up to 1,000 results per page.
      operationId: getRegistrantAuditSessions
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            example: 101
          description: integer - required - The registrant ID to retrieve session audit records for
        - name: event_id
          in: query
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the event you want to retrieve audit records for
        - name: start_time
          in: query
          required: true
          schema:
            type: string
            example: '2024-01-01 00:00:00'
          description: string - required - ISO 8601 datetime (YYYY-MM-DD HH:MM:SS). Returns records updated at or after this timestamp.
        - name: end_time
          in: query
          schema:
            type: string
            example: '2024-12-31 23:59:59'
          description: string - optional - ISO 8601 datetime. Returns records updated before this timestamp.
        - name: fields
          in: query
          schema:
            type: string
            example: registrant_id,group_id,full_name,email,updated_at,type,session_ids
          description: string - optional - Comma separated list of fields you want to return. The registrant_id field is always returned.
        - name: page
          in: query
          schema:
            type: string
            example: '1'
          description: integer - optional - The page of results you want to view
        - name: per-page
          in: query
          schema:
            type: string
            example: '100'
          description: integer - optional - The number of results per page (to a max of 1000)
      responses:
        '200':
          description: Collection
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
            x-pagination-current-page:
              $ref: '#/components/headers/PaginationCurrentPage'
            x-pagination-page-count:
              $ref: '#/components/headers/PaginationPageCount'
            x-pagination-per-page:
              $ref: '#/components/headers/PaginationPerPage'
            x-pagination-total-count:
              $ref: '#/components/headers/PaginationTotalCount'
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        registrant_id:
                          type: integer
                          example: 101
                        group_id:
                          type: integer
                          example: 2
                        full_name:
                          type: string
                          example: Jane Smith
                        email:
                          type: string
                          example: jane@example.com
                        type:
                          type: string
                          description: The audited field that changed. `session_ids` for changes to a registrant's session selections; `session_attendance` for changes to session check-in/check-out data.
                          enum:
                            - session_ids
                            - session_attendance
                          example: session_ids
                        session_ids:
                          type: string
                          example: 10,11,12
                        updated_at:
                          type: string
                          example: '2024-06-01 14:30:00'
                  _links:
                    type: object
                    properties:
                      self:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      first:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                      last:
                        type: object
                        properties:
                          href:
                            type: string
                            example: ''
                  _meta:
                    type: object
                    properties:
                      totalCount:
                        type: integer
                        example: 1
                      pageCount:
                        type: integer
                        example: 1
                      currentPage:
                        type: integer
                        example: 1
                      perPage:
                        type: integer
                        example: 100
        '400':
          description: Bad Request — missing required parameter (event_id or start_time)
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /registrants/{id}/magic-link:
    get:
      security:
        - bearerAuth: []
      tags:
        - Registrants
      x-hidden: true
      summary: Get Magic Link
      description: 'Generates a one-time magic link for a registrant that logs them into the event portal automatically without a password. Requires the `enable-api-magic-link` account-level feature flag to be enabled. The link expires after `ttl_seconds` seconds (default: 15).'
      operationId: getRegistrantMagicLink
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the registrant to generate a magic link for
        - name: ttl_seconds
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 30
            default: 15
            example: 15
          description: integer - optional - Seconds until the link expires (1–30, default 15)
        - name: auth_cookie_duration
          in: query
          schema:
            type: integer
            minimum: 0
            maximum: 60
            default: 0
            example: 0
          description: integer - optional - Days the auth cookie persists after login (0–60, default 0)
      responses:
        '200':
          description: Get Magic Link
          headers:
            x-rate-limit-limit:
              $ref: '#/components/headers/RateLimitLimit'
            x-rate-limit-remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            x-rate-limit-reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    example: 1
                  url:
                    type: string
                    example: https://events.swoogo.com/myevent?magic_token=abc123&expires=1718000000
              examples:
                Get Magic Link:
                  value:
                    id: 1
                    url: https://events.swoogo.com/myevent?magic_token=abc123&expires=1718000000
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /registrants/{id}/magic-link/{page}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Registrants
      x-hidden: true
      summary: Get Magic Link for Page
      description: 'Generates a one-time magic link for a registrant that logs them into a specific event portal page automatically without a password. Requires the `enable-api-magic-link` account-level feature flag to be enabled. The link expires after `ttl_seconds` seconds (default: 15).'
      operationId: getRegistrantMagicLinkPage
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the registrant to generate a magic link for
        - name: page
          in: path
          required: true
          schema:
            type: string
            example: home
          description: string - required - The system_name or numeric ID of the event portal page to redirect to after login
        - name: ttl_seconds
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 30
            default: 15
            example: 15
          description: integer - optional - Number of seconds the magic link remains valid (1–30, default 15)
        - name: auth_cookie_duration
          in: query
          required: false
          schema:
            type: integer
            minimum: 0
            maximum: 60
            default: 0
            example: 0
          description: integer - optional - Duration in minutes for the session cookie after login (0–60, default 0 = session cookie)
      responses:
        '200':
          description: Magic link generated successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    example: 1
                    description: The registrant ID
                  url:
                    type: string
                    example: https://event.swoogo.com/my-event/home?token=abc123
                    description: The one-time magic link URL for the specified page
              examples:
                Magic Link for Page:
                  value:
                    id: 1
                    url: https://event.swoogo.com/my-event/home?token=abc123
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /session-attendances/{session_attendance_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Session Attendance
      summary: Get One Session Attendance
      description: Retrieves a single session attendance record by its ID. Includes check-in/check-out timestamps, duration, and physical vs virtual attendance tracking fields. Use `expand` to include the related registrant or session objects.
      operationId: getOneSessionAttendance
      parameters:
        - name: session_attendance_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the session attendance record you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: id,session_id,registrant_id,waiting_room_date,check_in_date,check_out_date,duration,on_demand_date,physical_arrived_at,virtual_arrived_at,virtual_departed_at,virtual_duration,has_physical_checkin,has_virtual_checkin
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: registrant,session
          description: 'string - optional - Comma separated list of related objects to include. Supported values: registrant, session'
      responses:
        '200':
          description: Get Session Attendance
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    example: 1
                  session_id:
                    type: integer
                    example: 1
                    description: The ID of the session (mapped from object_id internally)
                  registrant_id:
                    type: integer
                    example: 1
                  waiting_room_date:
                    type: string
                    nullable: true
                    example: '2024-06-01 09:45:00'
                  check_in_date:
                    type: string
                    nullable: true
                    example: '2024-06-01 10:00:00'
                  check_out_date:
                    type: string
                    nullable: true
                    example: '2024-06-01 11:00:00'
                  duration:
                    type: integer
                    nullable: true
                    example: 3600
                    description: Attendance duration in seconds
                  on_demand_date:
                    type: string
                    nullable: true
                    example: null
                  physical_arrived_at:
                    type: string
                    nullable: true
                    example: null
                  virtual_arrived_at:
                    type: string
                    nullable: true
                    example: '2024-06-01 10:00:00'
                  virtual_departed_at:
                    type: string
                    nullable: true
                    example: '2024-06-01 11:00:00'
                  virtual_duration:
                    type: integer
                    nullable: true
                    example: 3600
                    description: Virtual attendance duration in seconds
                  has_physical_checkin:
                    type: boolean
                    example: false
                  has_virtual_checkin:
                    type: boolean
                    example: true
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sponsor-attendances/{sponsor_attendance_id}:
    get:
      security:
        - bearerAuth: []
      tags:
        - Sponsor Attendance
      summary: Get One Sponsor Attendance
      description: Retrieves a single sponsor attendance record by its ID. Tracks a registrant's interaction with a sponsor booth including check-in/check-out timestamps and duration. Use `expand` to include the related registrant or sponsor objects.
      operationId: getOneSponsorAttendance
      parameters:
        - name: sponsor_attendance_id
          in: path
          required: true
          schema:
            type: integer
            example: 1
          description: integer - required - The ID of the sponsor attendance record you want to get
        - name: fields
          in: query
          schema:
            type: string
            example: sponsor_id,registrant_id,waiting_room_date,check_in_date,check_out_date,duration,on_demand_date
          description: string - optional - Comma separated list of fields you want to return
        - name: expand
          in: query
          schema:
            type: string
            example: registrant,sponsor
          description: 'string - optional - Comma separated list of related objects to include. Supported values: registrant, sponsor'
      responses:
        '200':
          description: Get Sponsor Attendance
          content:
            application/json:
              schema:
                type: object
                properties:
                  sponsor_id:
                    type: integer
                    example: 1
                    description: The ID of the sponsor (mapped from object_id internally)
                  registrant_id:
                    type: integer
                    example: 1
                  waiting_room_date:
                    type: string
                    nullable: true
                    example: '2024-06-01 09:45:00'
                  check_in_date:
                    type: string
                    nullable: true
                    example: '2024-06-01 10:00:00'
                  check_out_date:
                    type: string
                    nullable: true
                    example: '2024-06-01 11:00:00'
                  duration:
                    type: integer
                    nullable: true
                    example: 3600
                    description: Attendance duration in seconds
                  on_demand_date:
                    type: string
                    nullable: true
                    example: null
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: access_token
      description: OAuth 2.0 bearer token obtained from `POST /oauth2/token`. Tokens expire after 30 minutes. Include in the `Authorization` header as `Bearer {access_token}`.
    basicAuth:
      type: http
      scheme: basic
      description: HTTP Basic authentication using your base64-encoded API consumer key and secret. Only used for the `POST /oauth2/token` endpoint to obtain a bearer token.
  schemas:
    ErrorResponse:
      type: object
      description: Standard error response returned for all 4xx and 5xx status codes.
      properties:
        name:
          type: string
          description: Human-readable error type name (e.g., "Unauthorized", "Forbidden", "Not Found").
          example: Unauthorized
        message:
          type: string
          description: Detailed error message explaining what went wrong.
          example: Your request was made with invalid credentials.
        code:
          type: integer
          description: Application-specific error code. Currently `0` for all standard errors.
          example: 0
        status:
          type: integer
          description: HTTP status code of the error response.
          example: 401
    PaginatedResponse:
      type: object
      description: Standard paginated collection response. All list endpoints return this envelope containing the result items, navigation links, and pagination metadata.
      properties:
        items:
          type: array
          description: Array of resource objects for the current page.
          items:
            type: object
        _links:
          type: object
          description: HAL-style navigation links for traversing paginated results.
          properties:
            self:
              type: object
              properties:
                href:
                  type: string
                  description: URL of the current page of results.
                  example: https://api.swoogo.com/api/v1/registrants?event_id=123&page=2
            first:
              type: object
              properties:
                href:
                  type: string
                  description: URL of the first page of results.
                  example: https://api.swoogo.com/api/v1/registrants?event_id=123&page=1
            last:
              type: object
              properties:
                href:
                  type: string
                  description: URL of the last page of results.
                  example: https://api.swoogo.com/api/v1/registrants?event_id=123&page=5
        _meta:
          type: object
          description: Pagination metadata for the current result set.
          properties:
            totalCount:
              type: integer
              description: Total number of items matching the query across all pages.
              example: 95
            pageCount:
              type: integer
              description: Total number of pages available.
              example: 5
            currentPage:
              type: integer
              description: The current page number (1-indexed).
              example: 2
            perPage:
              type: integer
              description: Number of items returned per page.
              example: 20
    InvitationListItem:
      type: object
      properties:
        id:
          type: integer
          example: 34
        name:
          type: string
          example: test list update
        notes:
          type: string
          example: random notes
          description: Only included when fields parameter includes 'notes'
        module:
          type: string
          nullable: true
          example: main
          description: The module type ('main' or 'cfs') - only included when fields parameter includes 'module'
        reg_type_id:
          type: integer
          nullable: true
          example: null
          description: Only included when fields parameter includes 'reg_type_id'
        package_id:
          type: integer
          nullable: true
          example: null
          description: Only included when fields parameter includes 'package_id'
        cfs_role_id:
          type: integer
          nullable: true
          example: null
          description: Only included when fields parameter includes 'cfs_role_id'
        created_at:
          type: string
          example: '2025-10-06 20:49:50'
          description: Only included when fields parameter includes 'created_at'
        updated_at:
          type: string
          example: '2025-10-06 21:10:41'
          description: Only included when fields parameter includes 'updated_at'
    PaginationLinks:
      type: object
      properties:
        self:
          type: object
          properties:
            href:
              type: string
              example: https://local.swoogo.com/api/v1/invitation-lists.json?event_id=4261&fields=id%2Cname&search=&page=1&sort=
        first:
          type: object
          properties:
            href:
              type: string
              example: https://local.swoogo.com/api/v1/invitation-lists.json?event_id=4261&fields=id%2Cname&search=&page=1&sort=
        last:
          type: object
          properties:
            href:
              type: string
              example: https://local.swoogo.com/api/v1/invitation-lists.json?event_id=4261&fields=id%2Cname&search=&page=1&sort=
    PaginationMeta:
      type: object
      properties:
        totalCount:
          type: integer
          example: 10
        pageCount:
          type: integer
          example: 1
        currentPage:
          type: integer
          example: 1
        perPage:
          type: integer
          example: 20
    InvitationListCollection:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/InvitationListItem'
        _links:
          $ref: '#/components/schemas/PaginationLinks'
        _meta:
          $ref: '#/components/schemas/PaginationMeta'
    ErrorResponse-2:
      type: object
      properties:
        name:
          type: string
        message:
          type: string
        code:
          type: integer
          example: 0
        status:
          type: integer
    InvitationListContactItem:
      type: object
      properties:
        contact_id:
          type: integer
          example: 477
          description: The ID of the contact
        status:
          type: string
          example: no_email_sent
          description: 'The contact''s invitation status. Possible values: `no_email_sent`, `no_response`, `visited`, `accepted`, `declined`.'
    InvitationListContactCollection:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/InvitationListContactItem'
        _links:
          $ref: '#/components/schemas/PaginationLinks'
        _meta:
          $ref: '#/components/schemas/PaginationMeta'
    ContactAddedResponse:
      type: object
      properties:
        event_id:
          type: integer
          example: 4261
          description: The ID of the event this invitation list belongs to
        list_id:
          type: integer
          example: 34
          description: The ID of the invitation list
        contact_id:
          type: integer
          example: 477
          description: The ID of the contact that was added
        status:
          type: string
          example: no_email_sent
          description: The status of the contact in the invitation list
        created_at:
          type: string
          example: '2025-10-06 21:27:57'
          description: When the contact was added to the invitation list
        created_by:
          type: integer
          example: 1
          description: The ID of the user who added the contact
    ContactRemovedResponse:
      type: object
      properties:
        message:
          type: string
          example: Contact successfully removed from invitation list
        success:
          type: boolean
          example: true
    discountResponse:
      type: object
      description: |
        The discount payload returned by every read endpoint. Reflects `Discount::fields()` exactly —
        every property is always present in the response (values may be `null`).
      properties:
        id:
          type: integer
          example: 6095869
        parent_id:
          type:
            - integer
            - 'null'
          description: ID of the primary discount when this row is an alternate code; `null` (or `0`) for primary codes.
          example: null
        event_id:
          type: integer
          example: 261977
        code:
          type: string
          example: SPRINGSALE2024
        type:
          type: string
          enum:
            - percentage
            - absolute
            - specific
          example: percentage
        capacity:
          type: integer
          description: Maximum number of times this discount can be used. `0` means unlimited.
          example: 10
        min_group_size:
          type: integer
          example: 0
        registrants_per_use:
          type: integer
          example: 0
        sold_out_message:
          type:
            - string
            - 'null'
          example: null
        percentage_discount:
          type: number
          format: float
          example: 15
        absolute_discount:
          type: number
          format: float
          example: 0
        applicable_line_items:
          type:
            - array
            - 'null'
          items:
            type: string
          example:
            - session
            - package
        apply_to_all:
          type: integer
          enum:
            - 0
            - 1
          description: Returned as `0` or `1` (not a JSON boolean), even though the request accepts a boolean.
          example: 1
        custom_fees:
          type:
            - object
            - 'null'
          description: |
            Merged set of line-item-specific fees for `specific` discounts. Outer key is the line-item
            type (`reg_type`, `package`, `session`), inner key is the line-item ID (numeric string), value
            is the fee as a string. Populated by `custom_fees_update` on write.
          additionalProperties:
            type: object
            additionalProperties:
              type: string
          example:
            session:
              '4147126': '315'
              '4147127': '337.5'
        notes:
          type:
            - string
            - 'null'
          example: Discount for early bird registrants.
        created_at:
          type: string
          description: Timestamp when the discount was created. Formatted as `YYYY-MM-DD HH:MM:SS`.
          example: '2026-04-28 21:00:15'
        updated_at:
          type: string
          description: Timestamp when the discount was last updated. Formatted as `YYYY-MM-DD HH:MM:SS`.
          example: '2026-04-28 21:00:15'
    discountCreateRequest:
      type: object
      required:
        - event_id
        - code
        - type
      properties:
        event_id:
          type: integer
          description: ID of the event to which this discount is associated.
          example: 12345
        parent_id:
          type: integer
          description: |
            Creates this code as an alternate (child) of the given primary code. The parent must be an existing,
            non-deleted, top-level code in the same event; otherwise the request is rejected with `422`.
            An alternate inherits everything from its parent: `capacity`, `min_group_size`, `registrants_per_use`,
            `percentage_discount`, `absolute_discount`, `apply_to_all`, `applicable_line_items`, `custom_fees`,
            `notes`, `sold_out_message`, `all_registrants_in_group`, `autopopulate_attributes` and visibility. Any of these sent alongside `parent_id` are ignored,
            and checkout always applies the parent's `type` and amount (the alternate's own `type` is informational only).
            Each alternate still tracks its own usage count against the inherited `capacity`.
            So the only fields worth sending with `parent_id` are `event_id`, `code` and `type`.
          example: 6715880
        code:
          type: string
          maxLength: 255
          description: Unique code for the discount within the event. May not contain `<`, `>`, `\`, or `"`.
          example: SPRINGSALE2024
        type:
          type: string
          enum:
            - percentage
            - absolute
            - specific
          description: |
            The type of discount being applied.
            - `percentage` — `percentage_discount` is required.
            - `absolute` — `absolute_discount` is required.
            - `specific` — line-item-specific fees are supplied via `custom_fees_update`.
          example: percentage
        percentage_discount:
          type: number
          format: float
          minimum: 0
          maximum: 100
          description: Percentage value of the discount. Required when `type` is `percentage`.
          example: 15
        absolute_discount:
          type: number
          format: float
          description: Absolute monetary value of the discount. Required when `type` is `absolute`.
          example: 25.5
        apply_to_all:
          type: boolean
          description: If `true`, the discount applies to every line item; if `false`, only to those listed in `applicable_line_items`.
          example: true
        capacity:
          type: integer
          description: Maximum number of times this discount can be used. Omit (or `0`) for unlimited.
          example: 10
        min_group_size:
          type: integer
          minimum: 2
          description: Minimum group size required to use this discount.
          example: 5
        registrants_per_use:
          type: integer
          minimum: 2
          description: Maximum number of times the code can be used per group of N registrants. e.g. set to `2` to allow 1 use in a group of 2, 2 uses in a group of 4, etc.
          example: 2
        all_registrants_in_group:
          type: boolean
          description: Whether all registrants in a group must use the same discount.
          example: true
        applicable_line_items:
          type: array
          description: |
            Line items the discount applies to when `apply_to_all` is `false`. Standard values are
            `reg_type`, `package`, and `session`. Custom-question line items use the form `c_<questionId>`
            (e.g. `c_438`).
          items:
            type: string
          example:
            - session
            - package
        custom_fees_update:
          type: object
          description: |
            For `specific` discounts: maps each line-item type to a map of line-item IDs and the
            replacement fee (as a string). On save, these entries are merged into the persisted
            `custom_fees` object. Returned only via the `custom_fees` field on read responses.
          additionalProperties:
            type: object
            additionalProperties:
              type: string
          example:
            session:
              '4147126': '315'
              '4147127': '337.5'
        autopopulate_attributes:
          type: array
          description: |
            Registrant fields to be automatically populated when this discount is applied. Each entry
            has an `attribute` (registrant attribute name or `c_<questionId>` for custom questions)
            and a `value`.
          items:
            type: object
            properties:
              attribute:
                type: string
                example: gender
              value:
                description: The value to set on the registrant (any scalar; `null` clears the field).
                example: '1'
        notes:
          type: string
          description: Free-form notes or comments about the discount.
          example: Discount for early bird registrants.
        sold_out_message:
          type: string
          maxLength: 255
          description: Custom message shown when the discount is sold out. Defaults to a generic message when not set.
          example: SPRINGSALE2024 has been used too many times.
    discountUpdateRequest:
      type: object
      description: |
        All fields are optional on update. `event_id` cannot be changed — discounts are bound to their
        original event. To create an alternate code under an existing discount, pass `parent_id` to the create endpoint. The clone endpoint always creates a new primary code.
      properties:
        code:
          type: string
          maxLength: 255
          description: Unique code for the discount within the event. May not contain `<`, `>`, `\`, or `"`.
          example: SPRINGSALE2024
        type:
          type: string
          enum:
            - percentage
            - absolute
            - specific
          description: The type of discount being applied.
          example: percentage
        percentage_discount:
          type: number
          format: float
          minimum: 0
          maximum: 100
          example: 15
        absolute_discount:
          type: number
          format: float
          example: 25.5
        apply_to_all:
          type: boolean
          example: true
        capacity:
          type: integer
          example: 10
        min_group_size:
          type: integer
          minimum: 2
          example: 5
        registrants_per_use:
          type: integer
          minimum: 2
          example: 2
        all_registrants_in_group:
          type: boolean
          example: true
        applicable_line_items:
          type: array
          items:
            type: string
          example:
            - session
            - package
        custom_fees_update:
          type: object
          description: New entries to merge into the stored `custom_fees`. See `discountCreateRequest` for shape.
          additionalProperties:
            type: object
            additionalProperties:
              type: string
          example:
            session:
              '4147126': '315'
        autopopulate_attributes:
          type: array
          items:
            type: object
            properties:
              attribute:
                type: string
                example: gender
              value:
                example: '1'
        notes:
          type: string
          example: Discount for early bird registrants.
        sold_out_message:
          type: string
          maxLength: 255
          example: SPRINGSALE2024 has been used too many times.
    FeeResponse:
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the fee
          example: 124
        session_id:
          type: integer
          description: The session ID (only present for session fees)
          example: 73
        package_id:
          type: integer
          description: The package ID (only present for package fees)
          example: 2
        price:
          type: string
          format: decimal
          description: The base price for the session/package
          example: '20.00'
        conditional_prices:
          type: object
          description: Conditional pricing based on registration field selections
          additionalProperties:
            type: string
            format: decimal
          example:
            '76': '10.00'
            '77': '5.00'
      required:
        - id
        - price
        - conditional_prices
    FeeUpdateRequest:
      type: object
      properties:
        price:
          type: string
          format: decimal
          description: The base price for the session/package
          minimum: 0
          maximum: 999999999
          example: '20.00'
        conditional_prices:
          type: object
          description: Conditional pricing based on registration field selections. Only existing keys can be updated.
          additionalProperties:
            type: string
            format: decimal
          example:
            '76': '10.00'
            '77': '5.00'
    sessionFields:
      type: object
      required:
        - event_id
        - name
      properties:
        id:
          type: integer
          description: Unique identifier for the session.
          example: 12345
        event_id:
          type: integer
          description: ID of the event associated with this session.
          example: 67890
        name:
          type: string
          description: Title or name of the session.
          example: Event Management Basics
        admin_short_name:
          type: string
          description: Admin-specific short name for internal usage.
          example: MgmtBasics
        badge_name:
          type: string
          description: Display name on attendee badges.
          example: Basics of Management
        description:
          type: string
          description: Detailed description of the session.
          example: An interactive workshop on event management fundamentals.
        date:
          type: string
          format: date
          description: The date when the session will take place.
          example: '2025-07-20'
        start_time:
          type: string
          format: time
          description: Start time of the session.
          example: '10:00:00'
        end_time:
          type: string
          format: time
          description: End time of the session.
          example: '12:00:00'
        use_event_timezone:
          type: integer
          description: Whether the event's default timezone is applied to the session.
          example: 1
        timezone:
          type: string
          description: Timezone for the session. For a list of TZ check `TZ Identifier` column in [this page](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
          example: America/New_York
        capacity:
          type: integer
          description: Maximum number of attendees allowed.
          example: 150
        location_id:
          type: integer
          description: Identifier for the location.
          example: 1234
        track_id:
          type: integer
          description: Identifier for the session's track.
          example: 5678
        webinar_url:
          type: string
          format: uri
          description: URL for the webinar if the session is virtual.
          example: https://example.com/webinar/12345
        sold_out_message:
          type: string
          description: Custom message displayed when the session is sold out.
          example: This session is fully booked.
        secure_id:
          type: string
          description: Secure identifier for the session.
          example: abc123xyz
        session_status:
          type: string
          description: Current status of the session.
          enum:
            - submitted
            - approved
            - rejected
            - converted
            - live
          example: approved
        locked_when_saved:
          type: integer
          description: Whether the session is locked after being saved.
          enum:
            - 0
            - 1
          example: 1
        selection_control:
          type: string
          enum:
            - optional
            - included
          description: Specifies whether the session is optional or included by default, setting the value 'session_included'.
          example: optional
        selected_by_default:
          type: integer
          description: Indicates if the session is selected by default for attendees.
          enum:
            - 0
            - 1
          example: 1
        prevent_session_conflicts:
          type: integer
          description: Whether when selecting this session should prevent conflicts with other sessions.
          enum:
            - 0
            - 1
          example: 1
        custom_fields:
          type: object
          additionalProperties:
            type: string
          description: Custom fields associated with the session.
          example:
            c_1001: Value1
            c_1002:
              - id: 123
    webhookGroupFields:
      type: object
      required:
        - name
        - url
        - trigger_object
      properties:
        name:
          type: string
          description: The name of the webhook group. This value must be unique.
          example: Sample Webhook Group
        headers:
          type: array
          items:
            type: object
            properties:
              key:
                type: string
                description: The key for the header.
                example: Authorization
              value:
                type: string
                description: The value associated with the header key.
                example: Bearer token
          description: A list of key-value pairs representing headers for the webhook group.
          example:
            - key: Authentication
              value: Bearer Token
            - key: Content-Type
              value: application/json
        notification_emails:
          type: array
          items:
            type: string
            description: A list of email addresses to be notified if any webhook within the group fails.
            example: example@email.com
          description: Notification email list for failure alerts.
          example:
            - notify@example.com
            - test@example.com
    webhookFields:
      type: object
      required:
        - name
        - url
        - trigger_object
      properties:
        name:
          type: string
          description: The name of the webhook.
          example: Sample Webhook
        url:
          type: string
          description: The URL that data should be sent to.
          required: true
          example: https://www.example.com/webhook
        trigger_object:
          type: string
          enum:
            - event
            - contact
            - registrant
            - speaker
            - sponsor
            - session
            - session_attendance
            - registrant_line_item
          description: The object that will cause the webhook to trigger.
          example: registrant
        group_id:
          type: integer
          description: Identifier for the webhook group.
        headers:
          type: array
          items:
            type: object
            properties:
              key:
                type: string
                description: Header key.
                example: Authorization
              value:
                type: string
                description: Header value.
                example: Bearer token
          description: Array of headers for the webhook.
          example:
            - key: Authentication
              value: Bearer Token
        trigger_on_insert:
          type: boolean
          description: Trigger the webhook when the object is inserted.
          example: true
        trigger_on_update:
          type: boolean
          description: Trigger the webhook when the object is updated.
          example: true
        trigger_on_delete:
          type: boolean
          description: Trigger the webhook when the object is deleted.
          example: false
        public_user:
          type: boolean
          description: Run the webhook for public users.
          example: false
        admin_user:
          type: boolean
          description: Run the webhook for admin users.
          example: true
        api_call:
          type: boolean
          description: Trigger the webhook during an API call.
          example: true
        all_fields:
          type: boolean
          description: Run the webhook for changes to all fields.
          example: false
        any_event:
          type: boolean
          description: Run the webhook for any event.
          example: false
        use_default_fields:
          type: boolean
          description: Use default fields for the webhook.
          example: true
        enabled:
          type: boolean
          description: Indicates whether the webhook is enabled.
          example: true
        event_ids:
          type: array
          items:
            type: integer
          description: List of event IDs to trigger the webhook.
          example:
            - 1
            - 2
            - 3
        fields:
          type: array
          items:
            type: object
            description: Custom JSON object fields that trigger the webhook.
          description: Array of fields to trigger the webhook when changed.
          example:
            - value
        content_type:
          type: string
          enum:
            - json
            - post
          description: The content type for webhook payloads.
          example: json
        notes:
          type: string
          description: Additional notes for the webhook.
          example: This webhook is for test purposes.
        post_field_data:
          type: array
          items:
            type: string
            enum:
              - id
              - value
          description: Fields to include in the webhook POST data.
          example:
            - id
            - value
        custom_fields:
          description: Custom fields for the webhook (type unspecified).
          type: array
          items:
            type: object
            properties:
              key:
                type: string
                description: Key to identify value on response.
                example: event_id
              type:
                type: string
                description: The object that will cause the webhook to trigger.
                enum:
                  - event
                  - contact
                  - registrant
                  - speaker
                  - sponsor
                  - session
                  - session_attendance
                  - registrant_line_item
                example: registrant
              value:
                type: string
                description: Field name.
                example: id
          example:
            - key: event_id
              type: registrant
              value: event_id
  parameters:
    FieldsParam:
      name: fields
      in: query
      schema:
        type: string
      description: Comma-separated list of field names to include in the response. When omitted, a default subset of fields is returned (typically `id` and key identifiers). Specify all desired fields explicitly to get the data you need.
      example: id,name,email,created_at
    ExpandParam:
      name: expand
      in: query
      schema:
        type: string
      description: 'Comma-separated list of related objects to embed in the response. Each resource supports specific expand values documented on the endpoint. Note: using `expand` reduces the maximum page size to 200 items per page.'
      example: homeAddress,workAddress
    SearchParam:
      name: search
      in: query
      schema:
        type: string
      description: |-
        Filter expression to narrow results. Combine multiple conditions with `&`.

        **Operators:** `=`, `!=`, `>=`, `<=`, `>`, `<`, `*contains*`, `*beginswith*`, `*endswith*`

        **Examples:**
        - `registration_status=confirmed` — exact match
        - `created_at>=2024-01-01` — date range
        - `last_name=*beginswith*Sm` — starts with "Sm"
        - `email=*contains*@example.com` — contains string
        - `id>100&registration_status=confirmed` — multiple conditions (AND)
      example: id>123
    SearchConditionParam:
      name: searchCondition
      in: query
      schema:
        type: string
        enum:
          - and
          - or
        default: and
      description: Logical operator to combine multiple `search` conditions. Defaults to `and` (all conditions must match). Set to `or` for any-match behavior.
      example: and
    PageParam:
      name: page
      in: query
      schema:
        type: integer
        minimum: 1
        default: 1
      description: Page number to retrieve (1-indexed). Use with `per-page` to navigate through results. The total number of pages is returned in the `_meta.pageCount` response field and the `X-Pagination-Page-Count` response header.
      example: 1
    PerPageParam:
      name: per-page
      in: query
      schema:
        type: integer
        minimum: 1
        maximum: 200
        default: 20
      description: Number of items to return per page. Maximum is `200` for most resources. Some resources (e.g., registrants) support up to `1000` when `expand` is not used. Using `expand` always caps the page size at `200`.
      example: 20
    SortParam:
      name: sort
      in: query
      schema:
        type: string
      description: |-
        Field name to sort results by. Prefix with `-` for descending order. Only one sort field is supported per request.

        **Examples:** `created_at` (ascending), `-created_at` (descending), `-id` (newest first)
      example: '-id'
    EventIdRequiredParam:
      name: event_id
      in: query
      required: true
      schema:
        type: integer
      description: The ID of the event to scope this request to. Required for all event-scoped resources. You can find event IDs by calling `GET /events`.
      example: 123
    FieldsParameter:
      name: fields
      in: query
      schema:
        type: string
        example: id,name
      description: string - optional - Comma separated list of fields you want to return (e.g., 'id,name,notes')
    SearchParameter:
      name: search
      in: query
      schema:
        type: string
        example: id>123
      description: string - optional - Filter conditions to narrow the results. Valid operators are =, !=, >=, <=, >, <, *contains*, *beginswith*, *endswith*
    PageParameter:
      name: page
      in: query
      schema:
        type: string
        example: '1'
      description: integer - optional - The page of results you want to view
    PerPageParameter:
      name: per-page
      in: query
      schema:
        type: string
        example: '20'
      description: integer - optional - The number of results per page (to a max of 1000)
    SortParameter:
      name: sort
      in: query
      schema:
        type: string
        example: 'null'
      description: string - optional - Sort the results (add - in front for opposite sort direction, e.g. "-id")
    EventIdParameter:
      name: event_id
      in: query
      schema:
        type: integer
        example: 4261
      description: integer - optional - Filter invitation lists by event ID
    InvitationListIdParameter:
      name: invitation_list_id
      in: path
      required: true
      schema:
        type: integer
        example: 34
      description: integer - required - The ID of the invitation list
    ContactIdParameter:
      name: contact_id
      in: path
      required: true
      schema:
        type: integer
        example: 477
      description: integer - required - The ID of the contact
  responses:
    Unauthorized:
      description: Authentication failed. The bearer token is missing, expired, or invalid. Obtain a new token via `POST /oauth2/token`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            name: Unauthorized
            message: Your request was made with invalid credentials.
            code: 0
            status: 401
    Forbidden:
      description: The authenticated user does not have permission to access this resource. This can occur if the resource belongs to a different account or the API credentials lack the required scope.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            name: Forbidden
            message: You do not have access to that resource.
            code: 0
            status: 403
    NotFound:
      description: The specified resource does not exist or has been deleted. Verify the ID is correct and that the resource belongs to an event your credentials have access to.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            name: Not Found
            message: The requested resource does not exist.
            code: 0
            status: 404
    InternalServerError:
      description: An unexpected server error occurred. If this persists, contact Swoogo support with the request details and timestamp.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            name: Internal Server Error
            message: An error occurred while processing your request.
            code: 0
            status: 500
    UnauthorizedResponse:
      description: Your request was made with invalid credentials.
      content:
        application/json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ErrorResponse-2'
              - type: object
                properties:
                  name:
                    example: Unauthorized
                  message:
                    example: Your request was made with invalid credentials.
                  status:
                    example: 401
    ForbiddenResponse:
      description: You do not have access to that resource.
      content:
        application/json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ErrorResponse-2'
              - type: object
                properties:
                  name:
                    example: Forbidden
                  message:
                    example: You do not have access to that resource.
                  status:
                    example: 403
    NotFoundResponse:
      description: The requested resource does not exist.
      content:
        application/json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ErrorResponse-2'
              - type: object
                properties:
                  name:
                    example: Not Found
                  message:
                    example: The requested resource does not exist.
                  status:
                    example: 404
    InternalServerErrorResponse:
      description: An error occurred while processing your request.
      content:
        application/json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ErrorResponse-2'
              - type: object
                properties:
                  name:
                    example: Internal Server Error
                  message:
                    example: An error occurred while processing your request.
                  status:
                    example: 500
    BadRequestResponse:
      description: Bad Request - Invalid input data
      content:
        application/json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ErrorResponse-2'
              - type: object
                properties:
                  name:
                    example: Bad Request
                  message:
                    example: Validation failed
                  status:
                    example: 400
    ConflictResponse:
      description: Conflict - Contact already exists in the invitation list
      content:
        application/json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ErrorResponse-2'
              - type: object
                properties:
                  name:
                    example: Conflict
                  message:
                    example: Contact already exists in this invitation list
                  status:
                    example: 409
    ParentNotFound:
      description: Session or package not found
      content:
        application/json:
          schema:
            type: object
            properties:
              name:
                type: string
                example: Not Found
              message:
                type: string
                example: 'Object not found: 73'
              code:
                type: integer
                example: 0
              status:
                type: integer
                example: 404
    ValidationError:
      description: Data validation failed
      content:
        application/json:
          schema:
            type: object
            properties:
              name:
                type: string
                example: Unprocessable Entity
              message:
                type: string
                example: Data Validation Failed.
              code:
                type: integer
                example: 0
              status:
                type: integer
                example: 422
              errors:
                type: object
                additionalProperties:
                  type: array
                  items:
                    type: string
                example:
                  conditional_prices:
                    - 'Conditional price for key ''77'' must be a valid number. Got: ''8s'''
  headers:
    RateLimitLimit:
      schema:
        type: integer
      description: Maximum number of API requests allowed in the current 10-minute window.
      example: 2000
    RateLimitRemaining:
      schema:
        type: integer
      description: Number of requests remaining in the current rate limit window.
      example: 1367
    RateLimitReset:
      schema:
        type: integer
      description: Number of seconds until the current rate limit window resets.
      example: 0
    PaginationCurrentPage:
      schema:
        type: integer
      description: The current page number in the paginated result set.
      example: 1
    PaginationPageCount:
      schema:
        type: integer
      description: Total number of pages available based on the current `per-page` value.
      example: 5
    PaginationPerPage:
      schema:
        type: integer
      description: Number of items returned per page.
      example: 20
    PaginationTotalCount:
      schema:
        type: integer
      description: Total number of items matching the query across all pages.
      example: 95
  examples:
    updatePriceOnly:
      summary: Update base price only
      value:
        price: '25.00'
    updateConditionalPricesOnly:
      summary: Update conditional prices only
      value:
        conditional_prices:
          '76': '15.00'
          '77': '10.00'
    updateBothPriceAndConditional:
      summary: Update both base price and conditional prices
      value:
        price: '50.00'
        conditional_prices:
          '76': '20.00'
          '77': '15.00'
          '78': '12.50'
    partialConditionalUpdate:
      summary: Update only specific conditional prices (others preserved)
      value:
        conditional_prices:
          '76': '18.00'
    clearSpecificConditionalPrices:
      summary: Clear specific conditional prices with empty strings
      value:
        conditional_prices:
          '76': ''
          '77': '10.00'
    mixedConditionalOperations:
      summary: Mix of updating, clearing, and preserving conditional prices
      value:
        price: '30.00'
        conditional_prices:
          '76': '15.00'
          '77': ''
x-tagGroups:
  - name: Authentication
    tags:
      - Authentication
  - name: Core Resources
    tags:
      - Events
      - Registrants
      - Sessions
      - Speakers
      - Sponsors
      - Contacts
  - name: Registration
    tags:
      - Registrant Types
      - Packages
      - Discount Codes
      - Transactions
      - Registrant Sessions
      - Registrant Session Waitlists
      - Registrant Groups
      - Registrant Line Items
      - Registrant Line Item Audits
      - Registration Audit
      - Apply to Attend
  - name: Event Configuration
    tags:
      - Event Fields
      - Event Questions
      - Event Websites
      - Event Badges
      - Event Folders
      - Session Fields
      - Session Locations
      - Session Attendance
      - Session Scans
      - Session Fees
      - Package Fees
      - Tracks
      - Pages
  - name: Speakers & Sponsors
    tags:
      - Speaker Sessions
      - Sponsor Fields
      - Sponsor Attendance
  - name: Contacts & Communication
    tags:
      - Contact Fields
      - Invitation Lists
      - Data Lists
      - Data List Items
  - name: Call for Speakers
    tags:
      - Call for Speaker Contacts
      - Call for Speaker Reviews
      - Call for Speaker Submissions
  - name: Media
    tags:
      - Images
  - name: Integrations
    tags:
      - Webhooks
      - Webhook Groups
