openapi: 3.0.0
paths:
  /v1/user-status:
    post:
      description: Query user status information with flexible filtering and pagination.
      operationId: getUserStatus
      parameters: []
      requestBody:
        required: true
        description: Request parameters for filtering and retrieving user status data
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GetUserStatusRequestDto'
            examples:
              basic:
                summary: Basic query
                description: Simple query to get user email and name
                value:
                  result_keys:
                    - id
                    - name
                    - first_name
                    - middle_name
                    - last_name
                    - phone
                    - email
                    - dob
                    - age
                    - full_address
                    - address1
                    - address2
                    - city
                    - state
                    - country
                    - postcode
                    - guardian_name
                    - guardian_dob
                    - guardian_age
                    - data_sharing_agreed
                    - override_status
                    - override_notes
                    - is_deleted
                    - selfie_liveness_score
                    - fmc_score
                    - gbg_high_level_result
                    - high_level_result
                    - document_overall_validation
                    - registration_submitted
                    - registration_status
                    - mobile_registration_status
                    - organization_id
                    - organization_name
                    - id3_match_status
                    - id3_pep_sanction_result
                    - connection_status
                    - connection_status_updated_at
                    - created_at
                    - updated_at
                  pagination:
                    limit: 10
                    offset: 0
              withFilters:
                summary: Query with filters
                description: Query with email filter and age range
                value:
                  filters:
                    email: test@example.com
                    age:
                      gte: 18
                      lte: 35
                  result_keys:
                    - id
                    - name
                    - first_name
                    - middle_name
                    - last_name
                    - phone
                    - email
                    - dob
                    - age
                    - full_address
                    - address1
                    - address2
                    - city
                    - state
                    - country
                    - postcode
                    - guardian_name
                    - guardian_dob
                    - guardian_age
                    - data_sharing_agreed
                    - override_status
                    - override_notes
                    - is_deleted
                    - selfie_liveness_score
                    - fmc_score
                    - gbg_high_level_result
                    - high_level_result
                    - document_overall_validation
                    - registration_submitted
                    - registration_status
                    - mobile_registration_status
                    - organization_id
                    - organization_name
                    - id3_match_status
                    - id3_pep_sanction_result
                    - connection_status
                    - connection_status_updated_at
                    - created_at
                    - updated_at
                  pagination:
                    limit: 5
                    offset: 0
              complexFilters:
                summary: Complex filtering
                description: Query with multiple filters and pagination
                value:
                  filters:
                    registration_status: active
                    age:
                      gte: 21
                    email: user@
                  result_keys:
                    - id
                    - name
                    - first_name
                    - middle_name
                    - last_name
                    - phone
                    - email
                    - dob
                    - age
                    - full_address
                    - address1
                    - address2
                    - city
                    - state
                    - country
                    - postcode
                    - guardian_name
                    - guardian_dob
                    - guardian_age
                    - data_sharing_agreed
                    - override_status
                    - override_notes
                    - is_deleted
                    - selfie_liveness_score
                    - fmc_score
                    - gbg_high_level_result
                    - high_level_result
                    - document_overall_validation
                    - registration_submitted
                    - registration_status
                    - mobile_registration_status
                    - organization_id
                    - organization_name
                    - id3_match_status
                    - id3_pep_sanction_result
                    - connection_status
                    - connection_status_updated_at
                    - created_at
                    - updated_at
                  pagination:
                    limit: 20
                    offset: 10
      responses:
        '200':
          description: User status information has been successfully retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetUserStatusResponseDto'
        '400':
          description: Validation errors or missing required fields.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetUserStatusErrorDto'
        '401':
          description: Authentication required or failed. Please provide valid credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedErrorDto'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenErrorDto'
        '404':
          description: No users found matching the specified criteria.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetUserStatusErrorDto'
        '409':
          description: >-
            The request could not be completed due to a conflict with the
            current state of the resource (e.g., duplicate entry).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictErrorDto'
        5XX:
          description: >-
            Internal error during the process. Please reach out to support so we
            can help you.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalErrorDto'
      security:
        - bearer: []
      summary: Get User Status
      tags:
        - User Status
info:
  title: User Status API
  description: >-
    This API enables customer to get a user status based on the filter and
    result keys.
  version: '1.0'
  contact:
    name: SQR
    url: https://sqr.id
    email: support@sqr.id
tags:
  - name: User Status
    description: >-
      — This API enables customer to get a user status based on the filter and
      result keys.
