Spotnana Users API

APIs to onboard and manage users.

OpenAPI Specification

spotnana-users-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Air Users API
  version: v2
  description: APIs to perform search, checkout and book an air pnr
servers:
- url: https://api-ext-sboxmeta.partners.spotnana.com
  description: Sandbox URL
security:
- Bearer: []
tags:
- name: Users
  description: APIs to onboard and manage users.
paths:
  /v2/users:
    post:
      tags:
      - Users
      summary: Create user
      description: 'This endpoint is used to create user profiles in Spotnana. This is typically used by

        partner companies to onboard user profiles of their customer organizations.

        '
      operationId: createUser
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserCreateRequest'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntityId'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    get:
      parameters:
      - name: companyId
        in: query
        description: Identifier for company to search user for. Please specify one of the companyId or tmcId.
        schema:
          type: string
          format: uuid
        example: 4974a66b-7493-4f41-908c-58ba81093947
      - name: tmcId
        in: query
        description: Identifier for TMC to search user for. Please specify one of the companyId or tmcId.
        schema:
          type: string
          format: uuid
        example: b83e9704-2e8e-4256-90bf-2e59c1bcf9f2
      - name: email
        in: query
        description: Email ID of the user.
        schema:
          type: string
          format: email
        example: user@example.com
      - name: externalId
        in: query
        description: The partner-assigned user identifier.
        schema:
          type: string
        example: '123456'
      - name: employeeId
        in: query
        description: Employee ID of the user.
        schema:
          type: string
        example: EMP123456
      - name: includeInactive
        in: query
        description: If true, include inactive users in the response.
        schema:
          type: boolean
          default: false
        example: true
      tags:
      - Users
      summary: Query user
      description: 'This endpoint queries user of given company based on given identifier like email or external ID.

        In case includeInactive is true, inactive users are also included in the response.'
      operationId: queryUser
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserSummaryList'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /v3/users/list:
    post:
      tags:
      - Users
      summary: List users
      description: List users of a specific TMC or a company.
      operationId: listUsersV3
      x-draft: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ListUsersV3Request'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListUsersV3Response'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/users/{userId}:
    parameters:
    - name: userId
      in: path
      description: Identifier for user.
      required: true
      schema:
        type: string
        format: uuid
      example: 4974a66b-7493-4f41-908c-58ba81093947
    get:
      tags:
      - Users
      summary: Get user
      description: This endpoint gets user details for user ID.
      operationId: getUserInfo
      parameters:
      - name: includeInactive
        in: query
        description: Include inactive users in the response.
        schema:
          type: boolean
          default: false
          example: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserProfile'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      tags:
      - Users
      summary: Delete user
      description: This endpoint deletes a user by user ID.
      operationId: deleteUser
      responses:
        '204':
          description: No Content
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    put:
      tags:
      - Users
      summary: Update user
      operationId: updateUser
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserUpdateRequest'
      responses:
        '200':
          description: No Content
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/users/{userId}/business-info:
    parameters:
    - name: userId
      in: path
      description: Identifier for user.
      required: true
      schema:
        type: string
        format: uuid
      example: 4974a66b-7493-4f41-908c-58ba81093947
    - name: includeInactive
      in: query
      description: Include inactive users.
      schema:
        type: boolean
        default: false
        example: true
    get:
      tags:
      - Users
      summary: Get user business info
      description: This endpoint gets user business info by user ID.
      operationId: getBusinessInfo
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BusinessInfo'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      tags:
      - Users
      summary: Update user business info
      description: This endpoint updates user business info by user ID.
      operationId: updateBusinessInfo
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BusinessInfo'
      responses:
        '204':
          description: OK
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/users/{userId}/personal-info:
    parameters:
    - name: userId
      in: path
      description: Identifier for user.
      required: true
      schema:
        type: string
        format: uuid
      example: 4974a66b-7493-4f41-908c-58ba81093947
    - name: includeInactive
      in: query
      description: Include inactive users.
      schema:
        type: boolean
        default: false
        example: true
    get:
      tags:
      - Users
      summary: Get user personal info
      description: This endpoint gets user personal info by user ID.
      operationId: getPersonalInfo
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserPersonalInfo'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      tags:
      - Users
      summary: Update user personal info
      description: This endpoint updates user personal info by user ID.
      operationId: updatePersonalInfo
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserPersonalInfo'
      responses:
        '200':
          description: OK
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/users/{userId}/travel-preferences:
    parameters:
    - name: userId
      in: path
      description: Identifier for user.
      required: true
      schema:
        type: string
        format: uuid
      example: 4974a66b-7493-4f41-908c-58ba81093947
    get:
      tags:
      - Users
      summary: Get user travel preferences
      operationId: getUserTravelPreferences
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelPreferences'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      tags:
      - Users
      summary: Update user travel preferences
      operationId: updateTravelPreferences
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelPreferences'
      responses:
        '204':
          description: No Content
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/users/{userId}/membership-info:
    parameters:
    - name: userId
      in: path
      description: Identifier for user.
      required: true
      schema:
        type: string
        format: uuid
      example: 4974a66b-7493-4f41-908c-58ba81093947
    get:
      tags:
      - Users
      summary: Get user membership info
      operationId: getMembershipInfo
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MembershipInfo'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      tags:
      - Users
      summary: Update user membership info
      operationId: updateMembershipInfo
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MembershipInfo'
      responses:
        '204':
          description: No Content
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/users/{userId}/roles:
    parameters:
    - name: userId
      in: path
      description: Identifier for user.
      required: true
      schema:
        type: string
        format: uuid
      example: 4974a66b-7493-4f41-908c-58ba81093947
    put:
      tags:
      - Users
      summary: Update user roles
      description: This endpoint updates user roles.
      operationId: updateUserRoles
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RolesConfig'
      responses:
        '204':
          description: No Content
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    get:
      tags:
      - Users
      summary: Get user roles
      description: This endpoint gets user roles.
      operationId: getUserRoles
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RolesConfig'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/users/{userId}/notification-preferences:
    parameters:
    - name: userId
      in: path
      description: Identifier for user.
      required: true
      schema:
        type: string
        format: uuid
      example: 4974a66b-7493-4f41-908c-58ba81093947
    get:
      tags:
      - Users
      summary: Get notification preferences
      description: This endpoint gets notification preferences for a user.
      operationId: getNotificationPreferences
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotificationPreferences'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      tags:
      - Users
      summary: Update notification preferences
      description: This endpoint updates notification preferences for a user.
      operationId: updateNotificationPreferences
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NotificationPreferences'
      responses:
        '200':
          description: OK
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/users/{userId}/travel-arrangers:
    parameters:
    - name: userId
      in: path
      description: Identifier for user.
      required: true
      schema:
        type: string
        format: uuid
      example: 4974a66b-7493-4f41-908c-58ba81093947
    get:
      tags:
      - Users
      summary: Get user travel arrangers
      operationId: getUserTravelArrangers
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserTravelArrangers'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/users/{userId}/external-id:
    parameters:
    - name: userId
      in: path
      description: Identifier for user.
      required: true
      schema:
        type: string
        format: uuid
      example: 4974a66b-7493-4f41-908c-58ba81093947
    - name: includeInactive
      in: query
      description: Include inactive users.
      schema:
        type: boolean
        default: false
        example: true
    get:
      tags:
      - Users
      summary: Get user's external ID
      description: This endpoint gets user's external ID by user ID.
      operationId: getExternalId
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalIdObject'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      tags:
      - Users
      summary: Update user's external ID
      description: This endpoint updates user's external ID by user ID.
      operationId: updateExternalId
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExternalIdObject'
      responses:
        '200':
          description: OK
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/users/{userId}/activate:
    parameters:
    - name: userId
      in: path
      description: Identifier for user.
      required: true
      schema:
        type: string
        format: uuid
      example: 4974a66b-7493-4f41-908c-58ba81093947
    post:
      tags:
      - Users
      summary: Activate a user
      description: This endpoint activates a deactivated user.
      operationId: activateUser
      responses:
        '200':
          description: OK
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/users/{userId}/favorites:
    parameters:
    - name: userId
      in: path
      description: Identifier for user.
      required: true
      schema:
        type: string
        format: uuid
      example: 4974a66b-7493-4f41-908c-58ba81093947
    post:
      tags:
      - Users
      summary: Add favorite
      description: Add a favorite item for a user.
      operationId: addFavorite
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddFavoriteRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddFavoriteResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    get:
      parameters:
      - name: types
        in: query
        description: Filter by favorite types. If empty, returns all types.
        schema:
          type: array
          items:
            type: string
      - name: query
        in: query
        description: Search query to filter favorites by display name.
        schema:
          type: string
      tags:
      - Users
      summary: List favorites
      description: List favorite items for a user, optionally filtered by type and search query.
      operationId: listFavorites
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListFavoritesResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /v2/users/{userId}/favorites/{favoriteId}:
    parameters:
    - name: userId
      in: path
      description: Identifier for user.
      required: true
      schema:
        type: string
        format: uuid
      example: 4974a66b-7493-4f41-908c-58ba81093947
    - name: favoriteId
      in: path
      description: Identifier for the favorite item.
      required: true
      schema:
        type: string
    delete:
      tags:
      - Users
      summary: Remove favorite
      description: Remove a favorite item for a user.
      operationId: removeFavorite
      responses:
        '200':
          description: OK
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/users/{userId}/applicable-policies:
    parameters:
    - name: userId
      in: path
      description: Identifier for user.
      required: true
      schema:
        type: string
        format: uuid
      example: 4974a66b-7493-4f41-908c-58ba81093947
    get:
      tags:
      - Users
      summary: Get user policies
      operationId: getUserApplicablePolicies
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserApplicablePolicies'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  responses:
    Forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFound:
      description: The specified resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  schemas:
    CoachPref:
      type: string
      description: The preference of coach.
      enum:
      - SMOKING
      - NON_SMOKING
      - PETS_ALLOWED
      - RESTAURANT
      - QUIET
      example: NON_SMOKING
    PrimaryServiceProviderTmc:
      type: object
      title: PrimaryServiceProviderTmc
      description: Primary service provider TMC info
      required:
      - tmcId
      properties:
        tmcId:
          $ref: '#/components/schemas/CompanyId'
          description: Id of the service provider TMC.
    SeatPref:
      type: object
      title: SeatPref
      description: Preference about seat of rail.
      properties:
        hasAccessibility:
          type: boolean
          description: Whether or not requires assistance for disability.
          default: false
          example: false
        seatTypes:
          type: array
          items:
            $ref: '#/components/schemas/SeatPrefType'
        seatLocations:
          type: array
          items:
            $ref: '#/components/schemas/SeatPrefLocation'
        deckLevels:
          type: array
          items:
            $ref: '#/components/schemas/DeckLevel'
        seatDirections:
          type: array
          items:
            $ref: '#/components/schemas/SeatPrefDirection'
    AdhocUserInfo:
      type: object
      title: AdhocUserInfo
      description: Basic information related to ad-hoc traveler profile.
      required:
      - profileOwner
      properties:
        profileOwner:
          $ref: '#/components/schemas/ProfileOwner'
        isSaved:
          type: boolean
          description: "A boolean flag to show if ad-hoc traveler is visible in search. While updating the user \nif client tries to update this field, it will throw exception.\n"
          default: false
    UserSummary:
      type: object
      title: UserSummary
      description: Reference object containing uuid and name and other identifiers.
      required:
      - id
      properties:
        id:
          type: string
          format: uuid
        email:
          type: string
          format: email
        externalId:
          type: string
          description: The partner-assigned user identifier.
          example: user-1
        persona:
          $ref: '#/components/schemas/Persona'
        isActive:
          type: boolean
          description: Whether the user is active or not.
    RoleConfig:
      type: object
      description: Role Info
      properties:
        roleType:
          $ref: '#/components/schemas/RoleTypeEnum'
        roleMetadata:
          deprecated: true
          x-sunset: '2026-07-01'
          $ref: '#/components/schemas/RoleMeta'
        metadata:
          $ref: '#/components/schemas/RoleMetadataV2'
    RailPref:
      type: object
      title: RailPref
      description: Travel preferences related to rail station.
      properties:
        preferredRailStations:
          type: array
          description: A list of user preferred rail stations.
          items:
            $ref: '#/components/schemas/PreferredRailStation'
        seatPreference:
          $ref: '#/components/schemas/SeatPref'
        travelClasses:
          type: array
          description: A list of class of service for rail.
          items:
            $ref: '#/components/schemas/RailTravelClass'
        coachPreferences:
          type: array
          description: A list of coach preference for rail.
          items:
            $ref: '#/components/schemas/CoachPref'
        conditionalRates:
          type: array
          description: A list of conditional rates for rail.
          items:
            $ref: '#/components/schemas/ConditionalRate'
    CompanySpecifiedAttribute:
      type: object
      description: Company specified user arbitrary attribute.
      required:
      - fixedColumnName
      - value
      properties:
        fixedColumnName:
          type: string
          example: contingentType
        value:
          type: string
          example: FSTV
    CarPref:
      type: object
      title: CarPref
      description: Travel preferences related to car.
      properties:
        vendors:
          type: array
          description: A list of car vendors.
          items:
            $ref: '#/components/schemas/CarVendor'
        carTypes:
          type: array
          description: A list of types of car.
          items:
            $ref: '#/components/schemas/CarType'
        engineTypes:
          type: array
          description: A list of types of engine.
          items:
            $ref: '#/components/schemas/EngineType'
        transmissionTypes:
          type: array
          description: A list of types of transmission.
          items:
            $ref: '#/components/schemas/TransmissionSearchFilter'
        conditionalRates:
          type: array
          description: A list of conditional rates for rail.
          items:
            $ref: '#/components/schemas/ConditionalRate'
    Duration:
      type: object
      title: Duration
      description: Represents a duration of time with specific units of time.
      properties:
        iso8601:
          description: 'Durations define the amount of intervening time in a time interval and are represented by the

            format P[n]Y[n]M[n]DT[n]H[n]M[n]S.

            The [n] is replaced by the value for each of the date and time elements that follow the [n].

            Leading zeros are not required. The capital letters P, Y, M, W, D, T, H, M, and S are

            designators for each of the date and time elements and are not replaced. P is the duration

            designator (for period) placed at the start of the duration representation.

            Y is the year designator.

            M is the month designator.

            W is the week designator.

            D is the day designator.

            T is the time designator.

            H is the hour designator.

            M is the minute designator.

            S is the second designator and can include decimal digits with arbitrary precision.

            '
          type: string
          example: PT19H55M
    RedressNumberWrapper:
      type: object
      title: RedressNumberWrapper
      properties:
        redress:
          $ref: '#/components/schemas/RedressNumber'
    ImmigrationDocument:
      type: object
      title: ImmigrationDocument
      description: Immigration document details.
      required:
      - docId
      - expiryDate
      - issueCountry
      properties:
        authorizedStayDuration:
          description: Duration of the stay authorized by the immigration document.
          $ref: '#/components/schemas/Duration'
        docId:
          type: string
          description: The ID of the immigration document.
          example: ImmigrationDocumentID
          x-pii: IDENTIFIER
        expiryDate:
          description: The date on which the immigration document expires.
          $ref: '#/components/schemas/DateModel'
          x-pii: SENSITIVE
        issueCountry:
          type: string
          description: The country that issued the immigration document.
          example: IN
        issuedDate:
          description: The date on which the immigration document was issued.
          $ref: '#/components/schemas/DateModel'
          x-pii: SENSITIVE
        nationalityCountry:
          type: string
          example: IN
          x-pii: SENSITIVE
        reentryRequirementDuration:
          $ref: '#/components/schemas/Duration'
        type:
          type: string
          enum:
          - UNKNOWN
          - VISA
          example: VISA
    UserSort:
      type: object
      title: UserSort
      required:
      - sortBy
      - sortOrder
      properties:
        sortBy:
          type: string
          description: The column on which the sorting should be applied.
          enum:
          - NAME
          default: NAME
          example: NAME
        sortOrder:
          type: string
          description: Order of sorting ie ascending or descending.
          enum:
          - ASCENDING
          - DESCENDING
          default: ASCENDING
          example: DESCENDING
    RoleMeta:
      type: object
      properties:
        travelArrangerMetadata:
          $ref: '#/components/schemas/TravelArrangerMetadata'
    CompanyId:
      type: object
      title: CompanyId
      description: Company ID
      required:
      - id
      properties:
        id:
          type: string
          format: uuid
          example: f49d00fe-1eda-4304-ba79-a980f565281d
    NationalDocWrapper:
      type: object
      title: NationalDocWrapper
      properties:
        nationalDoc:
          $ref: '#/components/schemas/NationalDoc'
    LoyaltyTier:
      type: string
      description: Loyalty membership tier name echoed from the supplier.
      example: GOLD
    EmergencyContactInfo:
      type: object
      title: EmergencyContactInfo
      description: Emergency contact information.
      required:
      - email
      properties:
        address:
          $ref: '#/components/schemas/PostalAddress'
          x-pii: SENSITIVE
        designation:
          type: string
          example: MANAGER
        email:
          type: string
          format: email
          example: emergency-contact@email.com
          x-pii: IDENTIFIER
        name:
          $ref: '#/components/schemas/Name'
        phoneNumber:
          $ref: '#/components/schemas/PhoneNumber'
          x-pii: IDENTIFIER
        userOrgId:
          $ref: '#/components/schemas/UserOrgId'
    UserId:
      type: object
      title: UserId
      description: User identifier
      required:
      - id
      properties:
        id:
          type: string
          format: uuid
    OrganizationId:
      type: object
      title: OrganizationId
      description: Organization id for traveler.
      required:
      - id
      properties:
        id:
          type: string
    UserProfile:
      type: object
      description: Traveler details.
      properties:
        id:
          type: string
          format: uuid
          example: b93dc51f-12dd-46c7-b7d6-1cb12cd3f5b3
        personalInfo:
          $ref: '#/components/schemas/UserPersonalInfo'
        businessInfo:
          $ref: '#/components/schemas/BusinessInfo'
        persona:
          $ref: '#/components/schemas/Persona'
        isActive:
          type: boolean
          description: Indicates if traveler is active.
          example: true
        tier:
          $ref: '#/components/schemas/Tier'
        stealthType:
          deprecated: true
          x-sunset: '2026-02-01'
          $ref: '#/components/schemas/StealthType'
        stealthMode:
          $ref: '#/components/schemas/StealthMode'
        relativeOf:
          deprecated: true
          x-sunset: '2026-07-01'
          $ref: '#/components/schemas/RelativeOf'
        travelPreferences:
          $ref: '#/components/schemas/TravelPreferences'
        membershipInfo:
          $ref: '#/components/schemas/MembershipInfo'
        notificationPreferences:
          $ref: '#/components/schemas/NotificationPreferences'
        travelArrangers:
          $ref: '#/components/schemas/UserTravelArrangers'
        adhocUserInfo:
          $ref: '#/components/schemas/AdhocUserInfo'
        externalId:
          type: string
          description: The partner-assigned user identifier.
        contractingTmcRef:
          $ref: '#/component

# --- truncated at 32 KB (93 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/spotnana/refs/heads/main/openapi/spotnana-users-api-openapi.yml