servers:
  - url: https://api.sqr-group.com
components:
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: JWT
      type: http
  schemas:
    DateRangeFilterDto:
      type: object
      properties:
        gt:
          type: string
          description: Greater than (ISO date)
          example: '2025-01-01T00:00:00.000Z'
        gte:
          type: string
          description: Greater than or equal (ISO date)
          example: '2025-01-01T00:00:00.000Z'
        lt:
          type: string
          description: Less than (ISO date)
          example: '2025-12-31T23:59:59.999Z'
        lte:
          type: string
          description: Less than or equal (ISO date)
          example: '2025-12-31T23:59:59.999Z'
        eq:
          type: string
          description: Equal to (ISO date)
          example: '2025-06-30T12:00:00.000Z'
    RangeFilterDto:
      type: object
      properties:
        gt:
          type: object
          description: Greater than
          example: 18
        gte:
          type: object
          description: Greater than or equal
          example: 18
        lt:
          type: object
          description: Less than
          example: 65
        lte:
          type: object
          description: Less than or equal
          example: 65
        eq:
          type: object
          description: Equal to
          example: 25
    FiltersDto:
      type: object
      properties:
        id:
          type: string
          description: Filter by user ID (exact match)
          example: 9A6IV5F100014862
        email:
          type: string
          description: Filter by email address (exact match)
          example: user@example.com
        name:
          type: string
          description: Filter by user name (exact match)
          example: John Doe
        first_name:
          type: string
          description: Filter by first name (exact match)
          example: John
        last_name:
          type: string
          description: Filter by last name (exact match)
          example: Doe
        phone:
          type: string
          description: Filter by phone number (exact match)
          example: '+1234567890'
        registration_status:
          type: string
          description: Filter by registration status (exact match)
          example: active
          enum:
            - active
            - pending
            - inactive
            - suspended
        mobile_registration_status:
          type: string
          description: Filter by mobile registration status (exact match)
          example: REGISTRATION_COMPLETED
          enum:
            - INCOMPLETE
            - PHONE_VERIFICATION
            - EMAIL_VERIFICATION
            - REQUEST_BASE_ACCOUNT_DATA
            - REQUEST_ACCOUNT_DATA
            - REQUEST_ADDRESS
            - REQUEST_GUARDIANS_INFO
            - REQUEST_PAYMENT
            - REQUEST_PROFILE_PICTURE
            - REQUEST_ID_VERIFICATION
            - REQUEST_DATA_SHARING_AGREEMENT
            - REQUEST_PASSWORD
            - REGISTRATION_COMPLETED
            - PENDING_ID_VERIFICATION
            - SELFIE_VERIFICATION
            - ID_READ_FAILED
            - FACE_READ_FAILED
            - VERIFICATION_PASSED
            - 'VERIFICATION_FAILED '
            - FACEMATCH_FAILED
            - BIRTHDAY_MATCH_FAILED
            - ADDRESS_MATCH_FAILED
            - NAME_MATCH_FAILED
            - REJECTED_ACCESS
            - REQUEST_SUBMIT_REGISTRATION
            - ADMIN_REVIEW
            - DELETED
            - REFERRED_APPLICATION
        organization_name:
          type: string
          description: Filter by organization name (exact match)
          example: SQR Group
        city:
          type: string
          description: Filter by city (exact match)
          example: New York
        state:
          type: string
          description: Filter by state (exact match)
          example: NY
        country:
          type: string
          description: Filter by country (exact match)
          example: US
        data_sharing_agreed:
          type: boolean
          description: Filter by data sharing agreement status
          example: true
        is_deleted:
          type: boolean
          description: Filter by deletion status
          example: false
        dob:
          description: Filter by date of birth
          example:
            gte: '2000-01-01'
            lte: '2005-12-31'
          allOf:
            - $ref: '#/components/schemas/DateRangeFilterDto'
        age:
          description: Filter by age range
          example:
            gte: 18
            lte: 65
          allOf:
            - $ref: '#/components/schemas/RangeFilterDto'
        selfie_liveness_score:
          description: Filter by selfie score range
          example:
            gte: 0.8
          allOf:
            - $ref: '#/components/schemas/RangeFilterDto'
        fmc_score:
          description: Filter by FMS score range
          example:
            gte: 0.7
          allOf:
            - $ref: '#/components/schemas/RangeFilterDto'
        middle_name:
          type: string
          description: Filter by middle name (exact match)
          example: Michael
        full_address:
          type: string
          description: Filter by full address (exact match)
          example: 123 Main St
        address1:
          type: string
          description: Filter by address line 1 (exact match)
          example: 123 Main St
        address2:
          type: string
          description: Filter by address line 2 (exact match)
          example: Apt 4B
        postcode:
          type: string
          description: Filter by postal code (exact match)
          example: '10001'
        guardian_dob:
          description: Filter guardian date of birth
          example:
            gte: '2000-01-01'
            lte: '2005-12-31'
          allOf:
            - $ref: '#/components/schemas/DateRangeFilterDto'
        guardian_name:
          type: string
          description: Filter by guardian name (exact match)
          example: Jane Doe
        guardian_age:
          description: Filter guardian age
          example:
            gte: 30
            lte: 60
          allOf:
            - $ref: '#/components/schemas/RangeFilterDto'
        override_status:
          type: string
          description: Filter by override status (exact match)
          example: AUTO_APPROVED
        override_notes:
          type: string
          description: Filter by override notes (exact match)
          example: This user was manually approved.
        gbg_high_level_result:
          type: string
          description: Filter by GBG high level result (exact match)
          example: Passed
        high_level_result:
          type: string
          description: Filter by high level result (exact match)
          example: Passed
        document_overall_validation:
          type: string
          description: Filter by document overall validation (exact match)
          example: PASS
        registration_submitted:
          type: boolean
          description: Filter by registration submitted status
          example: true
        organization_id:
          type: string
          description: Filter by organization ID (exact match)
          example: org-123
        id3_match_status:
          type: string
          description: Filter by ID3 match status (exact match)
          example: PASSED
        connection_status:
          type: string
          description: User connection status
          example: CONNECTED
        connection_status_updated_at:
          description: User connection status
          example:
            gte: '2025-01-01T00:00:00.000Z'
            lte: '2025-12-31T23:59:59.999Z'
          allOf:
            - $ref: '#/components/schemas/DateRangeFilterDto'
        created_at:
          description: Filter by creation date range
          example:
            gte: '2025-01-01T00:00:00.000Z'
            lte: '2025-12-31T23:59:59.999Z'
          allOf:
            - $ref: '#/components/schemas/DateRangeFilterDto'
        updated_at:
          description: Filter by last updated date range
          example:
            gte: '2025-01-01T00:00:00.000Z'
            lte: '2025-12-31T23:59:59.999Z'
          allOf:
            - $ref: '#/components/schemas/DateRangeFilterDto'
    PaginationDto:
      type: object
      properties:
        limit:
          type: number
          description: Maximum number of records to return
          example: 10
          minimum: 1
          default: 10
        offset:
          type: number
          description: Number of records to skip for pagination
          example: 0
          minimum: 0
          default: 0
    GetUserStatusRequestDto:
      type: object
      properties:
        filters:
          description: >-
            Optional filters to apply to the query. Supports exact matches for
            strings and range comparisons for numbers.
          example:
            email: user@example.com
            age:
              gte: 18
              lte: 65
            registration_status: active
            is_deleted: false
          allOf:
            - $ref: '#/components/schemas/FiltersDto'
        result_keys:
          description: >-
            Array of field names to include in the response. Only these fields
            will be returned for each user. If not specified, a default dataset
            is provided.
          example:
            - id
            - email
            - name
            - age
            - registration_status
          items:
            type: string
          type: array
        pagination:
          description: Pagination parameters to control the number of results returned
          example:
            limit: 20
            offset: 0
          allOf:
            - $ref: '#/components/schemas/PaginationDto'
    ID3PepSanctionResultResponse:
      type: object
      properties:
        status:
          type: string
          enum:
            - Pending
            - Cleared
            - Flagged
          readOnly: true
          example: Flagged
        timestamp:
          type: string
          format: date-time
          readOnly: true
        pep_result:
          readOnly: true
          example:
            notes: []
            gender: Male
            qrCode: '123312'
            status: Flagged
            aliases: []
            version: 1737447030528
            datasets:
              - PEP-CURRENT
              - REL
              - RRE
              - SAN-CURRENT
            lastName: Trump
            addresses:
              - city: New York City
                line1: 725 Fifth Avenue
                line2: Manhattan
                county: New York
                postcode: '10022'
                addressType: Residential
                countryIsoCode: US
            ddEntries: []
            evidences: []
            firstName: Donald
            isDeleted: false
            griEntries: []
            insEntries: []
            isDeceased: false
            middleName: John
          type: array
          items:
            type: array
        sanction_result:
          readOnly: true
          example:
            notes: []
            gender: Male
            qrCode: '123312'
            status: Flagged
            aliases: []
            version: 1737447030528
            datasets:
              - PEP-CURRENT
              - REL
              - RRE
              - SAN-CURRENT
            lastName: Trump
            addresses:
              - city: New York City
                line1: 725 Fifth Avenue
                line2: Manhattan
                county: New York
                postcode: '10022'
                addressType: Residential
                countryIsoCode: US
            ddEntries: []
            evidences: []
            firstName: Donald
            isDeleted: false
            griEntries: []
            insEntries: []
            isDeceased: false
            middleName: John
          type: array
          items:
            type: array
      required:
        - status
        - timestamp
        - pep_result
        - sanction_result
    FilteredResultKey:
      type: object
      properties:
        id:
          type: string
          description: Unique user identifier
          example: 157a50ef-cdf9-44f0-9e8f-a3d5d87e66e6
        name:
          type: string
          description: Full name of the user
          example: John Doe
        first_name:
          type: string
          description: First name of the user
          example: John
        middle_name:
          type: string
          description: Middle name of the user
          example: Michael
        last_name:
          type: string
          description: Last name of the user
          example: Doe
        phone:
          type: string
          description: Phone number of the user
          example: '+1234567890'
        email:
          type: string
          description: Email address of the user
          example: user@example.com
        dob:
          type: object
          description: Date of birth of the user
          example: '1990-01-01'
        age:
          type: number
          description: Age of the user
          example: 25
        full_address:
          type: string
          description: Full address of the user
          example: 123 Main St, New York, NY 10001
        address1:
          type: string
          description: Primary address line
          example: 123 Main St
        address2:
          type: string
          description: Secondary address line
          example: Apt 4B
        city:
          type: string
          description: City of the user
          example: New York
        state:
          type: string
          description: State or province of the user
          example: NY
        country:
          type: string
          description: Country of the user
          example: US
        postcode:
          type: string
          description: Postal code of the user
          example: '10001'
        guardian_name:
          type: string
          description: Name of the guardian
          example: Jane Doe
        guardian_dob:
          type: object
          description: Date of birth of the guardian
          example: '1965-05-15'
        guardian_age:
          type: number
          description: Age of the guardian
          example: 58
        data_sharing_agreed:
          type: boolean
          description: Whether the user has agreed to data sharing
          example: true
        override_status:
          type: string
          description: Override status for the user
          example: AUTO_APPROVED
        override_notes:
          type: string
          description: Override notes for the user
          example: Manual verification completed
        is_deleted:
          type: boolean
          description: Whether the user record is deleted
          example: false
        selfie_liveness_score:
          type: number
          description: Selfie validation score
          example: 85.05
        fmc_score:
          type: number
          description: FMS (Facial Matching Score)
          example: 92.21
        gbg_high_level_result:
          type: string
          description: GBG high level result
          example: pass
        high_level_result:
          type: string
          description: High level validation result
          example: Passed
        document_overall_validation:
          type: string
          description: Document overall validation status
          example: PASS
        registration_submitted:
          type: boolean
          description: Whether registration has been submitted
          example: true
        registration_status:
          type: string
          description: Registration status of the user
          example: Activated
          enum:
            - Activated
            - Rejected
            - Referred
            - For Review
            - Complete
            - Deleted
        mobile_registration_status:
          type: string
          description: Mobile registration status
          example: REGISTRATION_COMPLETED
          enum:
            - INCOMPLETE
            - PHONE_VERIFICATION
            - EMAIL_VERIFICATION
            - REQUEST_BASE_ACCOUNT_DATA
            - REQUEST_ACCOUNT_DATA
            - REQUEST_ADDRESS
            - REQUEST_GUARDIANS_INFO
            - REQUEST_PAYMENT
            - REQUEST_PROFILE_PICTURE
            - REQUEST_ID_VERIFICATION
            - REQUEST_DATA_SHARING_AGREEMENT
            - REQUEST_PASSWORD
            - REGISTRATION_COMPLETED
            - PENDING_ID_VERIFICATION
            - SELFIE_VERIFICATION
            - ID_READ_FAILED
            - FACE_READ_FAILED
            - VERIFICATION_PASSED
            - 'VERIFICATION_FAILED '
            - FACEMATCH_FAILED
            - BIRTHDAY_MATCH_FAILED
            - ADDRESS_MATCH_FAILED
            - NAME_MATCH_FAILED
            - REJECTED_ACCESS
            - REQUEST_SUBMIT_REGISTRATION
            - ADMIN_REVIEW
            - DELETED
            - REFERRED_APPLICATION
        organization_id:
          type: string
          description: Organization ID
          example: org-123
        organization_name:
          type: string
          description: Organization name
          example: SQR Group
        created_at:
          type: object
          description: Record creation timestamp
          example: '2023-01-01T00:00:00Z'
        id3_pep_sanction_status:
          type: string
          description: ID3 match status for PEP and Sanction screening
          example: PASS
        id3_pep_sanction_result:
          description: ID3 PEP and Sanction result object
          example:
            status: Pending
            timestamp: '2025-09-29T10:07:17.623Z'
            pep_result:
              notes: []
              gender: Male
              qrCode: '123312'
              status: Flagged
              aliases: []
              version: 1737447030528
              datasets:
                - PEP-CURRENT
                - REL
                - RRE
                - SAN-CURRENT
              lastName: Trump
              addresses:
                - city: New York City
                  line1: 725 Fifth Avenue
                  line2: Manhattan
                  county: New York
                  postcode: '10022'
                  addressType: Residential
                  countryIsoCode: US
              ddEntries: []
              evidences: []
              firstName: Donald
              isDeleted: false
              griEntries: []
              insEntries: []
              isDeceased: false
              middleName: John
            sanction_result:
              notes: []
              gender: Male
              qrCode: '123312'
              status: Flagged
              aliases: []
              version: 1737447030528
              datasets:
                - PEP-CURRENT
                - REL
                - RRE
                - SAN-CURRENT
              lastName: Trump
              addresses:
                - city: New York City
                  line1: 725 Fifth Avenue
                  line2: Manhattan
                  county: New York
                  postcode: '10022'
                  addressType: Residential
                  countryIsoCode: US
              ddEntries: []
              evidences: []
              firstName: Donald
              isDeleted: false
              griEntries: []
              insEntries: []
              isDeceased: false
              middleName: John
          allOf:
            - $ref: '#/components/schemas/ID3PepSanctionResultResponse'
        connection_status:
          type: string
          description: User status of connection to organization
          example: CONNECTED
        updated_at:
          type: object
          description: Record last update timestamp
          example: '2023-01-01T00:00:00Z'
    GetUserStatusResponseDto:
      type: object
      properties:
        results:
          description: >-
            Array of user records containing only the fields specified in the
            result_keys parameter. Each record is a dynamic object where the
            available fields depend on the requested result_keys.
          example:
            - id: 157a50ef-cdf9-44f0-9e8f-a3d5d87e66e6
              name: John Doe
              first_name: John
              middle_name: A
              last_name: Doe
              phone: +1-555-1234
              email: john.doe@example.com
              dob: '1999-05-15'
              age: 25
              full_address: 123 Main St, Springfield, IL, USA
              address1: 123 Main St
              address2: Apt 4B
              city: Springfield
              state: IL
              country: US
              postcode: '62701'
              guardian_name: Jane Doe
              guardian_dob: '1970-08-20'
              guardian_age: 54
              data_sharing_agreed: true
              override_status: AUTO_APPROVED
              override_notes: Manual verification completed.
              is_deleted: false
              selfie_liveness_score: 92.21
              fmc_score: 85.05
              gbg_high_level_result: pass
              high_level_result: verified
              document_overall_validation: PASS
              registration_submitted: true
              registration_status: active
              mobile_registration_status: REGISTRATION_COMPLETED
              organization_id: org-1001
              organization_name: Acme Corporation
              id3_match_status: PASS
              id3_pep_sanction_result:
                status: Pending
                timestamp: '2025-09-29T10:07:17.623Z'
                pep_result:
                  notes: []
                  gender: Male
                  qrCode: '123312'
                  status: Flagged
                  aliases: []
                  version: 1737447030528
                  datasets:
                    - PEP-CURRENT
                    - REL
                    - RRE
                    - SAN-CURRENT
                  lastName: Trump
                  addresses:
                    - city: New York City
                      line1: 725 Fifth Avenue
                      line2: Manhattan
                      county: New York
                      postcode: '10022'
                      addressType: Residential
                      countryIsoCode: US
                  ddEntries: []
                  evidences: []
                  firstName: Donald
                  isDeleted: false
                  griEntries: []
                  insEntries: []
                  isDeceased: false
                  middleName: John
                sanction_result:
                  notes: []
                  gender: Male
                  qrCode: '123312'
                  status: Flagged
                  aliases: []
                  version: 1737447030528
                  datasets:
                    - PEP-CURRENT
                    - REL
                    - RRE
                    - SAN-CURRENT
                  lastName: Trump
                  addresses:
                    - city: New York City
                      line1: 725 Fifth Avenue
                      line2: Manhattan
                      county: New York
                      postcode: '10022'
                      addressType: Residential
                      countryIsoCode: US
                  ddEntries: []
                  evidences: []
                  firstName: Donald
                  isDeleted: false
                  griEntries: []
                  insEntries: []
                  isDeceased: false
                  middleName: John
              connection_status: CONNECTED
              connection_status_updated_at: '2025-09-19T14:00:00Z'
              created_at: '2025-09-19T12:00:00Z'
              updated_at: '2025-09-19T14:30:00Z'
          type: array
          items:
            $ref: '#/components/schemas/FilteredResultKey'
        pagination:
          description: Pagination information for the current response
          example:
            limit: 10
            offset: 0
            total: 150
          allOf:
            - $ref: '#/components/schemas/PaginationDto'
      required:
        - results
        - pagination
    ErrorDetailSchema:
      type: object
      properties:
        field:
          type: string
          example: email
        code:
          type: string
          example: isNotEmpty
        hint:
          type: string
          example: email should not be empty
    GetUserStatusErrorDto:
      type: object
      properties:
        code:
          type: number
          example: 400
        errors:
          example:
            - field: filters
              code: isObject
              hint: filters must be an object
            - field: result_keys
              code: isArray
              hint: result_keys must be an array
            - field: pagination.limit
              code: isNumber
              hint: pagination.limit must be a number
          type: array
          items:
            $ref: '#/components/schemas/ErrorDetailSchema'
      required:
        - code
        - errors
    UnauthorizedErrorDto:
      type: object
      properties:
        code:
          type: number
          example: 401
          readOnly: true
        timestamp:
          format: date-time
          type: string
          example: '2025-07-11T06:51:25.202Z'
          readOnly: true
        path:
          type: string
          example: /api/v1/[route]...
          readOnly: true
        method:
          type: string
          example: GET
          readOnly: true
        error:
          type: string
          example: UNAUTHORIZED
          readOnly: true
        message:
          type: string
          example: Unauthorized
          readOnly: true
      required:
        - code
        - timestamp
        - path
        - method
        - error
        - message
    ForbiddenErrorDto:
      type: object
      properties:
        code:
          type: number
          example: 403
          readOnly: true
        timestamp:
          format: date-time
          type: string
          example: '2025-07-11T06:51:25.202Z'
          readOnly: true
        path:
          type: string
          example: /api/v1/[route]...
          readOnly: true
        method:
          type: string
          example: GET
          readOnly: true
        error:
          type: string
          example: FORBIDDEN
          readOnly: true
        message:
          type: string
          example: Forbidden
          readOnly: true
      required:
        - code
        - timestamp
        - path
        - method
        - error
        - message
    ConflictErrorDto:
      type: object
      properties:
        code:
          type: number
          example: 409
          readOnly: true
        timestamp:
          format: date-time
          type: string
          example: '2025-07-11T06:51:25.202Z'
          readOnly: true
        path:
          type: string
          example: /api/v1/[route]...
          readOnly: true
        method:
          type: string
          example: GET
          readOnly: true
        error:
          type: string
          example: CONFLICT
          readOnly: true
        message:
          type: string
          example: Conflict
          readOnly: true
      required:
        - code
        - timestamp
        - path
        - method
        - error
        - message
    InternalErrorDto:
      type: object
      properties:
        code:
          type: number
          example: 503
          readOnly: true
        timestamp:
          format: date-time
          type: string
          example: '2025-07-11T06:51:25.202Z'
          readOnly: true
        path:
          type: string
          example: /api/v1/[route]...
          readOnly: true
        method:
          type: string
          example: GET
          readOnly: true
        error:
          type: string
          example: INTERNAL_SERVER_ERROR
          readOnly: true
        message:
          type: string
          example: Internal Server Error
          readOnly: true
      required:
        - code
        - timestamp
        - path
        - method
        - error
        - message
