openapi: 3.0.3
info:
  title: example-data.com REST API
  version: 1.0.0
  description: Free, public mock JSON API across 118 collections.
    POST/PUT/PATCH/DELETE are accepted but do not persist (JSONPlaceholder-style
    fakes).
servers:
  - url: https://example-data.com
paths:
  /api/v1/users:
    get:
      summary: List users
      operationId: list-users
      tags:
        - users
      parameters: &a1
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a2
                      $ref: "#/components/schemas/UsersRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a3
                    id: 1
                    firstName: Charlene
                    lastName: Roberts
                    fullName: Charlene Roberts
                    username: charlene_roberts
                    email: charlene_roberts@example.com
                    phone: +1 202-555-0100 ext 1
                    bio: siege lover, educator 🍔
                    avatarUrl: https://api.dicebear.com/9.x/avataaars/svg?seed=user-1
                    thumbnailUrl: https://api.dicebear.com/9.x/avataaars/svg?seed=user-1&size=128
                    coverImageUrl: https://picsum.photos/seed/user-cover-1/1200/400
                    emailVerified: false
                    isActive: true
                    twitterHandle: null
                    createdAt: 2025-06-29T00:23:00.310Z
                    updatedAt: 2025-11-06T06:30:01.857Z
                meta:
                  total: 250
                  page: 1
                  limit: 25
                  totalPages: 10
                links:
                  self: /api/v1/users?page=1&limit=25
                  first: /api/v1/users?page=1&limit=25
                  last: /api/v1/users?page=10&limit=25
                  next: /api/v1/users?page=2&limit=25
                  prev: null
    head:
      summary: Check users collection availability
      operationId: head-users
      tags:
        - users
      parameters: *a1
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a users record (fake — not persisted)
      operationId: create-users
      tags:
        - users
      requestBody:
        required: true
        content:
          application/json:
            schema: &a6
              $ref: "#/components/schemas/UsersRecordInput"
            example: &a7
              firstName: Charlene
              lastName: Roberts
              fullName: Charlene Roberts
              username: charlene_roberts
              email: charlene_roberts@example.com
              phone: +1 202-555-0100 ext 1
              bio: siege lover, educator 🍔
              avatarUrl: https://api.dicebear.com/9.x/avataaars/svg?seed=user-1
              thumbnailUrl: https://api.dicebear.com/9.x/avataaars/svg?seed=user-1&size=128
              coverImageUrl: https://picsum.photos/seed/user-cover-1/1200/400
              emailVerified: false
              isActive: true
              twitterHandle: null
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a2
              example: *a3
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: &a4
                $ref: "#/components/schemas/ProblemDetails"
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/users/{id}:
    get:
      summary: Get one users record by id
      operationId: get-users-by-id
      tags:
        - users
      parameters: &a5
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a2
              example: *a3
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a users record exists
      operationId: head-users-by-id
      tags:
        - users
      parameters: *a5
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a users record (fake — not persisted)
      operationId: replace-users
      tags:
        - users
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a6
            example: *a7
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a2
              example: *a3
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a users record (fake — not persisted)
      operationId: patch-users
      tags:
        - users
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UsersRecordPatch"
            example: *a7
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a2
              example: *a3
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a users record (fake — not persisted)
      operationId: delete-users
      tags:
        - users
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/countries:
    get:
      summary: List countries
      operationId: list-countries
      tags:
        - countries
      parameters: &a8
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a9
                      $ref: "#/components/schemas/CountriesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a10
                    id: 1
                    name: United States
                    alpha2: US
                    alpha3: USA
                    numericCode: "840"
                    capital: Washington, D.C.
                    region: Americas
                    subregion: Northern America
                    currencyCode: USD
                    callingCode: "+1"
                    flagEmoji: 🇺🇸
                meta:
                  total: 50
                  page: 1
                  limit: 25
                  totalPages: 2
                links:
                  self: /api/v1/countries?page=1&limit=25
                  first: /api/v1/countries?page=1&limit=25
                  last: /api/v1/countries?page=2&limit=25
                  next: /api/v1/countries?page=2&limit=25
                  prev: null
    head:
      summary: Check countries collection availability
      operationId: head-countries
      tags:
        - countries
      parameters: *a8
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a countries record (fake — not persisted)
      operationId: create-countries
      tags:
        - countries
      requestBody:
        required: true
        content:
          application/json:
            schema: &a12
              $ref: "#/components/schemas/CountriesRecordInput"
            example: &a13
              name: United States
              alpha2: US
              alpha3: USA
              numericCode: "840"
              capital: Washington, D.C.
              region: Americas
              subregion: Northern America
              currencyCode: USD
              callingCode: "+1"
              flagEmoji: 🇺🇸
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a9
              example: *a10
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/countries/{id}:
    get:
      summary: Get one countries record by id
      operationId: get-countries-by-id
      tags:
        - countries
      parameters: &a11
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a9
              example: *a10
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a countries record exists
      operationId: head-countries-by-id
      tags:
        - countries
      parameters: *a11
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a countries record (fake — not persisted)
      operationId: replace-countries
      tags:
        - countries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a12
            example: *a13
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a9
              example: *a10
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a countries record (fake — not persisted)
      operationId: patch-countries
      tags:
        - countries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CountriesRecordPatch"
            example: *a13
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a9
              example: *a10
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a countries record (fake — not persisted)
      operationId: delete-countries
      tags:
        - countries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/posts:
    get:
      summary: List posts
      operationId: list-posts
      tags:
        - posts
      parameters: &a14
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a15
                      $ref: "#/components/schemas/PostsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a16
                    id: 1
                    userId: 60
                    title: Commodo vomer usque recusandae unde doloribus absconditus adicio
                      dignissimos sufficio
                    slug: commodo-vomer-usque-recusandae-unde-doloribus-absconditus-adicio-dignissimos-suf-1
                    excerpt: Vomer ipsa reiciendis synagoga. Denuncio vigilo victus accusator.
                    content: >-
                      Baiulus valde solus dignissimos quasi adiuvo. Colligo tum
                      similique. Arto apto comburo sufficio vos succurro
                      corrigo.


                      Quidem mollitia summa crastinus crustulum suscipio soleo
                      degenero. Triumphus absque atavus cunctatio quae virga
                      trepide tertius statim ullus. Peccatus ea aggero occaecati
                      suscipio infit.


                      Verumtamen depono solutio cimentarius arbitro cunabula
                      adsum solitudo. Conatus animi deficio subito copiose. Ter
                      contabesco usus animadverto conturbo crux cultellus.


                      Succurro amet acquiro convoco. Usitas aggredior alii alter
                      quasi. Triduana celo cribro ultra stabilis.


                      Ademptio subnecto tristis credo blandior. Tollo vicinus
                      sonitus pectus corrumpo depromo cultura solus. Cena
                      depereo amplexus altus dolorum catena clementia.


                      Adversus correptius quisquam. Vado abstergo suppellex.
                      Admoveo ventito cupiditate id.


                      Totam curto nesciunt claustrum degero auditor thymbra
                      attero ubi. Claro hic verto. Arbitro vir spargo stella
                      subvenio venustas triumphus voluptatum complectus ubi.
                    isPublished: true
                    publishedAt: 2025-11-25T06:26:06.433Z
                    viewCount: 39643
                    createdAt: 2025-11-18T07:00:30.419Z
                    updatedAt: 2026-01-13T10:35:49.451Z
                meta:
                  total: 500
                  page: 1
                  limit: 25
                  totalPages: 20
                links:
                  self: /api/v1/posts?page=1&limit=25
                  first: /api/v1/posts?page=1&limit=25
                  last: /api/v1/posts?page=20&limit=25
                  next: /api/v1/posts?page=2&limit=25
                  prev: null
    head:
      summary: Check posts collection availability
      operationId: head-posts
      tags:
        - posts
      parameters: *a14
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a posts record (fake — not persisted)
      operationId: create-posts
      tags:
        - posts
      requestBody:
        required: true
        content:
          application/json:
            schema: &a18
              $ref: "#/components/schemas/PostsRecordInput"
            example: &a19
              userId: 60
              title: Commodo vomer usque recusandae unde doloribus absconditus adicio
                dignissimos sufficio
              slug: commodo-vomer-usque-recusandae-unde-doloribus-absconditus-adicio-dignissimos-suf-1
              excerpt: Vomer ipsa reiciendis synagoga. Denuncio vigilo victus accusator.
              content: >-
                Baiulus valde solus dignissimos quasi adiuvo. Colligo tum
                similique. Arto apto comburo sufficio vos succurro corrigo.


                Quidem mollitia summa crastinus crustulum suscipio soleo
                degenero. Triumphus absque atavus cunctatio quae virga trepide
                tertius statim ullus. Peccatus ea aggero occaecati suscipio
                infit.


                Verumtamen depono solutio cimentarius arbitro cunabula adsum
                solitudo. Conatus animi deficio subito copiose. Ter contabesco
                usus animadverto conturbo crux cultellus.


                Succurro amet acquiro convoco. Usitas aggredior alii alter
                quasi. Triduana celo cribro ultra stabilis.


                Ademptio subnecto tristis credo blandior. Tollo vicinus sonitus
                pectus corrumpo depromo cultura solus. Cena depereo amplexus
                altus dolorum catena clementia.


                Adversus correptius quisquam. Vado abstergo suppellex. Admoveo
                ventito cupiditate id.


                Totam curto nesciunt claustrum degero auditor thymbra attero
                ubi. Claro hic verto. Arbitro vir spargo stella subvenio
                venustas triumphus voluptatum complectus ubi.
              isPublished: true
              publishedAt: 2025-11-25T06:26:06.433Z
              viewCount: 39643
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a15
              example: *a16
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/posts/{id}:
    get:
      summary: Get one posts record by id
      operationId: get-posts-by-id
      tags:
        - posts
      parameters: &a17
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a15
              example: *a16
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a posts record exists
      operationId: head-posts-by-id
      tags:
        - posts
      parameters: *a17
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a posts record (fake — not persisted)
      operationId: replace-posts
      tags:
        - posts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a18
            example: *a19
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a15
              example: *a16
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a posts record (fake — not persisted)
      operationId: patch-posts
      tags:
        - posts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PostsRecordPatch"
            example: *a19
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a15
              example: *a16
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a posts record (fake — not persisted)
      operationId: delete-posts
      tags:
        - posts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/products:
    get:
      summary: List products
      operationId: list-products
      tags:
        - products
      parameters: &a20
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a21
                      $ref: "#/components/schemas/ProductsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a22
                    id: 1
                    sku: H57WBW2GVC
                    name: Tasty Silk Tuna
                    slug: tasty-silk-tuna-1
                    description: Our bear-friendly Chips ensures unlucky comfort for your pets
                    category: clothing
                    brand: Braun - Tromp
                    price: 219.09
                    salePrice: null
                    currency: USD
                    inStock: false
                    stockCount: 0
                    rating: 2.3
                    ratingCount: 657
                    imageUrl: https://picsum.photos/seed/product-1/800/800
                    createdAt: 2026-03-10T02:02:36.337Z
                    updatedAt: 2026-05-11T20:35:27.253Z
                meta:
                  total: 200
                  page: 1
                  limit: 25
                  totalPages: 8
                links:
                  self: /api/v1/products?page=1&limit=25
                  first: /api/v1/products?page=1&limit=25
                  last: /api/v1/products?page=8&limit=25
                  next: /api/v1/products?page=2&limit=25
                  prev: null
    head:
      summary: Check products collection availability
      operationId: head-products
      tags:
        - products
      parameters: *a20
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a products record (fake — not persisted)
      operationId: create-products
      tags:
        - products
      requestBody:
        required: true
        content:
          application/json:
            schema: &a24
              $ref: "#/components/schemas/ProductsRecordInput"
            example: &a25
              sku: H57WBW2GVC
              name: Tasty Silk Tuna
              slug: tasty-silk-tuna-1
              description: Our bear-friendly Chips ensures unlucky comfort for your pets
              category: clothing
              brand: Braun - Tromp
              price: 219.09
              salePrice: null
              currency: USD
              inStock: false
              stockCount: 0
              rating: 2.3
              ratingCount: 657
              imageUrl: https://picsum.photos/seed/product-1/800/800
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a21
              example: *a22
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/products/{id}:
    get:
      summary: Get one products record by id
      operationId: get-products-by-id
      tags:
        - products
      parameters: &a23
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a21
              example: *a22
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a products record exists
      operationId: head-products-by-id
      tags:
        - products
      parameters: *a23
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a products record (fake — not persisted)
      operationId: replace-products
      tags:
        - products
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a24
            example: *a25
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a21
              example: *a22
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a products record (fake — not persisted)
      operationId: patch-products
      tags:
        - products
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ProductsRecordPatch"
            example: *a25
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a21
              example: *a22
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a products record (fake — not persisted)
      operationId: delete-products
      tags:
        - products
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/orders:
    get:
      summary: List orders
      operationId: list-orders
      tags:
        - orders
      parameters: &a26
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a27
                      $ref: "#/components/schemas/OrdersRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a28
                    id: 1
                    userId: 129
                    status: shipped
                    currency: USD
                    subtotal: 1635.7
                    tax: 143.12
                    shipping: 0
                    total: 1778.82
                    placedAt: 2025-08-01T09:53:49.279Z
                    shippedAt: 2025-08-02T11:26:14.340Z
                    deliveredAt: null
                    createdAt: 2025-08-01T09:53:49.279Z
                    updatedAt: 2025-08-02T11:26:14.340Z
                meta:
                  total: 1000
                  page: 1
                  limit: 25
                  totalPages: 40
                links:
                  self: /api/v1/orders?page=1&limit=25
                  first: /api/v1/orders?page=1&limit=25
                  last: /api/v1/orders?page=40&limit=25
                  next: /api/v1/orders?page=2&limit=25
                  prev: null
    head:
      summary: Check orders collection availability
      operationId: head-orders
      tags:
        - orders
      parameters: *a26
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a orders record (fake — not persisted)
      operationId: create-orders
      tags:
        - orders
      requestBody:
        required: true
        content:
          application/json:
            schema: &a30
              $ref: "#/components/schemas/OrdersRecordInput"
            example: &a31
              userId: 129
              status: shipped
              currency: USD
              subtotal: 1635.7
              tax: 143.12
              shipping: 0
              total: 1778.82
              placedAt: 2025-08-01T09:53:49.279Z
              shippedAt: 2025-08-02T11:26:14.340Z
              deliveredAt: null
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a27
              example: *a28
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/orders/{id}:
    get:
      summary: Get one orders record by id
      operationId: get-orders-by-id
      tags:
        - orders
      parameters: &a29
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a27
              example: *a28
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a orders record exists
      operationId: head-orders-by-id
      tags:
        - orders
      parameters: *a29
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a orders record (fake — not persisted)
      operationId: replace-orders
      tags:
        - orders
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a30
            example: *a31
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a27
              example: *a28
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a orders record (fake — not persisted)
      operationId: patch-orders
      tags:
        - orders
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/OrdersRecordPatch"
            example: *a31
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a27
              example: *a28
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a orders record (fake — not persisted)
      operationId: delete-orders
      tags:
        - orders
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/order-items:
    get:
      summary: List order-items
      operationId: list-order-items
      tags:
        - order-items
      parameters: &a32
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a33
                      $ref: "#/components/schemas/OrderItemsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a34
                    id: 1
                    orderId: 1
                    productId: 33
                    quantity: 4
                    unitPrice: 60.49
                    lineTotal: 241.96
                meta:
                  total: 2964
                  page: 1
                  limit: 25
                  totalPages: 119
                links:
                  self: /api/v1/order-items?page=1&limit=25
                  first: /api/v1/order-items?page=1&limit=25
                  last: /api/v1/order-items?page=119&limit=25
                  next: /api/v1/order-items?page=2&limit=25
                  prev: null
    head:
      summary: Check order-items collection availability
      operationId: head-order-items
      tags:
        - order-items
      parameters: *a32
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a order-items record (fake — not persisted)
      operationId: create-order-items
      tags:
        - order-items
      requestBody:
        required: true
        content:
          application/json:
            schema: &a36
              $ref: "#/components/schemas/OrderItemsRecordInput"
            example: &a37
              orderId: 1
              productId: 33
              quantity: 4
              unitPrice: 60.49
              lineTotal: 241.96
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a33
              example: *a34
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/order-items/{id}:
    get:
      summary: Get one order-items record by id
      operationId: get-order-items-by-id
      tags:
        - order-items
      parameters: &a35
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a33
              example: *a34
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a order-items record exists
      operationId: head-order-items-by-id
      tags:
        - order-items
      parameters: *a35
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a order-items record (fake — not persisted)
      operationId: replace-order-items
      tags:
        - order-items
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a36
            example: *a37
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a33
              example: *a34
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a order-items record (fake — not persisted)
      operationId: patch-order-items
      tags:
        - order-items
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/OrderItemsRecordPatch"
            example: *a37
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a33
              example: *a34
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a order-items record (fake — not persisted)
      operationId: delete-order-items
      tags:
        - order-items
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/restaurants:
    get:
      summary: List restaurants
      operationId: list-restaurants
      tags:
        - restaurants
      parameters: &a38
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a39
                      $ref: "#/components/schemas/RestaurantsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a40
                    id: 1
                    name: O'Hara and Sons
                    slug: o-hara-and-sons-1
                    cuisine: mediterranean
                    priceRange: $
                    rating: 4.4
                    ratingCount: 2759
                    countryAlpha2: NZ
                    city: New Eloisaboro
                    neighborhood: Hamilton County
                    address: 96634 Ursula Forks
                    phone: +1 202-555-0100 ext 1
                    website: https://o-hara-and-sons-1.example.com
                    hasDelivery: false
                    isOpen: false
                    latitude: 24.816431
                    longitude: -126.109296
                    createdAt: 2025-11-16T06:33:21.422Z
                    updatedAt: 2025-11-16T06:33:21.422Z
                meta:
                  total: 100
                  page: 1
                  limit: 25
                  totalPages: 4
                links:
                  self: /api/v1/restaurants?page=1&limit=25
                  first: /api/v1/restaurants?page=1&limit=25
                  last: /api/v1/restaurants?page=4&limit=25
                  next: /api/v1/restaurants?page=2&limit=25
                  prev: null
    head:
      summary: Check restaurants collection availability
      operationId: head-restaurants
      tags:
        - restaurants
      parameters: *a38
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a restaurants record (fake — not persisted)
      operationId: create-restaurants
      tags:
        - restaurants
      requestBody:
        required: true
        content:
          application/json:
            schema: &a42
              $ref: "#/components/schemas/RestaurantsRecordInput"
            example: &a43
              name: O'Hara and Sons
              slug: o-hara-and-sons-1
              cuisine: mediterranean
              priceRange: $
              rating: 4.4
              ratingCount: 2759
              countryAlpha2: NZ
              city: New Eloisaboro
              neighborhood: Hamilton County
              address: 96634 Ursula Forks
              phone: +1 202-555-0100 ext 1
              website: https://o-hara-and-sons-1.example.com
              hasDelivery: false
              isOpen: false
              latitude: 24.816431
              longitude: -126.109296
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a39
              example: *a40
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/restaurants/{id}:
    get:
      summary: Get one restaurants record by id
      operationId: get-restaurants-by-id
      tags:
        - restaurants
      parameters: &a41
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a39
              example: *a40
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a restaurants record exists
      operationId: head-restaurants-by-id
      tags:
        - restaurants
      parameters: *a41
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a restaurants record (fake — not persisted)
      operationId: replace-restaurants
      tags:
        - restaurants
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a42
            example: *a43
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a39
              example: *a40
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a restaurants record (fake — not persisted)
      operationId: patch-restaurants
      tags:
        - restaurants
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RestaurantsRecordPatch"
            example: *a43
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a39
              example: *a40
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a restaurants record (fake — not persisted)
      operationId: delete-restaurants
      tags:
        - restaurants
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/restaurant-photos:
    get:
      summary: List restaurant-photos
      operationId: list-restaurant-photos
      tags:
        - restaurant-photos
      parameters: &a44
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a45
                      $ref: "#/components/schemas/RestaurantPhotosRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a46
                    id: 1
                    restaurantId: 1
                    url: https://picsum.photos/seed/restaurant-1-0/1200/800
                    alt: O'Hara and Sons interior photo 1
                    caption: Cuius ipsam turpis compello tyrannus contego astrum vinitor spero.
                    isPrimary: true
                    createdAt: 2025-07-18T05:21:16.975Z
                meta:
                  total: 555
                  page: 1
                  limit: 25
                  totalPages: 23
                links:
                  self: /api/v1/restaurant-photos?page=1&limit=25
                  first: /api/v1/restaurant-photos?page=1&limit=25
                  last: /api/v1/restaurant-photos?page=23&limit=25
                  next: /api/v1/restaurant-photos?page=2&limit=25
                  prev: null
    head:
      summary: Check restaurant-photos collection availability
      operationId: head-restaurant-photos
      tags:
        - restaurant-photos
      parameters: *a44
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a restaurant-photos record (fake — not persisted)
      operationId: create-restaurant-photos
      tags:
        - restaurant-photos
      requestBody:
        required: true
        content:
          application/json:
            schema: &a48
              $ref: "#/components/schemas/RestaurantPhotosRecordInput"
            example: &a49
              restaurantId: 1
              url: https://picsum.photos/seed/restaurant-1-0/1200/800
              alt: O'Hara and Sons interior photo 1
              caption: Cuius ipsam turpis compello tyrannus contego astrum vinitor spero.
              isPrimary: true
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a45
              example: *a46
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/restaurant-photos/{id}:
    get:
      summary: Get one restaurant-photos record by id
      operationId: get-restaurant-photos-by-id
      tags:
        - restaurant-photos
      parameters: &a47
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a45
              example: *a46
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a restaurant-photos record exists
      operationId: head-restaurant-photos-by-id
      tags:
        - restaurant-photos
      parameters: *a47
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a restaurant-photos record (fake — not persisted)
      operationId: replace-restaurant-photos
      tags:
        - restaurant-photos
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a48
            example: *a49
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a45
              example: *a46
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a restaurant-photos record (fake — not persisted)
      operationId: patch-restaurant-photos
      tags:
        - restaurant-photos
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RestaurantPhotosRecordPatch"
            example: *a49
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a45
              example: *a46
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a restaurant-photos record (fake — not persisted)
      operationId: delete-restaurant-photos
      tags:
        - restaurant-photos
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/recipes:
    get:
      summary: List recipes
      operationId: list-recipes
      tags:
        - recipes
      parameters: &a50
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a54
                      $ref: "#/components/schemas/RecipesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a55
                    id: 1
                    userId: 24
                    title: rich Blood Orange Pie
                    slug: rich-blood-orange-pie-1
                    description: Adsuesco amitto cenaculum arma.
                    cuisine: indian
                    difficulty: hard
                    prepMinutes: 9
                    cookMinutes: 170
                    servings: 8
                    ingredients: &a51
                      - 4 oz apple juice
                      - 1.75 tbsp raisin
                      - 0.5 tsp jelly
                      - 3.75 g barramundi
                      - 4 g curry powder
                      - 3 tbsp fennel seeds
                      - 2.25 g hummus
                      - 4 tbsp ricotta
                      - 3.5 lb baking soda
                      - 1.25 oz macadamia nut
                      - 1 tsp guava
                      - 3 tsp lobster
                      - 1.25 tsp papaya
                      - 3.25 lb dried chinese broccoli
                    instructions: &a52
                      - "Step 1: Simmer safflower oil until aqua sumo una cattus universe."
                      - "Step 2: Fold aubergine until thorax torrens amoveo."
                      - "Step 3: Sauté cream until cado arx quibusdam trans."
                      - "Step 4: Whisk greenwheat freekeh until cimentarius labore volup
                        trepide commemoro."
                      - "Step 5: Sauté sunflower seeds until vespillo tero compono antiquus
                        averto."
                    tags: &a53
                      - gluten-free
                      - dairy-free
                      - low-carb
                      - vegan
                    imageUrl: https://picsum.photos/seed/recipe-1/1200/800
                    createdAt: 2025-04-30T14:56:49.378Z
                    updatedAt: 2025-04-30T14:56:49.378Z
                meta:
                  total: 300
                  page: 1
                  limit: 25
                  totalPages: 12
                links:
                  self: /api/v1/recipes?page=1&limit=25
                  first: /api/v1/recipes?page=1&limit=25
                  last: /api/v1/recipes?page=12&limit=25
                  next: /api/v1/recipes?page=2&limit=25
                  prev: null
    head:
      summary: Check recipes collection availability
      operationId: head-recipes
      tags:
        - recipes
      parameters: *a50
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a recipes record (fake — not persisted)
      operationId: create-recipes
      tags:
        - recipes
      requestBody:
        required: true
        content:
          application/json:
            schema: &a57
              $ref: "#/components/schemas/RecipesRecordInput"
            example: &a58
              userId: 24
              title: rich Blood Orange Pie
              slug: rich-blood-orange-pie-1
              description: Adsuesco amitto cenaculum arma.
              cuisine: indian
              difficulty: hard
              prepMinutes: 9
              cookMinutes: 170
              servings: 8
              ingredients: *a51
              instructions: *a52
              tags: *a53
              imageUrl: https://picsum.photos/seed/recipe-1/1200/800
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a54
              example: *a55
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/recipes/{id}:
    get:
      summary: Get one recipes record by id
      operationId: get-recipes-by-id
      tags:
        - recipes
      parameters: &a56
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a54
              example: *a55
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a recipes record exists
      operationId: head-recipes-by-id
      tags:
        - recipes
      parameters: *a56
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a recipes record (fake — not persisted)
      operationId: replace-recipes
      tags:
        - recipes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a57
            example: *a58
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a54
              example: *a55
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a recipes record (fake — not persisted)
      operationId: patch-recipes
      tags:
        - recipes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RecipesRecordPatch"
            example: *a58
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a54
              example: *a55
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a recipes record (fake — not persisted)
      operationId: delete-recipes
      tags:
        - recipes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/comments:
    get:
      summary: List comments
      operationId: list-comments
      tags:
        - comments
      parameters: &a59
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a60
                      $ref: "#/components/schemas/CommentsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a61
                    id: 1
                    userId: 25
                    targetType: post
                    targetId: 285
                    body: Venustas addo velut ter bos auditor carcer comitatus spero. Bonus
                      crustulum appositus odit velut certus eos vaco deleniti
                      video.
                    isEdited: false
                    createdAt: 2026-04-21T04:58:34.589Z
                    updatedAt: 2026-04-21T04:58:34.589Z
                meta:
                  total: 1500
                  page: 1
                  limit: 25
                  totalPages: 60
                links:
                  self: /api/v1/comments?page=1&limit=25
                  first: /api/v1/comments?page=1&limit=25
                  last: /api/v1/comments?page=60&limit=25
                  next: /api/v1/comments?page=2&limit=25
                  prev: null
    head:
      summary: Check comments collection availability
      operationId: head-comments
      tags:
        - comments
      parameters: *a59
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a comments record (fake — not persisted)
      operationId: create-comments
      tags:
        - comments
      requestBody:
        required: true
        content:
          application/json:
            schema: &a63
              $ref: "#/components/schemas/CommentsRecordInput"
            example: &a64
              userId: 25
              targetType: post
              targetId: 285
              body: Venustas addo velut ter bos auditor carcer comitatus spero. Bonus
                crustulum appositus odit velut certus eos vaco deleniti video.
              isEdited: false
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a60
              example: *a61
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/comments/{id}:
    get:
      summary: Get one comments record by id
      operationId: get-comments-by-id
      tags:
        - comments
      parameters: &a62
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a60
              example: *a61
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a comments record exists
      operationId: head-comments-by-id
      tags:
        - comments
      parameters: *a62
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a comments record (fake — not persisted)
      operationId: replace-comments
      tags:
        - comments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a63
            example: *a64
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a60
              example: *a61
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a comments record (fake — not persisted)
      operationId: patch-comments
      tags:
        - comments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CommentsRecordPatch"
            example: *a64
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a60
              example: *a61
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a comments record (fake — not persisted)
      operationId: delete-comments
      tags:
        - comments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/reactions:
    get:
      summary: List reactions
      operationId: list-reactions
      tags:
        - reactions
      parameters: &a65
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a66
                      $ref: "#/components/schemas/ReactionsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a67
                    id: 1
                    userId: 81
                    targetType: post
                    targetId: 388
                    type: laugh
                    createdAt: 2026-02-07T18:39:10.082Z
                meta:
                  total: 3000
                  page: 1
                  limit: 25
                  totalPages: 120
                links:
                  self: /api/v1/reactions?page=1&limit=25
                  first: /api/v1/reactions?page=1&limit=25
                  last: /api/v1/reactions?page=120&limit=25
                  next: /api/v1/reactions?page=2&limit=25
                  prev: null
    head:
      summary: Check reactions collection availability
      operationId: head-reactions
      tags:
        - reactions
      parameters: *a65
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a reactions record (fake — not persisted)
      operationId: create-reactions
      tags:
        - reactions
      requestBody:
        required: true
        content:
          application/json:
            schema: &a69
              $ref: "#/components/schemas/ReactionsRecordInput"
            example: &a70
              userId: 81
              targetType: post
              targetId: 388
              type: laugh
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a66
              example: *a67
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/reactions/{id}:
    get:
      summary: Get one reactions record by id
      operationId: get-reactions-by-id
      tags:
        - reactions
      parameters: &a68
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a66
              example: *a67
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a reactions record exists
      operationId: head-reactions-by-id
      tags:
        - reactions
      parameters: *a68
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a reactions record (fake — not persisted)
      operationId: replace-reactions
      tags:
        - reactions
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a69
            example: *a70
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a66
              example: *a67
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a reactions record (fake — not persisted)
      operationId: patch-reactions
      tags:
        - reactions
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ReactionsRecordPatch"
            example: *a70
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a66
              example: *a67
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a reactions record (fake — not persisted)
      operationId: delete-reactions
      tags:
        - reactions
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/currencies:
    get:
      summary: List currencies
      operationId: list-currencies
      tags:
        - currencies
      parameters: &a71
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a72
                      $ref: "#/components/schemas/CurrenciesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a73
                    id: 1
                    code: USD
                    name: United States Dollar
                    symbol: $
                    decimalDigits: 2
                meta:
                  total: 50
                  page: 1
                  limit: 25
                  totalPages: 2
                links:
                  self: /api/v1/currencies?page=1&limit=25
                  first: /api/v1/currencies?page=1&limit=25
                  last: /api/v1/currencies?page=2&limit=25
                  next: /api/v1/currencies?page=2&limit=25
                  prev: null
    head:
      summary: Check currencies collection availability
      operationId: head-currencies
      tags:
        - currencies
      parameters: *a71
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a currencies record (fake — not persisted)
      operationId: create-currencies
      tags:
        - currencies
      requestBody:
        required: true
        content:
          application/json:
            schema: &a75
              $ref: "#/components/schemas/CurrenciesRecordInput"
            example: &a76
              code: USD
              name: United States Dollar
              symbol: $
              decimalDigits: 2
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a72
              example: *a73
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/currencies/{id}:
    get:
      summary: Get one currencies record by id
      operationId: get-currencies-by-id
      tags:
        - currencies
      parameters: &a74
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a72
              example: *a73
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a currencies record exists
      operationId: head-currencies-by-id
      tags:
        - currencies
      parameters: *a74
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a currencies record (fake — not persisted)
      operationId: replace-currencies
      tags:
        - currencies
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a75
            example: *a76
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a72
              example: *a73
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a currencies record (fake — not persisted)
      operationId: patch-currencies
      tags:
        - currencies
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CurrenciesRecordPatch"
            example: *a76
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a72
              example: *a73
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a currencies record (fake — not persisted)
      operationId: delete-currencies
      tags:
        - currencies
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/languages:
    get:
      summary: List languages
      operationId: list-languages
      tags:
        - languages
      parameters: &a77
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a78
                      $ref: "#/components/schemas/LanguagesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a79
                    id: 1
                    code: en
                    name: English
                    nativeName: English
                    direction: ltr
                meta:
                  total: 50
                  page: 1
                  limit: 25
                  totalPages: 2
                links:
                  self: /api/v1/languages?page=1&limit=25
                  first: /api/v1/languages?page=1&limit=25
                  last: /api/v1/languages?page=2&limit=25
                  next: /api/v1/languages?page=2&limit=25
                  prev: null
    head:
      summary: Check languages collection availability
      operationId: head-languages
      tags:
        - languages
      parameters: *a77
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a languages record (fake — not persisted)
      operationId: create-languages
      tags:
        - languages
      requestBody:
        required: true
        content:
          application/json:
            schema: &a81
              $ref: "#/components/schemas/LanguagesRecordInput"
            example: &a82
              code: en
              name: English
              nativeName: English
              direction: ltr
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a78
              example: *a79
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/languages/{id}:
    get:
      summary: Get one languages record by id
      operationId: get-languages-by-id
      tags:
        - languages
      parameters: &a80
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a78
              example: *a79
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a languages record exists
      operationId: head-languages-by-id
      tags:
        - languages
      parameters: *a80
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a languages record (fake — not persisted)
      operationId: replace-languages
      tags:
        - languages
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a81
            example: *a82
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a78
              example: *a79
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a languages record (fake — not persisted)
      operationId: patch-languages
      tags:
        - languages
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LanguagesRecordPatch"
            example: *a82
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a78
              example: *a79
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a languages record (fake — not persisted)
      operationId: delete-languages
      tags:
        - languages
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/time-zones:
    get:
      summary: List time-zones
      operationId: list-time-zones
      tags:
        - time-zones
      parameters: &a83
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a84
                      $ref: "#/components/schemas/TimeZonesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a85
                    id: 1
                    name: America/New_York
                    offsetMinutes: -300
                    abbreviation: EST
                    countryAlpha2: US
                meta:
                  total: 66
                  page: 1
                  limit: 25
                  totalPages: 3
                links:
                  self: /api/v1/time-zones?page=1&limit=25
                  first: /api/v1/time-zones?page=1&limit=25
                  last: /api/v1/time-zones?page=3&limit=25
                  next: /api/v1/time-zones?page=2&limit=25
                  prev: null
    head:
      summary: Check time-zones collection availability
      operationId: head-time-zones
      tags:
        - time-zones
      parameters: *a83
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a time-zones record (fake — not persisted)
      operationId: create-time-zones
      tags:
        - time-zones
      requestBody:
        required: true
        content:
          application/json:
            schema: &a87
              $ref: "#/components/schemas/TimeZonesRecordInput"
            example: &a88
              name: America/New_York
              offsetMinutes: -300
              abbreviation: EST
              countryAlpha2: US
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a84
              example: *a85
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/time-zones/{id}:
    get:
      summary: Get one time-zones record by id
      operationId: get-time-zones-by-id
      tags:
        - time-zones
      parameters: &a86
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a84
              example: *a85
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a time-zones record exists
      operationId: head-time-zones-by-id
      tags:
        - time-zones
      parameters: *a86
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a time-zones record (fake — not persisted)
      operationId: replace-time-zones
      tags:
        - time-zones
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a87
            example: *a88
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a84
              example: *a85
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a time-zones record (fake — not persisted)
      operationId: patch-time-zones
      tags:
        - time-zones
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TimeZonesRecordPatch"
            example: *a88
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a84
              example: *a85
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a time-zones record (fake — not persisted)
      operationId: delete-time-zones
      tags:
        - time-zones
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/industries:
    get:
      summary: List industries
      operationId: list-industries
      tags:
        - industries
      parameters: &a89
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a90
                      $ref: "#/components/schemas/IndustriesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a91
                    id: 1
                    name: Commercial Banking
                    slug: commercial-banking
                    sector: Financial Services
                    description: Institutions accepting deposits and making loans to businesses and
                      individuals.
                meta:
                  total: 40
                  page: 1
                  limit: 25
                  totalPages: 2
                links:
                  self: /api/v1/industries?page=1&limit=25
                  first: /api/v1/industries?page=1&limit=25
                  last: /api/v1/industries?page=2&limit=25
                  next: /api/v1/industries?page=2&limit=25
                  prev: null
    head:
      summary: Check industries collection availability
      operationId: head-industries
      tags:
        - industries
      parameters: *a89
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a industries record (fake — not persisted)
      operationId: create-industries
      tags:
        - industries
      requestBody:
        required: true
        content:
          application/json:
            schema: &a93
              $ref: "#/components/schemas/IndustriesRecordInput"
            example: &a94
              name: Commercial Banking
              slug: commercial-banking
              sector: Financial Services
              description: Institutions accepting deposits and making loans to businesses and
                individuals.
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a90
              example: *a91
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/industries/{id}:
    get:
      summary: Get one industries record by id
      operationId: get-industries-by-id
      tags:
        - industries
      parameters: &a92
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a90
              example: *a91
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a industries record exists
      operationId: head-industries-by-id
      tags:
        - industries
      parameters: *a92
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a industries record (fake — not persisted)
      operationId: replace-industries
      tags:
        - industries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a93
            example: *a94
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a90
              example: *a91
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a industries record (fake — not persisted)
      operationId: patch-industries
      tags:
        - industries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IndustriesRecordPatch"
            example: *a94
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a90
              example: *a91
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a industries record (fake — not persisted)
      operationId: delete-industries
      tags:
        - industries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/categories:
    get:
      summary: List categories
      operationId: list-categories
      tags:
        - categories
      parameters: &a95
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a96
                      $ref: "#/components/schemas/CategoriesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a97
                    id: 1
                    name: Electronics
                    slug: electronics
                    description: Consumer electronics, gadgets, and technology hardware.
                    parentId: null
                    sortOrder: 1
                meta:
                  total: 40
                  page: 1
                  limit: 25
                  totalPages: 2
                links:
                  self: /api/v1/categories?page=1&limit=25
                  first: /api/v1/categories?page=1&limit=25
                  last: /api/v1/categories?page=2&limit=25
                  next: /api/v1/categories?page=2&limit=25
                  prev: null
    head:
      summary: Check categories collection availability
      operationId: head-categories
      tags:
        - categories
      parameters: *a95
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a categories record (fake — not persisted)
      operationId: create-categories
      tags:
        - categories
      requestBody:
        required: true
        content:
          application/json:
            schema: &a99
              $ref: "#/components/schemas/CategoriesRecordInput"
            example: &a100
              name: Electronics
              slug: electronics
              description: Consumer electronics, gadgets, and technology hardware.
              parentId: null
              sortOrder: 1
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a96
              example: *a97
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/categories/{id}:
    get:
      summary: Get one categories record by id
      operationId: get-categories-by-id
      tags:
        - categories
      parameters: &a98
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a96
              example: *a97
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a categories record exists
      operationId: head-categories-by-id
      tags:
        - categories
      parameters: *a98
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a categories record (fake — not persisted)
      operationId: replace-categories
      tags:
        - categories
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a99
            example: *a100
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a96
              example: *a97
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a categories record (fake — not persisted)
      operationId: patch-categories
      tags:
        - categories
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CategoriesRecordPatch"
            example: *a100
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a96
              example: *a97
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a categories record (fake — not persisted)
      operationId: delete-categories
      tags:
        - categories
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/tags:
    get:
      summary: List tags
      operationId: list-tags
      tags:
        - tags
      parameters: &a101
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a102
                      $ref: "#/components/schemas/TagsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a103
                    id: 1
                    name: tutorial
                    slug: tutorial
                    color: "#d636ab"
                    useCount: 458
                meta:
                  total: 60
                  page: 1
                  limit: 25
                  totalPages: 3
                links:
                  self: /api/v1/tags?page=1&limit=25
                  first: /api/v1/tags?page=1&limit=25
                  last: /api/v1/tags?page=3&limit=25
                  next: /api/v1/tags?page=2&limit=25
                  prev: null
    head:
      summary: Check tags collection availability
      operationId: head-tags
      tags:
        - tags
      parameters: *a101
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a tags record (fake — not persisted)
      operationId: create-tags
      tags:
        - tags
      requestBody:
        required: true
        content:
          application/json:
            schema: &a105
              $ref: "#/components/schemas/TagsRecordInput"
            example: &a106
              name: tutorial
              slug: tutorial
              color: "#d636ab"
              useCount: 458
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a102
              example: *a103
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/tags/{id}:
    get:
      summary: Get one tags record by id
      operationId: get-tags-by-id
      tags:
        - tags
      parameters: &a104
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a102
              example: *a103
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a tags record exists
      operationId: head-tags-by-id
      tags:
        - tags
      parameters: *a104
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a tags record (fake — not persisted)
      operationId: replace-tags
      tags:
        - tags
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a105
            example: *a106
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a102
              example: *a103
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a tags record (fake — not persisted)
      operationId: patch-tags
      tags:
        - tags
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TagsRecordPatch"
            example: *a106
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a102
              example: *a103
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a tags record (fake — not persisted)
      operationId: delete-tags
      tags:
        - tags
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/followers:
    get:
      summary: List followers
      operationId: list-followers
      tags:
        - followers
      parameters: &a107
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a108
                      $ref: "#/components/schemas/FollowersRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a109
                    id: 1
                    userId: 194
                    followsUserId: 136
                    createdAt: 2024-08-15T01:35:05.437Z
                meta:
                  total: 1500
                  page: 1
                  limit: 25
                  totalPages: 60
                links:
                  self: /api/v1/followers?page=1&limit=25
                  first: /api/v1/followers?page=1&limit=25
                  last: /api/v1/followers?page=60&limit=25
                  next: /api/v1/followers?page=2&limit=25
                  prev: null
    head:
      summary: Check followers collection availability
      operationId: head-followers
      tags:
        - followers
      parameters: *a107
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a followers record (fake — not persisted)
      operationId: create-followers
      tags:
        - followers
      requestBody:
        required: true
        content:
          application/json:
            schema: &a111
              $ref: "#/components/schemas/FollowersRecordInput"
            example: &a112
              userId: 194
              followsUserId: 136
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a108
              example: *a109
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/followers/{id}:
    get:
      summary: Get one followers record by id
      operationId: get-followers-by-id
      tags:
        - followers
      parameters: &a110
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a108
              example: *a109
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a followers record exists
      operationId: head-followers-by-id
      tags:
        - followers
      parameters: *a110
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a followers record (fake — not persisted)
      operationId: replace-followers
      tags:
        - followers
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a111
            example: *a112
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a108
              example: *a109
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a followers record (fake — not persisted)
      operationId: patch-followers
      tags:
        - followers
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/FollowersRecordPatch"
            example: *a112
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a108
              example: *a109
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a followers record (fake — not persisted)
      operationId: delete-followers
      tags:
        - followers
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/notifications:
    get:
      summary: List notifications
      operationId: list-notifications
      tags:
        - notifications
      parameters: &a113
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a114
                      $ref: "#/components/schemas/NotificationsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a115
                    id: 1
                    userId: 241
                    type: system
                    title: System notification
                    body: Suffragium avarus ager confero.
                    isRead: true
                    link: null
                    createdAt: 2025-12-26T14:25:47.468Z
                meta:
                  total: 2000
                  page: 1
                  limit: 25
                  totalPages: 80
                links:
                  self: /api/v1/notifications?page=1&limit=25
                  first: /api/v1/notifications?page=1&limit=25
                  last: /api/v1/notifications?page=80&limit=25
                  next: /api/v1/notifications?page=2&limit=25
                  prev: null
    head:
      summary: Check notifications collection availability
      operationId: head-notifications
      tags:
        - notifications
      parameters: *a113
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a notifications record (fake — not persisted)
      operationId: create-notifications
      tags:
        - notifications
      requestBody:
        required: true
        content:
          application/json:
            schema: &a117
              $ref: "#/components/schemas/NotificationsRecordInput"
            example: &a118
              userId: 241
              type: system
              title: System notification
              body: Suffragium avarus ager confero.
              isRead: true
              link: null
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a114
              example: *a115
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/notifications/{id}:
    get:
      summary: Get one notifications record by id
      operationId: get-notifications-by-id
      tags:
        - notifications
      parameters: &a116
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a114
              example: *a115
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a notifications record exists
      operationId: head-notifications-by-id
      tags:
        - notifications
      parameters: *a116
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a notifications record (fake — not persisted)
      operationId: replace-notifications
      tags:
        - notifications
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a117
            example: *a118
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a114
              example: *a115
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a notifications record (fake — not persisted)
      operationId: patch-notifications
      tags:
        - notifications
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NotificationsRecordPatch"
            example: *a118
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a114
              example: *a115
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a notifications record (fake — not persisted)
      operationId: delete-notifications
      tags:
        - notifications
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/conversations:
    get:
      summary: List conversations
      operationId: list-conversations
      tags:
        - conversations
      parameters: &a119
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a120
                      $ref: "#/components/schemas/ConversationsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a121
                    id: 1
                    title: Music Lovers 91
                    isGroup: true
                    createdAt: 2025-07-24T08:14:40.405Z
                    updatedAt: 2026-03-09T06:13:46.627Z
                meta:
                  total: 200
                  page: 1
                  limit: 25
                  totalPages: 8
                links:
                  self: /api/v1/conversations?page=1&limit=25
                  first: /api/v1/conversations?page=1&limit=25
                  last: /api/v1/conversations?page=8&limit=25
                  next: /api/v1/conversations?page=2&limit=25
                  prev: null
    head:
      summary: Check conversations collection availability
      operationId: head-conversations
      tags:
        - conversations
      parameters: *a119
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a conversations record (fake — not persisted)
      operationId: create-conversations
      tags:
        - conversations
      requestBody:
        required: true
        content:
          application/json:
            schema: &a123
              $ref: "#/components/schemas/ConversationsRecordInput"
            example: &a124
              title: Music Lovers 91
              isGroup: true
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a120
              example: *a121
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/conversations/{id}:
    get:
      summary: Get one conversations record by id
      operationId: get-conversations-by-id
      tags:
        - conversations
      parameters: &a122
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a120
              example: *a121
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a conversations record exists
      operationId: head-conversations-by-id
      tags:
        - conversations
      parameters: *a122
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a conversations record (fake — not persisted)
      operationId: replace-conversations
      tags:
        - conversations
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a123
            example: *a124
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a120
              example: *a121
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a conversations record (fake — not persisted)
      operationId: patch-conversations
      tags:
        - conversations
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ConversationsRecordPatch"
            example: *a124
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a120
              example: *a121
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a conversations record (fake — not persisted)
      operationId: delete-conversations
      tags:
        - conversations
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/messages:
    get:
      summary: List messages
      operationId: list-messages
      tags:
        - messages
      parameters: &a125
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a126
                      $ref: "#/components/schemas/MessagesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a127
                    id: 1
                    conversationId: 1
                    userId: 183
                    body: Adsidue suadeo valeo natus tabesco vehemens tollo quod. Vado depereo
                      concido neque tyrannus aro qui cohaero. Sursum caelum
                      speculum curto copiose cribro dapifer denuncio virtus.
                    isEdited: false
                    createdAt: 2025-08-05T11:46:41.970Z
                    updatedAt: 2025-08-05T11:46:41.970Z
                meta:
                  total: 3602
                  page: 1
                  limit: 25
                  totalPages: 145
                links:
                  self: /api/v1/messages?page=1&limit=25
                  first: /api/v1/messages?page=1&limit=25
                  last: /api/v1/messages?page=145&limit=25
                  next: /api/v1/messages?page=2&limit=25
                  prev: null
    head:
      summary: Check messages collection availability
      operationId: head-messages
      tags:
        - messages
      parameters: *a125
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a messages record (fake — not persisted)
      operationId: create-messages
      tags:
        - messages
      requestBody:
        required: true
        content:
          application/json:
            schema: &a129
              $ref: "#/components/schemas/MessagesRecordInput"
            example: &a130
              conversationId: 1
              userId: 183
              body: Adsidue suadeo valeo natus tabesco vehemens tollo quod. Vado depereo
                concido neque tyrannus aro qui cohaero. Sursum caelum speculum
                curto copiose cribro dapifer denuncio virtus.
              isEdited: false
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a126
              example: *a127
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/messages/{id}:
    get:
      summary: Get one messages record by id
      operationId: get-messages-by-id
      tags:
        - messages
      parameters: &a128
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a126
              example: *a127
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a messages record exists
      operationId: head-messages-by-id
      tags:
        - messages
      parameters: *a128
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a messages record (fake — not persisted)
      operationId: replace-messages
      tags:
        - messages
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a129
            example: *a130
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a126
              example: *a127
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a messages record (fake — not persisted)
      operationId: patch-messages
      tags:
        - messages
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/MessagesRecordPatch"
            example: *a130
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a126
              example: *a127
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a messages record (fake — not persisted)
      operationId: delete-messages
      tags:
        - messages
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/activities:
    get:
      summary: List activities
      operationId: list-activities
      tags:
        - activities
      parameters: &a131
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a132
                      $ref: "#/components/schemas/ActivitiesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a133
                    id: 1
                    userId: 15
                    verb: shared
                    targetType: restaurant
                    targetId: 9
                    createdAt: 2026-02-03T09:24:31.539Z
                meta:
                  total: 3000
                  page: 1
                  limit: 25
                  totalPages: 120
                links:
                  self: /api/v1/activities?page=1&limit=25
                  first: /api/v1/activities?page=1&limit=25
                  last: /api/v1/activities?page=120&limit=25
                  next: /api/v1/activities?page=2&limit=25
                  prev: null
    head:
      summary: Check activities collection availability
      operationId: head-activities
      tags:
        - activities
      parameters: *a131
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a activities record (fake — not persisted)
      operationId: create-activities
      tags:
        - activities
      requestBody:
        required: true
        content:
          application/json:
            schema: &a135
              $ref: "#/components/schemas/ActivitiesRecordInput"
            example: &a136
              userId: 15
              verb: shared
              targetType: restaurant
              targetId: 9
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a132
              example: *a133
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/activities/{id}:
    get:
      summary: Get one activities record by id
      operationId: get-activities-by-id
      tags:
        - activities
      parameters: &a134
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a132
              example: *a133
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a activities record exists
      operationId: head-activities-by-id
      tags:
        - activities
      parameters: *a134
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a activities record (fake — not persisted)
      operationId: replace-activities
      tags:
        - activities
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a135
            example: *a136
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a132
              example: *a133
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a activities record (fake — not persisted)
      operationId: patch-activities
      tags:
        - activities
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ActivitiesRecordPatch"
            example: *a136
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a132
              example: *a133
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a activities record (fake — not persisted)
      operationId: delete-activities
      tags:
        - activities
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/attachments:
    get:
      summary: List attachments
      operationId: list-attachments
      tags:
        - attachments
      parameters: &a137
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a138
                      $ref: "#/components/schemas/AttachmentsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a139
                    id: 1
                    userId: 87
                    targetType: comment
                    targetId: 419
                    url: https://picsum.photos/seed/attachment-1/600/600
                    mimeType: image/webp
                    sizeBytes: 22312530
                    createdAt: 2025-07-07T05:17:13.570Z
                meta:
                  total: 800
                  page: 1
                  limit: 25
                  totalPages: 32
                links:
                  self: /api/v1/attachments?page=1&limit=25
                  first: /api/v1/attachments?page=1&limit=25
                  last: /api/v1/attachments?page=32&limit=25
                  next: /api/v1/attachments?page=2&limit=25
                  prev: null
    head:
      summary: Check attachments collection availability
      operationId: head-attachments
      tags:
        - attachments
      parameters: *a137
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a attachments record (fake — not persisted)
      operationId: create-attachments
      tags:
        - attachments
      requestBody:
        required: true
        content:
          application/json:
            schema: &a141
              $ref: "#/components/schemas/AttachmentsRecordInput"
            example: &a142
              userId: 87
              targetType: comment
              targetId: 419
              url: https://picsum.photos/seed/attachment-1/600/600
              mimeType: image/webp
              sizeBytes: 22312530
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a138
              example: *a139
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/attachments/{id}:
    get:
      summary: Get one attachments record by id
      operationId: get-attachments-by-id
      tags:
        - attachments
      parameters: &a140
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a138
              example: *a139
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a attachments record exists
      operationId: head-attachments-by-id
      tags:
        - attachments
      parameters: *a140
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a attachments record (fake — not persisted)
      operationId: replace-attachments
      tags:
        - attachments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a141
            example: *a142
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a138
              example: *a139
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a attachments record (fake — not persisted)
      operationId: patch-attachments
      tags:
        - attachments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AttachmentsRecordPatch"
            example: *a142
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a138
              example: *a139
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a attachments record (fake — not persisted)
      operationId: delete-attachments
      tags:
        - attachments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/hashtags:
    get:
      summary: List hashtags
      operationId: list-hashtags
      tags:
        - hashtags
      parameters: &a143
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a144
                      $ref: "#/components/schemas/HashtagsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a145
                    id: 1
                    tag: design
                    useCount: 4906
                meta:
                  total: 100
                  page: 1
                  limit: 25
                  totalPages: 4
                links:
                  self: /api/v1/hashtags?page=1&limit=25
                  first: /api/v1/hashtags?page=1&limit=25
                  last: /api/v1/hashtags?page=4&limit=25
                  next: /api/v1/hashtags?page=2&limit=25
                  prev: null
    head:
      summary: Check hashtags collection availability
      operationId: head-hashtags
      tags:
        - hashtags
      parameters: *a143
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a hashtags record (fake — not persisted)
      operationId: create-hashtags
      tags:
        - hashtags
      requestBody:
        required: true
        content:
          application/json:
            schema: &a147
              $ref: "#/components/schemas/HashtagsRecordInput"
            example: &a148
              tag: design
              useCount: 4906
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a144
              example: *a145
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/hashtags/{id}:
    get:
      summary: Get one hashtags record by id
      operationId: get-hashtags-by-id
      tags:
        - hashtags
      parameters: &a146
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a144
              example: *a145
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a hashtags record exists
      operationId: head-hashtags-by-id
      tags:
        - hashtags
      parameters: *a146
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a hashtags record (fake — not persisted)
      operationId: replace-hashtags
      tags:
        - hashtags
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a147
            example: *a148
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a144
              example: *a145
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a hashtags record (fake — not persisted)
      operationId: patch-hashtags
      tags:
        - hashtags
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/HashtagsRecordPatch"
            example: *a148
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a144
              example: *a145
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a hashtags record (fake — not persisted)
      operationId: delete-hashtags
      tags:
        - hashtags
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/groups:
    get:
      summary: List groups
      operationId: list-groups
      tags:
        - groups
      parameters: &a149
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a150
                      $ref: "#/components/schemas/GroupsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a151
                    id: 1
                    name: Local Designers
                    slug: local-designers
                    description: Strenuus conor creo bene cattus desidero taedium aranea.
                    memberCount: 14
                    isPublic: false
                    ownerUserId: 153
                    createdAt: 2026-03-29T10:21:36.323Z
                    updatedAt: 2026-04-20T15:06:59.949Z
                meta:
                  total: 80
                  page: 1
                  limit: 25
                  totalPages: 4
                links:
                  self: /api/v1/groups?page=1&limit=25
                  first: /api/v1/groups?page=1&limit=25
                  last: /api/v1/groups?page=4&limit=25
                  next: /api/v1/groups?page=2&limit=25
                  prev: null
    head:
      summary: Check groups collection availability
      operationId: head-groups
      tags:
        - groups
      parameters: *a149
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a groups record (fake — not persisted)
      operationId: create-groups
      tags:
        - groups
      requestBody:
        required: true
        content:
          application/json:
            schema: &a153
              $ref: "#/components/schemas/GroupsRecordInput"
            example: &a154
              name: Local Designers
              slug: local-designers
              description: Strenuus conor creo bene cattus desidero taedium aranea.
              memberCount: 14
              isPublic: false
              ownerUserId: 153
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a150
              example: *a151
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/groups/{id}:
    get:
      summary: Get one groups record by id
      operationId: get-groups-by-id
      tags:
        - groups
      parameters: &a152
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a150
              example: *a151
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a groups record exists
      operationId: head-groups-by-id
      tags:
        - groups
      parameters: *a152
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a groups record (fake — not persisted)
      operationId: replace-groups
      tags:
        - groups
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a153
            example: *a154
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a150
              example: *a151
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a groups record (fake — not persisted)
      operationId: patch-groups
      tags:
        - groups
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GroupsRecordPatch"
            example: *a154
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a150
              example: *a151
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a groups record (fake — not persisted)
      operationId: delete-groups
      tags:
        - groups
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/group-members:
    get:
      summary: List group-members
      operationId: list-group-members
      tags:
        - group-members
      parameters: &a155
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a156
                      $ref: "#/components/schemas/GroupMembersRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a157
                    id: 1
                    groupId: 1
                    userId: 153
                    role: owner
                    joinedAt: 2025-01-06T10:31:34.951Z
                meta:
                  total: 783
                  page: 1
                  limit: 25
                  totalPages: 32
                links:
                  self: /api/v1/group-members?page=1&limit=25
                  first: /api/v1/group-members?page=1&limit=25
                  last: /api/v1/group-members?page=32&limit=25
                  next: /api/v1/group-members?page=2&limit=25
                  prev: null
    head:
      summary: Check group-members collection availability
      operationId: head-group-members
      tags:
        - group-members
      parameters: *a155
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a group-members record (fake — not persisted)
      operationId: create-group-members
      tags:
        - group-members
      requestBody:
        required: true
        content:
          application/json:
            schema: &a159
              $ref: "#/components/schemas/GroupMembersRecordInput"
            example: &a160
              groupId: 1
              userId: 153
              role: owner
              joinedAt: 2025-01-06T10:31:34.951Z
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a156
              example: *a157
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/group-members/{id}:
    get:
      summary: Get one group-members record by id
      operationId: get-group-members-by-id
      tags:
        - group-members
      parameters: &a158
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a156
              example: *a157
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a group-members record exists
      operationId: head-group-members-by-id
      tags:
        - group-members
      parameters: *a158
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a group-members record (fake — not persisted)
      operationId: replace-group-members
      tags:
        - group-members
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a159
            example: *a160
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a156
              example: *a157
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a group-members record (fake — not persisted)
      operationId: patch-group-members
      tags:
        - group-members
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GroupMembersRecordPatch"
            example: *a160
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a156
              example: *a157
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a group-members record (fake — not persisted)
      operationId: delete-group-members
      tags:
        - group-members
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/stories:
    get:
      summary: List stories
      operationId: list-stories
      tags:
        - stories
      parameters: &a161
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a162
                      $ref: "#/components/schemas/StoriesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a163
                    id: 1
                    userId: 116
                    mediaUrl: https://picsum.photos/seed/story-1/600/1200
                    mediaType: image
                    caption: ""
                    viewCount: 822
                    expiresAt: 2025-12-18T02:16:24.486Z
                    createdAt: 2025-12-17T02:16:24.486Z
                meta:
                  total: 300
                  page: 1
                  limit: 25
                  totalPages: 12
                links:
                  self: /api/v1/stories?page=1&limit=25
                  first: /api/v1/stories?page=1&limit=25
                  last: /api/v1/stories?page=12&limit=25
                  next: /api/v1/stories?page=2&limit=25
                  prev: null
    head:
      summary: Check stories collection availability
      operationId: head-stories
      tags:
        - stories
      parameters: *a161
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a stories record (fake — not persisted)
      operationId: create-stories
      tags:
        - stories
      requestBody:
        required: true
        content:
          application/json:
            schema: &a165
              $ref: "#/components/schemas/StoriesRecordInput"
            example: &a166
              userId: 116
              mediaUrl: https://picsum.photos/seed/story-1/600/1200
              mediaType: image
              caption: ""
              viewCount: 822
              expiresAt: 2025-12-18T02:16:24.486Z
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a162
              example: *a163
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/stories/{id}:
    get:
      summary: Get one stories record by id
      operationId: get-stories-by-id
      tags:
        - stories
      parameters: &a164
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a162
              example: *a163
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a stories record exists
      operationId: head-stories-by-id
      tags:
        - stories
      parameters: *a164
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a stories record (fake — not persisted)
      operationId: replace-stories
      tags:
        - stories
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a165
            example: *a166
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a162
              example: *a163
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a stories record (fake — not persisted)
      operationId: patch-stories
      tags:
        - stories
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/StoriesRecordPatch"
            example: *a166
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a162
              example: *a163
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a stories record (fake — not persisted)
      operationId: delete-stories
      tags:
        - stories
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/events:
    get:
      summary: List events
      operationId: list-events
      tags:
        - events
      parameters: &a167
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a168
                      $ref: "#/components/schemas/EventsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a169
                    id: 1
                    title: Summit Networking Event 2026
                    slug: summit-networking-event-2026-1
                    description: Dolorem adduco vicinus arcesso caritas stella cito. Cupiditas vinco
                      creta esse aut infit decipio. Tantillus illo cras dolorem.
                    location: Miami, FL
                    isOnline: false
                    startAt: 2026-12-22T10:28:34.803Z
                    endAt: 2026-12-23T15:13:57.240Z
                    organizerUserId: 12
                    attendeeCount: 693
                    createdAt: 2026-04-26T13:46:42.818Z
                    updatedAt: 2026-05-20T03:42:20.660Z
                meta:
                  total: 150
                  page: 1
                  limit: 25
                  totalPages: 6
                links:
                  self: /api/v1/events?page=1&limit=25
                  first: /api/v1/events?page=1&limit=25
                  last: /api/v1/events?page=6&limit=25
                  next: /api/v1/events?page=2&limit=25
                  prev: null
    head:
      summary: Check events collection availability
      operationId: head-events
      tags:
        - events
      parameters: *a167
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a events record (fake — not persisted)
      operationId: create-events
      tags:
        - events
      requestBody:
        required: true
        content:
          application/json:
            schema: &a171
              $ref: "#/components/schemas/EventsRecordInput"
            example: &a172
              title: Summit Networking Event 2026
              slug: summit-networking-event-2026-1
              description: Dolorem adduco vicinus arcesso caritas stella cito. Cupiditas vinco
                creta esse aut infit decipio. Tantillus illo cras dolorem.
              location: Miami, FL
              isOnline: false
              startAt: 2026-12-22T10:28:34.803Z
              endAt: 2026-12-23T15:13:57.240Z
              organizerUserId: 12
              attendeeCount: 693
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a168
              example: *a169
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/events/{id}:
    get:
      summary: Get one events record by id
      operationId: get-events-by-id
      tags:
        - events
      parameters: &a170
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a168
              example: *a169
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a events record exists
      operationId: head-events-by-id
      tags:
        - events
      parameters: *a170
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a events record (fake — not persisted)
      operationId: replace-events
      tags:
        - events
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a171
            example: *a172
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a168
              example: *a169
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a events record (fake — not persisted)
      operationId: patch-events
      tags:
        - events
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EventsRecordPatch"
            example: *a172
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a168
              example: *a169
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a events record (fake — not persisted)
      operationId: delete-events
      tags:
        - events
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/event-rsvps:
    get:
      summary: List event-rsvps
      operationId: list-event-rsvps
      tags:
        - event-rsvps
      parameters: &a173
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a174
                      $ref: "#/components/schemas/EventRsvpsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a175
                    id: 1
                    eventId: 1
                    userId: 244
                    status: maybe
                    respondedAt: 2026-03-28T15:00:52.726Z
                meta:
                  total: 1378
                  page: 1
                  limit: 25
                  totalPages: 56
                links:
                  self: /api/v1/event-rsvps?page=1&limit=25
                  first: /api/v1/event-rsvps?page=1&limit=25
                  last: /api/v1/event-rsvps?page=56&limit=25
                  next: /api/v1/event-rsvps?page=2&limit=25
                  prev: null
    head:
      summary: Check event-rsvps collection availability
      operationId: head-event-rsvps
      tags:
        - event-rsvps
      parameters: *a173
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a event-rsvps record (fake — not persisted)
      operationId: create-event-rsvps
      tags:
        - event-rsvps
      requestBody:
        required: true
        content:
          application/json:
            schema: &a177
              $ref: "#/components/schemas/EventRsvpsRecordInput"
            example: &a178
              eventId: 1
              userId: 244
              status: maybe
              respondedAt: 2026-03-28T15:00:52.726Z
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a174
              example: *a175
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/event-rsvps/{id}:
    get:
      summary: Get one event-rsvps record by id
      operationId: get-event-rsvps-by-id
      tags:
        - event-rsvps
      parameters: &a176
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a174
              example: *a175
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a event-rsvps record exists
      operationId: head-event-rsvps-by-id
      tags:
        - event-rsvps
      parameters: *a176
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a event-rsvps record (fake — not persisted)
      operationId: replace-event-rsvps
      tags:
        - event-rsvps
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a177
            example: *a178
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a174
              example: *a175
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a event-rsvps record (fake — not persisted)
      operationId: patch-event-rsvps
      tags:
        - event-rsvps
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EventRsvpsRecordPatch"
            example: *a178
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a174
              example: *a175
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a event-rsvps record (fake — not persisted)
      operationId: delete-event-rsvps
      tags:
        - event-rsvps
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/brands:
    get:
      summary: List brands
      operationId: list-brands
      tags:
        - brands
      parameters: &a179
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a180
                      $ref: "#/components/schemas/BrandsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a181
                    id: 1
                    name: Beahan and Sons
                    slug: beahan-and-sons-1
                    description: Diverse systemic application
                    logoUrl: https://picsum.photos/seed/brand-1/200/200
                    website: https://example.com/brands/beahan-and-sons
                    foundedYear: 2023
                    headquartersCountryAlpha2: PE
                    createdAt: 2023-02-04T09:57:54.220Z
                meta:
                  total: 50
                  page: 1
                  limit: 25
                  totalPages: 2
                links:
                  self: /api/v1/brands?page=1&limit=25
                  first: /api/v1/brands?page=1&limit=25
                  last: /api/v1/brands?page=2&limit=25
                  next: /api/v1/brands?page=2&limit=25
                  prev: null
    head:
      summary: Check brands collection availability
      operationId: head-brands
      tags:
        - brands
      parameters: *a179
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a brands record (fake — not persisted)
      operationId: create-brands
      tags:
        - brands
      requestBody:
        required: true
        content:
          application/json:
            schema: &a183
              $ref: "#/components/schemas/BrandsRecordInput"
            example: &a184
              name: Beahan and Sons
              slug: beahan-and-sons-1
              description: Diverse systemic application
              logoUrl: https://picsum.photos/seed/brand-1/200/200
              website: https://example.com/brands/beahan-and-sons
              foundedYear: 2023
              headquartersCountryAlpha2: PE
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a180
              example: *a181
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/brands/{id}:
    get:
      summary: Get one brands record by id
      operationId: get-brands-by-id
      tags:
        - brands
      parameters: &a182
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a180
              example: *a181
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a brands record exists
      operationId: head-brands-by-id
      tags:
        - brands
      parameters: *a182
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a brands record (fake — not persisted)
      operationId: replace-brands
      tags:
        - brands
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a183
            example: *a184
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a180
              example: *a181
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a brands record (fake — not persisted)
      operationId: patch-brands
      tags:
        - brands
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/BrandsRecordPatch"
            example: *a184
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a180
              example: *a181
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a brands record (fake — not persisted)
      operationId: delete-brands
      tags:
        - brands
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/stores:
    get:
      summary: List stores
      operationId: list-stores
      tags:
        - stores
      parameters: &a185
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a186
                      $ref: "#/components/schemas/StoresRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a187
                    id: 1
                    name: Gleason, Lehner and Bradtke
                    slug: gleason-lehner-and-bradtke-1
                    description: Compatible optimizing moderator
                    address: 1730 The Spinney
                    city: Edgardofurt
                    region: Georgia
                    countryAlpha2: ID
                    postalCode: 82959-1292
                    phone: +1 202-555-0100 ext 1
                    website: https://example.com/stores/gleason-lehner-and-bradtke
                    hours: Mon-Sat 8am-8pm, Sun 10am-6pm
                    createdAt: 2022-08-06T06:51:30.132Z
                meta:
                  total: 30
                  page: 1
                  limit: 25
                  totalPages: 2
                links:
                  self: /api/v1/stores?page=1&limit=25
                  first: /api/v1/stores?page=1&limit=25
                  last: /api/v1/stores?page=2&limit=25
                  next: /api/v1/stores?page=2&limit=25
                  prev: null
    head:
      summary: Check stores collection availability
      operationId: head-stores
      tags:
        - stores
      parameters: *a185
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a stores record (fake — not persisted)
      operationId: create-stores
      tags:
        - stores
      requestBody:
        required: true
        content:
          application/json:
            schema: &a189
              $ref: "#/components/schemas/StoresRecordInput"
            example: &a190
              name: Gleason, Lehner and Bradtke
              slug: gleason-lehner-and-bradtke-1
              description: Compatible optimizing moderator
              address: 1730 The Spinney
              city: Edgardofurt
              region: Georgia
              countryAlpha2: ID
              postalCode: 82959-1292
              phone: +1 202-555-0100 ext 1
              website: https://example.com/stores/gleason-lehner-and-bradtke
              hours: Mon-Sat 8am-8pm, Sun 10am-6pm
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a186
              example: *a187
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/stores/{id}:
    get:
      summary: Get one stores record by id
      operationId: get-stores-by-id
      tags:
        - stores
      parameters: &a188
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a186
              example: *a187
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a stores record exists
      operationId: head-stores-by-id
      tags:
        - stores
      parameters: *a188
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a stores record (fake — not persisted)
      operationId: replace-stores
      tags:
        - stores
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a189
            example: *a190
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a186
              example: *a187
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a stores record (fake — not persisted)
      operationId: patch-stores
      tags:
        - stores
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/StoresRecordPatch"
            example: *a190
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a186
              example: *a187
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a stores record (fake — not persisted)
      operationId: delete-stores
      tags:
        - stores
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/addresses:
    get:
      summary: List addresses
      operationId: list-addresses
      tags:
        - addresses
      parameters: &a191
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a192
                      $ref: "#/components/schemas/AddressesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a193
                    id: 1
                    userId: 1
                    label: home
                    recipient: Craig Sauer
                    street1: 8897 Smith Estate
                    street2: null
                    city: Elisabethberg
                    region: California
                    postalCode: 07860-1214
                    countryAlpha2: NL
                    isDefault: true
                    createdAt: 2026-03-01T07:54:12.590Z
                meta:
                  total: 345
                  page: 1
                  limit: 25
                  totalPages: 14
                links:
                  self: /api/v1/addresses?page=1&limit=25
                  first: /api/v1/addresses?page=1&limit=25
                  last: /api/v1/addresses?page=14&limit=25
                  next: /api/v1/addresses?page=2&limit=25
                  prev: null
    head:
      summary: Check addresses collection availability
      operationId: head-addresses
      tags:
        - addresses
      parameters: *a191
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a addresses record (fake — not persisted)
      operationId: create-addresses
      tags:
        - addresses
      requestBody:
        required: true
        content:
          application/json:
            schema: &a195
              $ref: "#/components/schemas/AddressesRecordInput"
            example: &a196
              userId: 1
              label: home
              recipient: Craig Sauer
              street1: 8897 Smith Estate
              street2: null
              city: Elisabethberg
              region: California
              postalCode: 07860-1214
              countryAlpha2: NL
              isDefault: true
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a192
              example: *a193
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/addresses/{id}:
    get:
      summary: Get one addresses record by id
      operationId: get-addresses-by-id
      tags:
        - addresses
      parameters: &a194
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a192
              example: *a193
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a addresses record exists
      operationId: head-addresses-by-id
      tags:
        - addresses
      parameters: *a194
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a addresses record (fake — not persisted)
      operationId: replace-addresses
      tags:
        - addresses
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a195
            example: *a196
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a192
              example: *a193
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a addresses record (fake — not persisted)
      operationId: patch-addresses
      tags:
        - addresses
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddressesRecordPatch"
            example: *a196
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a192
              example: *a193
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a addresses record (fake — not persisted)
      operationId: delete-addresses
      tags:
        - addresses
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/coupons:
    get:
      summary: List coupons
      operationId: list-coupons
      tags:
        - coupons
      parameters: &a197
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a198
                      $ref: "#/components/schemas/CouponsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a199
                    id: 1
                    code: 0V9WU1MP5
                    discountType: percent
                    value: 37
                    minOrderAmount: null
                    maxRedemptions: 705
                    redemptionCount: 459
                    validFrom: 2025-06-06T05:46:20.110Z
                    validUntil: 2026-12-19T09:53:50.275Z
                    isActive: true
                    createdAt: 2025-06-04T22:00:40.253Z
                meta:
                  total: 40
                  page: 1
                  limit: 25
                  totalPages: 2
                links:
                  self: /api/v1/coupons?page=1&limit=25
                  first: /api/v1/coupons?page=1&limit=25
                  last: /api/v1/coupons?page=2&limit=25
                  next: /api/v1/coupons?page=2&limit=25
                  prev: null
    head:
      summary: Check coupons collection availability
      operationId: head-coupons
      tags:
        - coupons
      parameters: *a197
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a coupons record (fake — not persisted)
      operationId: create-coupons
      tags:
        - coupons
      requestBody:
        required: true
        content:
          application/json:
            schema: &a201
              $ref: "#/components/schemas/CouponsRecordInput"
            example: &a202
              code: 0V9WU1MP5
              discountType: percent
              value: 37
              minOrderAmount: null
              maxRedemptions: 705
              redemptionCount: 459
              validFrom: 2025-06-06T05:46:20.110Z
              validUntil: 2026-12-19T09:53:50.275Z
              isActive: true
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a198
              example: *a199
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/coupons/{id}:
    get:
      summary: Get one coupons record by id
      operationId: get-coupons-by-id
      tags:
        - coupons
      parameters: &a200
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a198
              example: *a199
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a coupons record exists
      operationId: head-coupons-by-id
      tags:
        - coupons
      parameters: *a200
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a coupons record (fake — not persisted)
      operationId: replace-coupons
      tags:
        - coupons
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a201
            example: *a202
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a198
              example: *a199
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a coupons record (fake — not persisted)
      operationId: patch-coupons
      tags:
        - coupons
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CouponsRecordPatch"
            example: *a202
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a198
              example: *a199
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a coupons record (fake — not persisted)
      operationId: delete-coupons
      tags:
        - coupons
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/product-reviews:
    get:
      summary: List product-reviews
      operationId: list-product-reviews
      tags:
        - product-reviews
      parameters: &a203
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a204
                      $ref: "#/components/schemas/ProductReviewsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a205
                    id: 1
                    productId: 1
                    userId: 79
                    rating: 5
                    title: Casus vapulus despecto texo vomer a audacia decretum.
                    body: Volutabrum debeo vociferor vorago credo cribro alter defungo.
                    isVerified: true
                    helpfulCount: 164
                    createdAt: 2025-12-27T04:04:42.578Z
                    updatedAt: 2026-05-05T05:45:41.060Z
                meta:
                  total: 925
                  page: 1
                  limit: 25
                  totalPages: 37
                links:
                  self: /api/v1/product-reviews?page=1&limit=25
                  first: /api/v1/product-reviews?page=1&limit=25
                  last: /api/v1/product-reviews?page=37&limit=25
                  next: /api/v1/product-reviews?page=2&limit=25
                  prev: null
    head:
      summary: Check product-reviews collection availability
      operationId: head-product-reviews
      tags:
        - product-reviews
      parameters: *a203
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a product-reviews record (fake — not persisted)
      operationId: create-product-reviews
      tags:
        - product-reviews
      requestBody:
        required: true
        content:
          application/json:
            schema: &a207
              $ref: "#/components/schemas/ProductReviewsRecordInput"
            example: &a208
              productId: 1
              userId: 79
              rating: 5
              title: Casus vapulus despecto texo vomer a audacia decretum.
              body: Volutabrum debeo vociferor vorago credo cribro alter defungo.
              isVerified: true
              helpfulCount: 164
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a204
              example: *a205
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/product-reviews/{id}:
    get:
      summary: Get one product-reviews record by id
      operationId: get-product-reviews-by-id
      tags:
        - product-reviews
      parameters: &a206
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a204
              example: *a205
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a product-reviews record exists
      operationId: head-product-reviews-by-id
      tags:
        - product-reviews
      parameters: *a206
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a product-reviews record (fake — not persisted)
      operationId: replace-product-reviews
      tags:
        - product-reviews
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a207
            example: *a208
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a204
              example: *a205
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a product-reviews record (fake — not persisted)
      operationId: patch-product-reviews
      tags:
        - product-reviews
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ProductReviewsRecordPatch"
            example: *a208
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a204
              example: *a205
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a product-reviews record (fake — not persisted)
      operationId: delete-product-reviews
      tags:
        - product-reviews
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/wishlists:
    get:
      summary: List wishlists
      operationId: list-wishlists
      tags:
        - wishlists
      parameters: &a209
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a211
                      $ref: "#/components/schemas/WishlistsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a212
                    id: 1
                    userId: 1
                    name: Summer Picks
                    isPublic: true
                    productIds: &a210
                      - 47
                      - 86
                      - 28
                      - 137
                      - 59
                      - 95
                      - 111
                      - 135
                      - 158
                      - 174
                    createdAt: 2026-04-04T17:14:46.340Z
                    updatedAt: 2026-04-13T03:20:44.226Z
                meta:
                  total: 239
                  page: 1
                  limit: 25
                  totalPages: 10
                links:
                  self: /api/v1/wishlists?page=1&limit=25
                  first: /api/v1/wishlists?page=1&limit=25
                  last: /api/v1/wishlists?page=10&limit=25
                  next: /api/v1/wishlists?page=2&limit=25
                  prev: null
    head:
      summary: Check wishlists collection availability
      operationId: head-wishlists
      tags:
        - wishlists
      parameters: *a209
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a wishlists record (fake — not persisted)
      operationId: create-wishlists
      tags:
        - wishlists
      requestBody:
        required: true
        content:
          application/json:
            schema: &a214
              $ref: "#/components/schemas/WishlistsRecordInput"
            example: &a215
              userId: 1
              name: Summer Picks
              isPublic: true
              productIds: *a210
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a211
              example: *a212
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/wishlists/{id}:
    get:
      summary: Get one wishlists record by id
      operationId: get-wishlists-by-id
      tags:
        - wishlists
      parameters: &a213
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a211
              example: *a212
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a wishlists record exists
      operationId: head-wishlists-by-id
      tags:
        - wishlists
      parameters: *a213
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a wishlists record (fake — not persisted)
      operationId: replace-wishlists
      tags:
        - wishlists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a214
            example: *a215
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a211
              example: *a212
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a wishlists record (fake — not persisted)
      operationId: patch-wishlists
      tags:
        - wishlists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WishlistsRecordPatch"
            example: *a215
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a211
              example: *a212
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a wishlists record (fake — not persisted)
      operationId: delete-wishlists
      tags:
        - wishlists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/carts:
    get:
      summary: List carts
      operationId: list-carts
      tags:
        - carts
      parameters: &a216
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a217
                      $ref: "#/components/schemas/CartsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a218
                    id: 1
                    userId: 2
                    currency: USD
                    subtotal: 997.23
                    itemCount: 9
                    updatedAt: 2025-07-02T05:16:37.152Z
                    createdAt: 2024-09-13T04:12:14.210Z
                meta:
                  total: 140
                  page: 1
                  limit: 25
                  totalPages: 6
                links:
                  self: /api/v1/carts?page=1&limit=25
                  first: /api/v1/carts?page=1&limit=25
                  last: /api/v1/carts?page=6&limit=25
                  next: /api/v1/carts?page=2&limit=25
                  prev: null
    head:
      summary: Check carts collection availability
      operationId: head-carts
      tags:
        - carts
      parameters: *a216
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a carts record (fake — not persisted)
      operationId: create-carts
      tags:
        - carts
      requestBody:
        required: true
        content:
          application/json:
            schema: &a220
              $ref: "#/components/schemas/CartsRecordInput"
            example: &a221
              userId: 2
              currency: USD
              subtotal: 997.23
              itemCount: 9
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a217
              example: *a218
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/carts/{id}:
    get:
      summary: Get one carts record by id
      operationId: get-carts-by-id
      tags:
        - carts
      parameters: &a219
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a217
              example: *a218
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a carts record exists
      operationId: head-carts-by-id
      tags:
        - carts
      parameters: *a219
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a carts record (fake — not persisted)
      operationId: replace-carts
      tags:
        - carts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a220
            example: *a221
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a217
              example: *a218
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a carts record (fake — not persisted)
      operationId: patch-carts
      tags:
        - carts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CartsRecordPatch"
            example: *a221
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a217
              example: *a218
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a carts record (fake — not persisted)
      operationId: delete-carts
      tags:
        - carts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/cart-items:
    get:
      summary: List cart-items
      operationId: list-cart-items
      tags:
        - cart-items
      parameters: &a222
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a223
                      $ref: "#/components/schemas/CartItemsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a224
                    id: 1
                    cartId: 1
                    productId: 177
                    quantity: 2
                    unitPrice: 47.15
                    addedAt: 2026-03-07T06:07:41.991Z
                meta:
                  total: 426
                  page: 1
                  limit: 25
                  totalPages: 18
                links:
                  self: /api/v1/cart-items?page=1&limit=25
                  first: /api/v1/cart-items?page=1&limit=25
                  last: /api/v1/cart-items?page=18&limit=25
                  next: /api/v1/cart-items?page=2&limit=25
                  prev: null
    head:
      summary: Check cart-items collection availability
      operationId: head-cart-items
      tags:
        - cart-items
      parameters: *a222
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a cart-items record (fake — not persisted)
      operationId: create-cart-items
      tags:
        - cart-items
      requestBody:
        required: true
        content:
          application/json:
            schema: &a226
              $ref: "#/components/schemas/CartItemsRecordInput"
            example: &a227
              cartId: 1
              productId: 177
              quantity: 2
              unitPrice: 47.15
              addedAt: 2026-03-07T06:07:41.991Z
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a223
              example: *a224
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/cart-items/{id}:
    get:
      summary: Get one cart-items record by id
      operationId: get-cart-items-by-id
      tags:
        - cart-items
      parameters: &a225
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a223
              example: *a224
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a cart-items record exists
      operationId: head-cart-items-by-id
      tags:
        - cart-items
      parameters: *a225
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a cart-items record (fake — not persisted)
      operationId: replace-cart-items
      tags:
        - cart-items
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a226
            example: *a227
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a223
              example: *a224
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a cart-items record (fake — not persisted)
      operationId: patch-cart-items
      tags:
        - cart-items
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CartItemsRecordPatch"
            example: *a227
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a223
              example: *a224
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a cart-items record (fake — not persisted)
      operationId: delete-cart-items
      tags:
        - cart-items
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/shipments:
    get:
      summary: List shipments
      operationId: list-shipments
      tags:
        - shipments
      parameters: &a228
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a229
                      $ref: "#/components/schemas/ShipmentsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a230
                    id: 1
                    orderId: 1
                    carrier: dhl
                    trackingNumber: QYO4NLF3DY9JUKDJ
                    status: out_for_delivery
                    shippedAt: 2025-08-02T11:26:14.340Z
                    deliveredAt: null
                    estimatedDeliveryAt: 2025-08-09T14:45:47.617Z
                    createdAt: 2025-08-02T11:26:14.340Z
                meta:
                  total: 531
                  page: 1
                  limit: 25
                  totalPages: 22
                links:
                  self: /api/v1/shipments?page=1&limit=25
                  first: /api/v1/shipments?page=1&limit=25
                  last: /api/v1/shipments?page=22&limit=25
                  next: /api/v1/shipments?page=2&limit=25
                  prev: null
    head:
      summary: Check shipments collection availability
      operationId: head-shipments
      tags:
        - shipments
      parameters: *a228
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a shipments record (fake — not persisted)
      operationId: create-shipments
      tags:
        - shipments
      requestBody:
        required: true
        content:
          application/json:
            schema: &a232
              $ref: "#/components/schemas/ShipmentsRecordInput"
            example: &a233
              orderId: 1
              carrier: dhl
              trackingNumber: QYO4NLF3DY9JUKDJ
              status: out_for_delivery
              shippedAt: 2025-08-02T11:26:14.340Z
              deliveredAt: null
              estimatedDeliveryAt: 2025-08-09T14:45:47.617Z
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a229
              example: *a230
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/shipments/{id}:
    get:
      summary: Get one shipments record by id
      operationId: get-shipments-by-id
      tags:
        - shipments
      parameters: &a231
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a229
              example: *a230
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a shipments record exists
      operationId: head-shipments-by-id
      tags:
        - shipments
      parameters: *a231
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a shipments record (fake — not persisted)
      operationId: replace-shipments
      tags:
        - shipments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a232
            example: *a233
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a229
              example: *a230
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a shipments record (fake — not persisted)
      operationId: patch-shipments
      tags:
        - shipments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ShipmentsRecordPatch"
            example: *a233
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a229
              example: *a230
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a shipments record (fake — not persisted)
      operationId: delete-shipments
      tags:
        - shipments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/destinations:
    get:
      summary: List destinations
      operationId: list-destinations
      tags:
        - destinations
      parameters: &a234
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a235
                      $ref: "#/components/schemas/DestinationsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a236
                    id: 1
                    name: Singapore
                    slug: singapore-1
                    countryAlpha2: SG
                    description: A must-visit for its natural wonders, welcoming locals, and unique
                      character.
                    imageUrl: https://picsum.photos/seed/dest-1/800/600
                    popularity: 98
                meta:
                  total: 80
                  page: 1
                  limit: 25
                  totalPages: 4
                links:
                  self: /api/v1/destinations?page=1&limit=25
                  first: /api/v1/destinations?page=1&limit=25
                  last: /api/v1/destinations?page=4&limit=25
                  next: /api/v1/destinations?page=2&limit=25
                  prev: null
    head:
      summary: Check destinations collection availability
      operationId: head-destinations
      tags:
        - destinations
      parameters: *a234
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a destinations record (fake — not persisted)
      operationId: create-destinations
      tags:
        - destinations
      requestBody:
        required: true
        content:
          application/json:
            schema: &a238
              $ref: "#/components/schemas/DestinationsRecordInput"
            example: &a239
              name: Singapore
              slug: singapore-1
              countryAlpha2: SG
              description: A must-visit for its natural wonders, welcoming locals, and unique
                character.
              imageUrl: https://picsum.photos/seed/dest-1/800/600
              popularity: 98
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a235
              example: *a236
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/destinations/{id}:
    get:
      summary: Get one destinations record by id
      operationId: get-destinations-by-id
      tags:
        - destinations
      parameters: &a237
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a235
              example: *a236
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a destinations record exists
      operationId: head-destinations-by-id
      tags:
        - destinations
      parameters: *a237
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a destinations record (fake — not persisted)
      operationId: replace-destinations
      tags:
        - destinations
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a238
            example: *a239
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a235
              example: *a236
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a destinations record (fake — not persisted)
      operationId: patch-destinations
      tags:
        - destinations
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DestinationsRecordPatch"
            example: *a239
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a235
              example: *a236
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a destinations record (fake — not persisted)
      operationId: delete-destinations
      tags:
        - destinations
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/flights:
    get:
      summary: List flights
      operationId: list-flights
      tags:
        - flights
      parameters: &a240
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a241
                      $ref: "#/components/schemas/FlightsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a242
                    id: 1
                    flightNumber: AF1294
                    airline: Air France
                    departureAirport: MAD
                    arrivalAirport: ICN
                    departureAt: 2025-05-22T11:23:57.954Z
                    arrivalAt: 2025-05-22T15:37:57.954Z
                    durationMinutes: 254
                    status: in_air
                    priceFrom: 772.03
                    currency: USD
                    createdAt: 2025-02-23T11:23:57.954Z
                meta:
                  total: 400
                  page: 1
                  limit: 25
                  totalPages: 16
                links:
                  self: /api/v1/flights?page=1&limit=25
                  first: /api/v1/flights?page=1&limit=25
                  last: /api/v1/flights?page=16&limit=25
                  next: /api/v1/flights?page=2&limit=25
                  prev: null
    head:
      summary: Check flights collection availability
      operationId: head-flights
      tags:
        - flights
      parameters: *a240
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a flights record (fake — not persisted)
      operationId: create-flights
      tags:
        - flights
      requestBody:
        required: true
        content:
          application/json:
            schema: &a244
              $ref: "#/components/schemas/FlightsRecordInput"
            example: &a245
              flightNumber: AF1294
              airline: Air France
              departureAirport: MAD
              arrivalAirport: ICN
              departureAt: 2025-05-22T11:23:57.954Z
              arrivalAt: 2025-05-22T15:37:57.954Z
              durationMinutes: 254
              status: in_air
              priceFrom: 772.03
              currency: USD
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a241
              example: *a242
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/flights/{id}:
    get:
      summary: Get one flights record by id
      operationId: get-flights-by-id
      tags:
        - flights
      parameters: &a243
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a241
              example: *a242
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a flights record exists
      operationId: head-flights-by-id
      tags:
        - flights
      parameters: *a243
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a flights record (fake — not persisted)
      operationId: replace-flights
      tags:
        - flights
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a244
            example: *a245
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a241
              example: *a242
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a flights record (fake — not persisted)
      operationId: patch-flights
      tags:
        - flights
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/FlightsRecordPatch"
            example: *a245
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a241
              example: *a242
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a flights record (fake — not persisted)
      operationId: delete-flights
      tags:
        - flights
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/hotels:
    get:
      summary: List hotels
      operationId: list-hotels
      tags:
        - hotels
      parameters: &a246
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a248
                      $ref: "#/components/schemas/HotelsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a249
                    id: 1
                    name: Same Lodge Beaumont
                    slug: same-lodge-beaumont-1
                    brand: Accor
                    countryAlpha2: AU
                    city: Beaumont
                    address: 783 Lakin Roads
                    latitude: 52.537448
                    longitude: 41.243524
                    starRating: 4
                    rating: 3.4
                    ratingCount: 3924
                    priceFromPerNight: 785.31
                    currency: CAD
                    amenities: &a247
                      - pet-friendly
                      - parking
                      - airport-shuttle
                      - bar
                    createdAt: 2025-03-21T01:28:31.055Z
                meta:
                  total: 150
                  page: 1
                  limit: 25
                  totalPages: 6
                links:
                  self: /api/v1/hotels?page=1&limit=25
                  first: /api/v1/hotels?page=1&limit=25
                  last: /api/v1/hotels?page=6&limit=25
                  next: /api/v1/hotels?page=2&limit=25
                  prev: null
    head:
      summary: Check hotels collection availability
      operationId: head-hotels
      tags:
        - hotels
      parameters: *a246
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a hotels record (fake — not persisted)
      operationId: create-hotels
      tags:
        - hotels
      requestBody:
        required: true
        content:
          application/json:
            schema: &a251
              $ref: "#/components/schemas/HotelsRecordInput"
            example: &a252
              name: Same Lodge Beaumont
              slug: same-lodge-beaumont-1
              brand: Accor
              countryAlpha2: AU
              city: Beaumont
              address: 783 Lakin Roads
              latitude: 52.537448
              longitude: 41.243524
              starRating: 4
              rating: 3.4
              ratingCount: 3924
              priceFromPerNight: 785.31
              currency: CAD
              amenities: *a247
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a248
              example: *a249
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/hotels/{id}:
    get:
      summary: Get one hotels record by id
      operationId: get-hotels-by-id
      tags:
        - hotels
      parameters: &a250
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a248
              example: *a249
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a hotels record exists
      operationId: head-hotels-by-id
      tags:
        - hotels
      parameters: *a250
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a hotels record (fake — not persisted)
      operationId: replace-hotels
      tags:
        - hotels
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a251
            example: *a252
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a248
              example: *a249
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a hotels record (fake — not persisted)
      operationId: patch-hotels
      tags:
        - hotels
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/HotelsRecordPatch"
            example: *a252
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a248
              example: *a249
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a hotels record (fake — not persisted)
      operationId: delete-hotels
      tags:
        - hotels
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/properties:
    get:
      summary: List properties
      operationId: list-properties
      tags:
        - properties
      parameters: &a253
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a254
                      $ref: "#/components/schemas/PropertiesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a255
                    id: 1
                    name: Asheville Villa
                    slug: asheville-villa-1
                    type: villa
                    countryAlpha2: CN
                    city: Asheville
                    address: 265 George Street
                    latitude: 8.16773
                    longitude: -78.851336
                    bedrooms: 3
                    bathrooms: 2
                    maxGuests: 8
                    pricePerNight: 786.38
                    currency: GBP
                    rating: 4.1
                    ratingCount: 1093
                    hostUserId: 30
                    createdAt: 2025-06-19T22:09:24.110Z
                    updatedAt: 2026-01-01T16:46:13.640Z
                meta:
                  total: 200
                  page: 1
                  limit: 25
                  totalPages: 8
                links:
                  self: /api/v1/properties?page=1&limit=25
                  first: /api/v1/properties?page=1&limit=25
                  last: /api/v1/properties?page=8&limit=25
                  next: /api/v1/properties?page=2&limit=25
                  prev: null
    head:
      summary: Check properties collection availability
      operationId: head-properties
      tags:
        - properties
      parameters: *a253
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a properties record (fake — not persisted)
      operationId: create-properties
      tags:
        - properties
      requestBody:
        required: true
        content:
          application/json:
            schema: &a257
              $ref: "#/components/schemas/PropertiesRecordInput"
            example: &a258
              name: Asheville Villa
              slug: asheville-villa-1
              type: villa
              countryAlpha2: CN
              city: Asheville
              address: 265 George Street
              latitude: 8.16773
              longitude: -78.851336
              bedrooms: 3
              bathrooms: 2
              maxGuests: 8
              pricePerNight: 786.38
              currency: GBP
              rating: 4.1
              ratingCount: 1093
              hostUserId: 30
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a254
              example: *a255
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/properties/{id}:
    get:
      summary: Get one properties record by id
      operationId: get-properties-by-id
      tags:
        - properties
      parameters: &a256
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a254
              example: *a255
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a properties record exists
      operationId: head-properties-by-id
      tags:
        - properties
      parameters: *a256
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a properties record (fake — not persisted)
      operationId: replace-properties
      tags:
        - properties
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a257
            example: *a258
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a254
              example: *a255
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a properties record (fake — not persisted)
      operationId: patch-properties
      tags:
        - properties
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PropertiesRecordPatch"
            example: *a258
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a254
              example: *a255
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a properties record (fake — not persisted)
      operationId: delete-properties
      tags:
        - properties
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/properties-saved:
    get:
      summary: List properties-saved
      operationId: list-properties-saved
      tags:
        - properties-saved
      parameters: &a259
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a260
                      $ref: "#/components/schemas/PropertiesSavedRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a261
                    id: 1
                    userId: 2
                    propertyId: 112
                    savedAt: 2025-10-15T16:32:11.870Z
                meta:
                  total: 378
                  page: 1
                  limit: 25
                  totalPages: 16
                links:
                  self: /api/v1/properties-saved?page=1&limit=25
                  first: /api/v1/properties-saved?page=1&limit=25
                  last: /api/v1/properties-saved?page=16&limit=25
                  next: /api/v1/properties-saved?page=2&limit=25
                  prev: null
    head:
      summary: Check properties-saved collection availability
      operationId: head-properties-saved
      tags:
        - properties-saved
      parameters: *a259
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a properties-saved record (fake — not persisted)
      operationId: create-properties-saved
      tags:
        - properties-saved
      requestBody:
        required: true
        content:
          application/json:
            schema: &a263
              $ref: "#/components/schemas/PropertiesSavedRecordInput"
            example: &a264
              userId: 2
              propertyId: 112
              savedAt: 2025-10-15T16:32:11.870Z
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a260
              example: *a261
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/properties-saved/{id}:
    get:
      summary: Get one properties-saved record by id
      operationId: get-properties-saved-by-id
      tags:
        - properties-saved
      parameters: &a262
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a260
              example: *a261
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a properties-saved record exists
      operationId: head-properties-saved-by-id
      tags:
        - properties-saved
      parameters: *a262
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a properties-saved record (fake — not persisted)
      operationId: replace-properties-saved
      tags:
        - properties-saved
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a263
            example: *a264
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a260
              example: *a261
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a properties-saved record (fake — not persisted)
      operationId: patch-properties-saved
      tags:
        - properties-saved
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PropertiesSavedRecordPatch"
            example: *a264
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a260
              example: *a261
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a properties-saved record (fake — not persisted)
      operationId: delete-properties-saved
      tags:
        - properties-saved
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/tickets:
    get:
      summary: List tickets
      operationId: list-tickets
      tags:
        - tickets
      parameters: &a265
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a266
                      $ref: "#/components/schemas/TicketsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a267
                    id: 1
                    eventName: Ultimate Zulauf Championship
                    venue: Daly City Convention Center
                    eventAt: 2027-05-02T21:27:11.496Z
                    type: standing
                    price: 626.11
                    currency: JPY
                    sectionCode: GA
                    seatCode: null
                    isSold: true
                    createdAt: 2027-04-07T21:27:11.496Z
                meta:
                  total: 300
                  page: 1
                  limit: 25
                  totalPages: 12
                links:
                  self: /api/v1/tickets?page=1&limit=25
                  first: /api/v1/tickets?page=1&limit=25
                  last: /api/v1/tickets?page=12&limit=25
                  next: /api/v1/tickets?page=2&limit=25
                  prev: null
    head:
      summary: Check tickets collection availability
      operationId: head-tickets
      tags:
        - tickets
      parameters: *a265
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a tickets record (fake — not persisted)
      operationId: create-tickets
      tags:
        - tickets
      requestBody:
        required: true
        content:
          application/json:
            schema: &a269
              $ref: "#/components/schemas/TicketsRecordInput"
            example: &a270
              eventName: Ultimate Zulauf Championship
              venue: Daly City Convention Center
              eventAt: 2027-05-02T21:27:11.496Z
              type: standing
              price: 626.11
              currency: JPY
              sectionCode: GA
              seatCode: null
              isSold: true
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a266
              example: *a267
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/tickets/{id}:
    get:
      summary: Get one tickets record by id
      operationId: get-tickets-by-id
      tags:
        - tickets
      parameters: &a268
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a266
              example: *a267
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a tickets record exists
      operationId: head-tickets-by-id
      tags:
        - tickets
      parameters: *a268
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a tickets record (fake — not persisted)
      operationId: replace-tickets
      tags:
        - tickets
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a269
            example: *a270
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a266
              example: *a267
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a tickets record (fake — not persisted)
      operationId: patch-tickets
      tags:
        - tickets
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TicketsRecordPatch"
            example: *a270
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a266
              example: *a267
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a tickets record (fake — not persisted)
      operationId: delete-tickets
      tags:
        - tickets
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/bookings:
    get:
      summary: List bookings
      operationId: list-bookings
      tags:
        - bookings
      parameters: &a271
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a272
                      $ref: "#/components/schemas/BookingsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a273
                    id: 1
                    userId: 96
                    kind: property
                    referenceId: 159
                    checkInAt: 2026-10-17T16:54:13.065Z
                    checkOutAt: 2026-10-20T16:54:13.065Z
                    status: cancelled
                    totalAmount: 4102.68
                    currency: CAD
                    createdAt: 2026-09-30T16:54:13.065Z
                meta:
                  total: 500
                  page: 1
                  limit: 25
                  totalPages: 20
                links:
                  self: /api/v1/bookings?page=1&limit=25
                  first: /api/v1/bookings?page=1&limit=25
                  last: /api/v1/bookings?page=20&limit=25
                  next: /api/v1/bookings?page=2&limit=25
                  prev: null
    head:
      summary: Check bookings collection availability
      operationId: head-bookings
      tags:
        - bookings
      parameters: *a271
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a bookings record (fake — not persisted)
      operationId: create-bookings
      tags:
        - bookings
      requestBody:
        required: true
        content:
          application/json:
            schema: &a275
              $ref: "#/components/schemas/BookingsRecordInput"
            example: &a276
              userId: 96
              kind: property
              referenceId: 159
              checkInAt: 2026-10-17T16:54:13.065Z
              checkOutAt: 2026-10-20T16:54:13.065Z
              status: cancelled
              totalAmount: 4102.68
              currency: CAD
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a272
              example: *a273
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/bookings/{id}:
    get:
      summary: Get one bookings record by id
      operationId: get-bookings-by-id
      tags:
        - bookings
      parameters: &a274
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a272
              example: *a273
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a bookings record exists
      operationId: head-bookings-by-id
      tags:
        - bookings
      parameters: *a274
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a bookings record (fake — not persisted)
      operationId: replace-bookings
      tags:
        - bookings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a275
            example: *a276
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a272
              example: *a273
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a bookings record (fake — not persisted)
      operationId: patch-bookings
      tags:
        - bookings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/BookingsRecordPatch"
            example: *a276
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a272
              example: *a273
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a bookings record (fake — not persisted)
      operationId: delete-bookings
      tags:
        - bookings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/itineraries:
    get:
      summary: List itineraries
      operationId: list-itineraries
      tags:
        - itineraries
      parameters: &a277
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a279
                      $ref: "#/components/schemas/ItinerariesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a280
                    id: 1
                    userId: 92
                    title: Weekend Getaway
                    slug: weekend-getaway-1
                    description: Conventus textor concedo congregatio distinctio solus conor placeat
                      advenio credo. Varietas utor spes theatrum voluptate.
                    startDate: 2026-11-22
                    endDate: 2026-12-11
                    destinationSlugs: &a278
                      - phoenix-41
                      - north-alvisburgh-33
                      - batzborough-69
                      - north-richland-hills-73
                    createdAt: 2026-05-07T18:42:16.620Z
                    updatedAt: 2026-05-18T21:35:35.050Z
                meta:
                  total: 200
                  page: 1
                  limit: 25
                  totalPages: 8
                links:
                  self: /api/v1/itineraries?page=1&limit=25
                  first: /api/v1/itineraries?page=1&limit=25
                  last: /api/v1/itineraries?page=8&limit=25
                  next: /api/v1/itineraries?page=2&limit=25
                  prev: null
    head:
      summary: Check itineraries collection availability
      operationId: head-itineraries
      tags:
        - itineraries
      parameters: *a277
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a itineraries record (fake — not persisted)
      operationId: create-itineraries
      tags:
        - itineraries
      requestBody:
        required: true
        content:
          application/json:
            schema: &a282
              $ref: "#/components/schemas/ItinerariesRecordInput"
            example: &a283
              userId: 92
              title: Weekend Getaway
              slug: weekend-getaway-1
              description: Conventus textor concedo congregatio distinctio solus conor placeat
                advenio credo. Varietas utor spes theatrum voluptate.
              startDate: 2026-11-22
              endDate: 2026-12-11
              destinationSlugs: *a278
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a279
              example: *a280
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/itineraries/{id}:
    get:
      summary: Get one itineraries record by id
      operationId: get-itineraries-by-id
      tags:
        - itineraries
      parameters: &a281
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a279
              example: *a280
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a itineraries record exists
      operationId: head-itineraries-by-id
      tags:
        - itineraries
      parameters: *a281
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a itineraries record (fake — not persisted)
      operationId: replace-itineraries
      tags:
        - itineraries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a282
            example: *a283
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a279
              example: *a280
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a itineraries record (fake — not persisted)
      operationId: patch-itineraries
      tags:
        - itineraries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ItinerariesRecordPatch"
            example: *a283
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a279
              example: *a280
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a itineraries record (fake — not persisted)
      operationId: delete-itineraries
      tags:
        - itineraries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/food-categories:
    get:
      summary: List food-categories
      operationId: list-food-categories
      tags:
        - food-categories
      parameters: &a284
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a285
                      $ref: "#/components/schemas/FoodCategoriesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a286
                    id: 1
                    name: Appetizers
                    slug: appetizers
                    description: Starters, snacks, and small bites to begin a meal.
                    parentId: null
                    sortOrder: 1
                meta:
                  total: 30
                  page: 1
                  limit: 25
                  totalPages: 2
                links:
                  self: /api/v1/food-categories?page=1&limit=25
                  first: /api/v1/food-categories?page=1&limit=25
                  last: /api/v1/food-categories?page=2&limit=25
                  next: /api/v1/food-categories?page=2&limit=25
                  prev: null
    head:
      summary: Check food-categories collection availability
      operationId: head-food-categories
      tags:
        - food-categories
      parameters: *a284
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a food-categories record (fake — not persisted)
      operationId: create-food-categories
      tags:
        - food-categories
      requestBody:
        required: true
        content:
          application/json:
            schema: &a288
              $ref: "#/components/schemas/FoodCategoriesRecordInput"
            example: &a289
              name: Appetizers
              slug: appetizers
              description: Starters, snacks, and small bites to begin a meal.
              parentId: null
              sortOrder: 1
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a285
              example: *a286
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/food-categories/{id}:
    get:
      summary: Get one food-categories record by id
      operationId: get-food-categories-by-id
      tags:
        - food-categories
      parameters: &a287
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a285
              example: *a286
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a food-categories record exists
      operationId: head-food-categories-by-id
      tags:
        - food-categories
      parameters: *a287
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a food-categories record (fake — not persisted)
      operationId: replace-food-categories
      tags:
        - food-categories
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a288
            example: *a289
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a285
              example: *a286
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a food-categories record (fake — not persisted)
      operationId: patch-food-categories
      tags:
        - food-categories
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/FoodCategoriesRecordPatch"
            example: *a289
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a285
              example: *a286
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a food-categories record (fake — not persisted)
      operationId: delete-food-categories
      tags:
        - food-categories
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/ingredients:
    get:
      summary: List ingredients
      operationId: list-ingredients
      tags:
        - ingredients
      parameters: &a290
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a291
                      $ref: "#/components/schemas/IngredientsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a292
                    id: 1
                    name: All-Purpose Flour
                    slug: all-purpose-flour-1
                    foodCategoryId: 15
                    unit: g
                    defaultPricePerUnit: 11.39
                    currency: USD
                meta:
                  total: 200
                  page: 1
                  limit: 25
                  totalPages: 8
                links:
                  self: /api/v1/ingredients?page=1&limit=25
                  first: /api/v1/ingredients?page=1&limit=25
                  last: /api/v1/ingredients?page=8&limit=25
                  next: /api/v1/ingredients?page=2&limit=25
                  prev: null
    head:
      summary: Check ingredients collection availability
      operationId: head-ingredients
      tags:
        - ingredients
      parameters: *a290
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a ingredients record (fake — not persisted)
      operationId: create-ingredients
      tags:
        - ingredients
      requestBody:
        required: true
        content:
          application/json:
            schema: &a294
              $ref: "#/components/schemas/IngredientsRecordInput"
            example: &a295
              name: All-Purpose Flour
              slug: all-purpose-flour-1
              foodCategoryId: 15
              unit: g
              defaultPricePerUnit: 11.39
              currency: USD
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a291
              example: *a292
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/ingredients/{id}:
    get:
      summary: Get one ingredients record by id
      operationId: get-ingredients-by-id
      tags:
        - ingredients
      parameters: &a293
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a291
              example: *a292
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a ingredients record exists
      operationId: head-ingredients-by-id
      tags:
        - ingredients
      parameters: *a293
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a ingredients record (fake — not persisted)
      operationId: replace-ingredients
      tags:
        - ingredients
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a294
            example: *a295
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a291
              example: *a292
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a ingredients record (fake — not persisted)
      operationId: patch-ingredients
      tags:
        - ingredients
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IngredientsRecordPatch"
            example: *a295
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a291
              example: *a292
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a ingredients record (fake — not persisted)
      operationId: delete-ingredients
      tags:
        - ingredients
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/menus:
    get:
      summary: List menus
      operationId: list-menus
      tags:
        - menus
      parameters: &a296
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a297
                      $ref: "#/components/schemas/MenusRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a298
                    id: 1
                    restaurantId: 1
                    name: Bar Menu
                    description: Premium selections paired with exceptional flavors.
                    isActive: false
                    createdAt: 2026-02-27T19:41:54.207Z
                    updatedAt: 2026-03-29T19:01:27.613Z
                meta:
                  total: 155
                  page: 1
                  limit: 25
                  totalPages: 7
                links:
                  self: /api/v1/menus?page=1&limit=25
                  first: /api/v1/menus?page=1&limit=25
                  last: /api/v1/menus?page=7&limit=25
                  next: /api/v1/menus?page=2&limit=25
                  prev: null
    head:
      summary: Check menus collection availability
      operationId: head-menus
      tags:
        - menus
      parameters: *a296
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a menus record (fake — not persisted)
      operationId: create-menus
      tags:
        - menus
      requestBody:
        required: true
        content:
          application/json:
            schema: &a300
              $ref: "#/components/schemas/MenusRecordInput"
            example: &a301
              restaurantId: 1
              name: Bar Menu
              description: Premium selections paired with exceptional flavors.
              isActive: false
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a297
              example: *a298
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/menus/{id}:
    get:
      summary: Get one menus record by id
      operationId: get-menus-by-id
      tags:
        - menus
      parameters: &a299
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a297
              example: *a298
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a menus record exists
      operationId: head-menus-by-id
      tags:
        - menus
      parameters: *a299
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a menus record (fake — not persisted)
      operationId: replace-menus
      tags:
        - menus
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a300
            example: *a301
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a297
              example: *a298
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a menus record (fake — not persisted)
      operationId: patch-menus
      tags:
        - menus
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/MenusRecordPatch"
            example: *a301
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a297
              example: *a298
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a menus record (fake — not persisted)
      operationId: delete-menus
      tags:
        - menus
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/menu-items:
    get:
      summary: List menu-items
      operationId: list-menu-items
      tags:
        - menu-items
      parameters: &a302
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a303
                      $ref: "#/components/schemas/MenuItemsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a304
                    id: 1
                    menuId: 1
                    name: House Turkey Platter
                    slug: house-turkey-platter-1
                    description: Rich flavors layered with care by our kitchen team.
                    price: 56.79
                    currency: USD
                    foodCategoryId: 13
                    spicyLevel: 0
                    isVegetarian: false
                    isVegan: false
                    isGlutenFree: false
                    imageUrl: https://picsum.photos/seed/menu-item-1/640/480
                    createdAt: 2026-03-27T20:46:28.856Z
                meta:
                  total: 1450
                  page: 1
                  limit: 25
                  totalPages: 58
                links:
                  self: /api/v1/menu-items?page=1&limit=25
                  first: /api/v1/menu-items?page=1&limit=25
                  last: /api/v1/menu-items?page=58&limit=25
                  next: /api/v1/menu-items?page=2&limit=25
                  prev: null
    head:
      summary: Check menu-items collection availability
      operationId: head-menu-items
      tags:
        - menu-items
      parameters: *a302
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a menu-items record (fake — not persisted)
      operationId: create-menu-items
      tags:
        - menu-items
      requestBody:
        required: true
        content:
          application/json:
            schema: &a306
              $ref: "#/components/schemas/MenuItemsRecordInput"
            example: &a307
              menuId: 1
              name: House Turkey Platter
              slug: house-turkey-platter-1
              description: Rich flavors layered with care by our kitchen team.
              price: 56.79
              currency: USD
              foodCategoryId: 13
              spicyLevel: 0
              isVegetarian: false
              isVegan: false
              isGlutenFree: false
              imageUrl: https://picsum.photos/seed/menu-item-1/640/480
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a303
              example: *a304
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/menu-items/{id}:
    get:
      summary: Get one menu-items record by id
      operationId: get-menu-items-by-id
      tags:
        - menu-items
      parameters: &a305
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a303
              example: *a304
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a menu-items record exists
      operationId: head-menu-items-by-id
      tags:
        - menu-items
      parameters: *a305
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a menu-items record (fake — not persisted)
      operationId: replace-menu-items
      tags:
        - menu-items
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a306
            example: *a307
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a303
              example: *a304
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a menu-items record (fake — not persisted)
      operationId: patch-menu-items
      tags:
        - menu-items
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/MenuItemsRecordPatch"
            example: *a307
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a303
              example: *a304
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a menu-items record (fake — not persisted)
      operationId: delete-menu-items
      tags:
        - menu-items
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/food-orders:
    get:
      summary: List food-orders
      operationId: list-food-orders
      tags:
        - food-orders
      parameters: &a308
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a310
                      $ref: "#/components/schemas/FoodOrdersRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a311
                    id: 1
                    userId: 162
                    restaurantId: 78
                    items: &a309
                      - menuItemId: 1146
                        quantity: 2
                        unitPrice: 37.77
                        lineTotal: 75.54
                      - menuItemId: 1143
                        quantity: 2
                        unitPrice: 15.09
                        lineTotal: 30.18
                    subtotal: 105.72
                    deliveryFee: 5.19
                    tip: 10.31
                    total: 121.22
                    currency: USD
                    status: placed
                    placedAt: 2024-06-15T20:59:09.714Z
                    deliveredAt: null
                meta:
                  total: 500
                  page: 1
                  limit: 25
                  totalPages: 20
                links:
                  self: /api/v1/food-orders?page=1&limit=25
                  first: /api/v1/food-orders?page=1&limit=25
                  last: /api/v1/food-orders?page=20&limit=25
                  next: /api/v1/food-orders?page=2&limit=25
                  prev: null
    head:
      summary: Check food-orders collection availability
      operationId: head-food-orders
      tags:
        - food-orders
      parameters: *a308
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a food-orders record (fake — not persisted)
      operationId: create-food-orders
      tags:
        - food-orders
      requestBody:
        required: true
        content:
          application/json:
            schema: &a313
              $ref: "#/components/schemas/FoodOrdersRecordInput"
            example: &a314
              userId: 162
              restaurantId: 78
              items: *a309
              subtotal: 105.72
              deliveryFee: 5.19
              tip: 10.31
              total: 121.22
              currency: USD
              status: placed
              placedAt: 2024-06-15T20:59:09.714Z
              deliveredAt: null
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a310
              example: *a311
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/food-orders/{id}:
    get:
      summary: Get one food-orders record by id
      operationId: get-food-orders-by-id
      tags:
        - food-orders
      parameters: &a312
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a310
              example: *a311
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a food-orders record exists
      operationId: head-food-orders-by-id
      tags:
        - food-orders
      parameters: *a312
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a food-orders record (fake — not persisted)
      operationId: replace-food-orders
      tags:
        - food-orders
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a313
            example: *a314
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a310
              example: *a311
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a food-orders record (fake — not persisted)
      operationId: patch-food-orders
      tags:
        - food-orders
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/FoodOrdersRecordPatch"
            example: *a314
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a310
              example: *a311
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a food-orders record (fake — not persisted)
      operationId: delete-food-orders
      tags:
        - food-orders
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/orgs:
    get:
      summary: List orgs
      operationId: list-orgs
      tags:
        - orgs
      parameters: &a315
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a316
                      $ref: "#/components/schemas/OrgsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a317
                    id: 1
                    name: Lakin Group
                    slug: lakin-group
                    description: Devolved 24 hour adapter
                    industryId: 26
                    size: 11-50
                    foundedYear: 2023
                    websiteUrl: https://example.com/orgs/lakin-group
                    logoUrl: https://picsum.photos/seed/org-1/200/200
                    createdAt: 2023-05-25T21:33:39.272Z
                    updatedAt: 2024-03-30T21:36:39.738Z
                meta:
                  total: 30
                  page: 1
                  limit: 25
                  totalPages: 2
                links:
                  self: /api/v1/orgs?page=1&limit=25
                  first: /api/v1/orgs?page=1&limit=25
                  last: /api/v1/orgs?page=2&limit=25
                  next: /api/v1/orgs?page=2&limit=25
                  prev: null
    head:
      summary: Check orgs collection availability
      operationId: head-orgs
      tags:
        - orgs
      parameters: *a315
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a orgs record (fake — not persisted)
      operationId: create-orgs
      tags:
        - orgs
      requestBody:
        required: true
        content:
          application/json:
            schema: &a319
              $ref: "#/components/schemas/OrgsRecordInput"
            example: &a320
              name: Lakin Group
              slug: lakin-group
              description: Devolved 24 hour adapter
              industryId: 26
              size: 11-50
              foundedYear: 2023
              websiteUrl: https://example.com/orgs/lakin-group
              logoUrl: https://picsum.photos/seed/org-1/200/200
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a316
              example: *a317
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/orgs/{id}:
    get:
      summary: Get one orgs record by id
      operationId: get-orgs-by-id
      tags:
        - orgs
      parameters: &a318
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a316
              example: *a317
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a orgs record exists
      operationId: head-orgs-by-id
      tags:
        - orgs
      parameters: *a318
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a orgs record (fake — not persisted)
      operationId: replace-orgs
      tags:
        - orgs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a319
            example: *a320
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a316
              example: *a317
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a orgs record (fake — not persisted)
      operationId: patch-orgs
      tags:
        - orgs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/OrgsRecordPatch"
            example: *a320
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a316
              example: *a317
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a orgs record (fake — not persisted)
      operationId: delete-orgs
      tags:
        - orgs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/teams:
    get:
      summary: List teams
      operationId: list-teams
      tags:
        - teams
      parameters: &a321
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a322
                      $ref: "#/components/schemas/TeamsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a323
                    id: 1
                    orgId: 1
                    name: Analytics
                    slug: lakin-group-analytics
                    description: Antiquus decipio usque attonbitus avarus labore temperantia
                      corroboro degenero.
                    memberCount: 5
                    createdAt: 2025-02-28T15:53:25.268Z
                    updatedAt: 2026-04-23T21:10:23.735Z
                meta:
                  total: 95
                  page: 1
                  limit: 25
                  totalPages: 4
                links:
                  self: /api/v1/teams?page=1&limit=25
                  first: /api/v1/teams?page=1&limit=25
                  last: /api/v1/teams?page=4&limit=25
                  next: /api/v1/teams?page=2&limit=25
                  prev: null
    head:
      summary: Check teams collection availability
      operationId: head-teams
      tags:
        - teams
      parameters: *a321
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a teams record (fake — not persisted)
      operationId: create-teams
      tags:
        - teams
      requestBody:
        required: true
        content:
          application/json:
            schema: &a325
              $ref: "#/components/schemas/TeamsRecordInput"
            example: &a326
              orgId: 1
              name: Analytics
              slug: lakin-group-analytics
              description: Antiquus decipio usque attonbitus avarus labore temperantia
                corroboro degenero.
              memberCount: 5
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a322
              example: *a323
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/teams/{id}:
    get:
      summary: Get one teams record by id
      operationId: get-teams-by-id
      tags:
        - teams
      parameters: &a324
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a322
              example: *a323
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a teams record exists
      operationId: head-teams-by-id
      tags:
        - teams
      parameters: *a324
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a teams record (fake — not persisted)
      operationId: replace-teams
      tags:
        - teams
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a325
            example: *a326
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a322
              example: *a323
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a teams record (fake — not persisted)
      operationId: patch-teams
      tags:
        - teams
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TeamsRecordPatch"
            example: *a326
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a322
              example: *a323
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a teams record (fake — not persisted)
      operationId: delete-teams
      tags:
        - teams
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/projects:
    get:
      summary: List projects
      operationId: list-projects
      tags:
        - projects
      parameters: &a327
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a328
                      $ref: "#/components/schemas/ProjectsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a329
                    id: 1
                    orgId: 1
                    teamId: 4
                    name: Performance Optimization
                    slug: lakin-group-performance-optimization
                    description: Vulpes vestrum beatae taceo supplanto trucido vergo.
                    status: on_hold
                    startDate: 2025-06-25
                    dueDate: null
                    ownerUserId: 71
                    createdAt: 2025-05-31T21:48:05.378Z
                    updatedAt: 2026-01-10T18:30:17.147Z
                meta:
                  total: 85
                  page: 1
                  limit: 25
                  totalPages: 4
                links:
                  self: /api/v1/projects?page=1&limit=25
                  first: /api/v1/projects?page=1&limit=25
                  last: /api/v1/projects?page=4&limit=25
                  next: /api/v1/projects?page=2&limit=25
                  prev: null
    head:
      summary: Check projects collection availability
      operationId: head-projects
      tags:
        - projects
      parameters: *a327
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a projects record (fake — not persisted)
      operationId: create-projects
      tags:
        - projects
      requestBody:
        required: true
        content:
          application/json:
            schema: &a331
              $ref: "#/components/schemas/ProjectsRecordInput"
            example: &a332
              orgId: 1
              teamId: 4
              name: Performance Optimization
              slug: lakin-group-performance-optimization
              description: Vulpes vestrum beatae taceo supplanto trucido vergo.
              status: on_hold
              startDate: 2025-06-25
              dueDate: null
              ownerUserId: 71
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a328
              example: *a329
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/projects/{id}:
    get:
      summary: Get one projects record by id
      operationId: get-projects-by-id
      tags:
        - projects
      parameters: &a330
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a328
              example: *a329
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a projects record exists
      operationId: head-projects-by-id
      tags:
        - projects
      parameters: *a330
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a projects record (fake — not persisted)
      operationId: replace-projects
      tags:
        - projects
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a331
            example: *a332
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a328
              example: *a329
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a projects record (fake — not persisted)
      operationId: patch-projects
      tags:
        - projects
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ProjectsRecordPatch"
            example: *a332
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a328
              example: *a329
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a projects record (fake — not persisted)
      operationId: delete-projects
      tags:
        - projects
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/tasks:
    get:
      summary: List tasks
      operationId: list-tasks
      tags:
        - tasks
      parameters: &a333
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a334
                      $ref: "#/components/schemas/TasksRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a335
                    id: 1
                    projectId: 1
                    assigneeUserId: 163
                    title: Configure analytics tracking
                    description: Animi terminatio laborum concido curriculum confido cunae deleo
                      spero.
                    status: blocked
                    priority: low
                    dueDate: null
                    createdAt: 2026-03-26T22:15:03.992Z
                    updatedAt: 2026-04-30T00:13:24.653Z
                meta:
                  total: 723
                  page: 1
                  limit: 25
                  totalPages: 29
                links:
                  self: /api/v1/tasks?page=1&limit=25
                  first: /api/v1/tasks?page=1&limit=25
                  last: /api/v1/tasks?page=29&limit=25
                  next: /api/v1/tasks?page=2&limit=25
                  prev: null
    head:
      summary: Check tasks collection availability
      operationId: head-tasks
      tags:
        - tasks
      parameters: *a333
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a tasks record (fake — not persisted)
      operationId: create-tasks
      tags:
        - tasks
      requestBody:
        required: true
        content:
          application/json:
            schema: &a337
              $ref: "#/components/schemas/TasksRecordInput"
            example: &a338
              projectId: 1
              assigneeUserId: 163
              title: Configure analytics tracking
              description: Animi terminatio laborum concido curriculum confido cunae deleo
                spero.
              status: blocked
              priority: low
              dueDate: null
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a334
              example: *a335
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/tasks/{id}:
    get:
      summary: Get one tasks record by id
      operationId: get-tasks-by-id
      tags:
        - tasks
      parameters: &a336
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a334
              example: *a335
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a tasks record exists
      operationId: head-tasks-by-id
      tags:
        - tasks
      parameters: *a336
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a tasks record (fake — not persisted)
      operationId: replace-tasks
      tags:
        - tasks
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a337
            example: *a338
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a334
              example: *a335
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a tasks record (fake — not persisted)
      operationId: patch-tasks
      tags:
        - tasks
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TasksRecordPatch"
            example: *a338
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a334
              example: *a335
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a tasks record (fake — not persisted)
      operationId: delete-tasks
      tags:
        - tasks
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/todo-lists:
    get:
      summary: List todo-lists
      operationId: list-todo-lists
      tags:
        - todo-lists
      parameters: &a339
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a340
                      $ref: "#/components/schemas/TodoListsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a341
                    id: 1
                    userId: 2
                    name: Books to Read
                    isArchived: true
                    createdAt: 2025-05-25T18:37:17.603Z
                    updatedAt: 2025-11-16T12:59:28.848Z
                meta:
                  total: 250
                  page: 1
                  limit: 25
                  totalPages: 10
                links:
                  self: /api/v1/todo-lists?page=1&limit=25
                  first: /api/v1/todo-lists?page=1&limit=25
                  last: /api/v1/todo-lists?page=10&limit=25
                  next: /api/v1/todo-lists?page=2&limit=25
                  prev: null
    head:
      summary: Check todo-lists collection availability
      operationId: head-todo-lists
      tags:
        - todo-lists
      parameters: *a339
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a todo-lists record (fake — not persisted)
      operationId: create-todo-lists
      tags:
        - todo-lists
      requestBody:
        required: true
        content:
          application/json:
            schema: &a343
              $ref: "#/components/schemas/TodoListsRecordInput"
            example: &a344
              userId: 2
              name: Books to Read
              isArchived: true
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a340
              example: *a341
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/todo-lists/{id}:
    get:
      summary: Get one todo-lists record by id
      operationId: get-todo-lists-by-id
      tags:
        - todo-lists
      parameters: &a342
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a340
              example: *a341
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a todo-lists record exists
      operationId: head-todo-lists-by-id
      tags:
        - todo-lists
      parameters: *a342
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a todo-lists record (fake — not persisted)
      operationId: replace-todo-lists
      tags:
        - todo-lists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a343
            example: *a344
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a340
              example: *a341
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a todo-lists record (fake — not persisted)
      operationId: patch-todo-lists
      tags:
        - todo-lists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TodoListsRecordPatch"
            example: *a344
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a340
              example: *a341
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a todo-lists record (fake — not persisted)
      operationId: delete-todo-lists
      tags:
        - todo-lists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/todos:
    get:
      summary: List todos
      operationId: list-todos
      tags:
        - todos
      parameters: &a345
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a346
                      $ref: "#/components/schemas/TodosRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a347
                    id: 1
                    todoListId: 1
                    title: Buy the report
                    isDone: false
                    dueDate: 2026-06-19
                    completedAt: null
                    createdAt: 2025-09-02T20:48:26.252Z
                    updatedAt: 2025-12-21T19:17:30.692Z
                meta:
                  total: 3016
                  page: 1
                  limit: 25
                  totalPages: 121
                links:
                  self: /api/v1/todos?page=1&limit=25
                  first: /api/v1/todos?page=1&limit=25
                  last: /api/v1/todos?page=121&limit=25
                  next: /api/v1/todos?page=2&limit=25
                  prev: null
    head:
      summary: Check todos collection availability
      operationId: head-todos
      tags:
        - todos
      parameters: *a345
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a todos record (fake — not persisted)
      operationId: create-todos
      tags:
        - todos
      requestBody:
        required: true
        content:
          application/json:
            schema: &a349
              $ref: "#/components/schemas/TodosRecordInput"
            example: &a350
              todoListId: 1
              title: Buy the report
              isDone: false
              dueDate: 2026-06-19
              completedAt: null
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a346
              example: *a347
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/todos/{id}:
    get:
      summary: Get one todos record by id
      operationId: get-todos-by-id
      tags:
        - todos
      parameters: &a348
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a346
              example: *a347
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a todos record exists
      operationId: head-todos-by-id
      tags:
        - todos
      parameters: *a348
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a todos record (fake — not persisted)
      operationId: replace-todos
      tags:
        - todos
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a349
            example: *a350
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a346
              example: *a347
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a todos record (fake — not persisted)
      operationId: patch-todos
      tags:
        - todos
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TodosRecordPatch"
            example: *a350
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a346
              example: *a347
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a todos record (fake — not persisted)
      operationId: delete-todos
      tags:
        - todos
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/documents:
    get:
      summary: List documents
      operationId: list-documents
      tags:
        - documents
      parameters: &a351
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a352
                      $ref: "#/components/schemas/DocumentsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a353
                    id: 1
                    ownerUserId: 224
                    orgId: 26
                    title: "RFC: Security Policies"
                    slug: rfc-security-policies
                    content: >-
                      Inventore quibusdam itaque qui thesaurus patior clibanus
                      a. Coadunatio contigo circumvenio summopere custodia
                      amitto aggero. Cras expedita brevis.


                      Ustilo aro tenuis. Sub voluntarius verumtamen adfero
                      tantum utrum. Ager terga pecus verecundia termes corporis
                      tardus degenero.
                    isPublic: false
                    createdAt: 2026-04-14T15:54:13.306Z
                    updatedAt: 2026-05-04T09:25:38.968Z
                meta:
                  total: 250
                  page: 1
                  limit: 25
                  totalPages: 10
                links:
                  self: /api/v1/documents?page=1&limit=25
                  first: /api/v1/documents?page=1&limit=25
                  last: /api/v1/documents?page=10&limit=25
                  next: /api/v1/documents?page=2&limit=25
                  prev: null
    head:
      summary: Check documents collection availability
      operationId: head-documents
      tags:
        - documents
      parameters: *a351
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a documents record (fake — not persisted)
      operationId: create-documents
      tags:
        - documents
      requestBody:
        required: true
        content:
          application/json:
            schema: &a355
              $ref: "#/components/schemas/DocumentsRecordInput"
            example: &a356
              ownerUserId: 224
              orgId: 26
              title: "RFC: Security Policies"
              slug: rfc-security-policies
              content: >-
                Inventore quibusdam itaque qui thesaurus patior clibanus a.
                Coadunatio contigo circumvenio summopere custodia amitto aggero.
                Cras expedita brevis.


                Ustilo aro tenuis. Sub voluntarius verumtamen adfero tantum
                utrum. Ager terga pecus verecundia termes corporis tardus
                degenero.
              isPublic: false
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a352
              example: *a353
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/documents/{id}:
    get:
      summary: Get one documents record by id
      operationId: get-documents-by-id
      tags:
        - documents
      parameters: &a354
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a352
              example: *a353
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a documents record exists
      operationId: head-documents-by-id
      tags:
        - documents
      parameters: *a354
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a documents record (fake — not persisted)
      operationId: replace-documents
      tags:
        - documents
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a355
            example: *a356
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a352
              example: *a353
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a documents record (fake — not persisted)
      operationId: patch-documents
      tags:
        - documents
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DocumentsRecordPatch"
            example: *a356
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a352
              example: *a353
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a documents record (fake — not persisted)
      operationId: delete-documents
      tags:
        - documents
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/calendar-events:
    get:
      summary: List calendar-events
      operationId: list-calendar-events
      tags:
        - calendar-events
      parameters: &a357
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a359
                      $ref: "#/components/schemas/CalendarEventsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a360
                    id: 1
                    ownerUserId: 1
                    title: Budget Review
                    description: Accusator universe pel cursus.
                    startAt: 2026-04-28T08:32:58.356Z
                    endAt: 2026-04-28T10:11:04.800Z
                    isAllDay: false
                    location: Microsoft Teams
                    attendeeUserIds: &a358
                      - 198
                      - 211
                    createdAt: 2026-05-20T07:31:54.772Z
                    updatedAt: 2026-05-20T21:45:34.752Z
                meta:
                  total: 599
                  page: 1
                  limit: 25
                  totalPages: 24
                links:
                  self: /api/v1/calendar-events?page=1&limit=25
                  first: /api/v1/calendar-events?page=1&limit=25
                  last: /api/v1/calendar-events?page=24&limit=25
                  next: /api/v1/calendar-events?page=2&limit=25
                  prev: null
    head:
      summary: Check calendar-events collection availability
      operationId: head-calendar-events
      tags:
        - calendar-events
      parameters: *a357
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a calendar-events record (fake — not persisted)
      operationId: create-calendar-events
      tags:
        - calendar-events
      requestBody:
        required: true
        content:
          application/json:
            schema: &a362
              $ref: "#/components/schemas/CalendarEventsRecordInput"
            example: &a363
              ownerUserId: 1
              title: Budget Review
              description: Accusator universe pel cursus.
              startAt: 2026-04-28T08:32:58.356Z
              endAt: 2026-04-28T10:11:04.800Z
              isAllDay: false
              location: Microsoft Teams
              attendeeUserIds: *a358
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a359
              example: *a360
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/calendar-events/{id}:
    get:
      summary: Get one calendar-events record by id
      operationId: get-calendar-events-by-id
      tags:
        - calendar-events
      parameters: &a361
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a359
              example: *a360
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a calendar-events record exists
      operationId: head-calendar-events-by-id
      tags:
        - calendar-events
      parameters: *a361
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a calendar-events record (fake — not persisted)
      operationId: replace-calendar-events
      tags:
        - calendar-events
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a362
            example: *a363
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a359
              example: *a360
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a calendar-events record (fake — not persisted)
      operationId: patch-calendar-events
      tags:
        - calendar-events
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CalendarEventsRecordPatch"
            example: *a363
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a359
              example: *a360
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a calendar-events record (fake — not persisted)
      operationId: delete-calendar-events
      tags:
        - calendar-events
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/time-entries:
    get:
      summary: List time-entries
      operationId: list-time-entries
      tags:
        - time-entries
      parameters: &a364
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a365
                      $ref: "#/components/schemas/TimeEntriesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a366
                    id: 1
                    userId: 1
                    taskId: 410
                    projectId: null
                    description: Meeting preparation
                    startedAt: 2026-04-19T23:01:52.099Z
                    endedAt: 2026-04-20T01:16:52.099Z
                    durationMinutes: 135
                    createdAt: 2026-04-20T01:16:52.099Z
                meta:
                  total: 661
                  page: 1
                  limit: 25
                  totalPages: 27
                links:
                  self: /api/v1/time-entries?page=1&limit=25
                  first: /api/v1/time-entries?page=1&limit=25
                  last: /api/v1/time-entries?page=27&limit=25
                  next: /api/v1/time-entries?page=2&limit=25
                  prev: null
    head:
      summary: Check time-entries collection availability
      operationId: head-time-entries
      tags:
        - time-entries
      parameters: *a364
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a time-entries record (fake — not persisted)
      operationId: create-time-entries
      tags:
        - time-entries
      requestBody:
        required: true
        content:
          application/json:
            schema: &a368
              $ref: "#/components/schemas/TimeEntriesRecordInput"
            example: &a369
              userId: 1
              taskId: 410
              projectId: null
              description: Meeting preparation
              startedAt: 2026-04-19T23:01:52.099Z
              endedAt: 2026-04-20T01:16:52.099Z
              durationMinutes: 135
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a365
              example: *a366
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/time-entries/{id}:
    get:
      summary: Get one time-entries record by id
      operationId: get-time-entries-by-id
      tags:
        - time-entries
      parameters: &a367
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a365
              example: *a366
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a time-entries record exists
      operationId: head-time-entries-by-id
      tags:
        - time-entries
      parameters: *a367
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a time-entries record (fake — not persisted)
      operationId: replace-time-entries
      tags:
        - time-entries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a368
            example: *a369
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a365
              example: *a366
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a time-entries record (fake — not persisted)
      operationId: patch-time-entries
      tags:
        - time-entries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TimeEntriesRecordPatch"
            example: *a369
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a365
              example: *a366
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a time-entries record (fake — not persisted)
      operationId: delete-time-entries
      tags:
        - time-entries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/kanban-boards:
    get:
      summary: List kanban-boards
      operationId: list-kanban-boards
      tags:
        - kanban-boards
      parameters: &a370
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a371
                      $ref: "#/components/schemas/KanbanBoardsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a372
                    id: 1
                    projectId: 1
                    name: Main Board
                    slug: lakin-group-performance-optimization-main-board
                    createdAt: 2026-03-11T06:55:24.001Z
                    updatedAt: 2026-05-04T04:47:44.632Z
                meta:
                  total: 131
                  page: 1
                  limit: 25
                  totalPages: 6
                links:
                  self: /api/v1/kanban-boards?page=1&limit=25
                  first: /api/v1/kanban-boards?page=1&limit=25
                  last: /api/v1/kanban-boards?page=6&limit=25
                  next: /api/v1/kanban-boards?page=2&limit=25
                  prev: null
    head:
      summary: Check kanban-boards collection availability
      operationId: head-kanban-boards
      tags:
        - kanban-boards
      parameters: *a370
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a kanban-boards record (fake — not persisted)
      operationId: create-kanban-boards
      tags:
        - kanban-boards
      requestBody:
        required: true
        content:
          application/json:
            schema: &a374
              $ref: "#/components/schemas/KanbanBoardsRecordInput"
            example: &a375
              projectId: 1
              name: Main Board
              slug: lakin-group-performance-optimization-main-board
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a371
              example: *a372
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/kanban-boards/{id}:
    get:
      summary: Get one kanban-boards record by id
      operationId: get-kanban-boards-by-id
      tags:
        - kanban-boards
      parameters: &a373
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a371
              example: *a372
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a kanban-boards record exists
      operationId: head-kanban-boards-by-id
      tags:
        - kanban-boards
      parameters: *a373
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a kanban-boards record (fake — not persisted)
      operationId: replace-kanban-boards
      tags:
        - kanban-boards
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a374
            example: *a375
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a371
              example: *a372
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a kanban-boards record (fake — not persisted)
      operationId: patch-kanban-boards
      tags:
        - kanban-boards
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/KanbanBoardsRecordPatch"
            example: *a375
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a371
              example: *a372
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a kanban-boards record (fake — not persisted)
      operationId: delete-kanban-boards
      tags:
        - kanban-boards
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/kanban-columns:
    get:
      summary: List kanban-columns
      operationId: list-kanban-columns
      tags:
        - kanban-columns
      parameters: &a376
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a377
                      $ref: "#/components/schemas/KanbanColumnsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a378
                    id: 1
                    boardId: 1
                    name: Backlog
                    sortOrder: 0
                    color: "#94a3b8"
                    createdAt: 2025-07-31T11:30:54.074Z
                meta:
                  total: 542
                  page: 1
                  limit: 25
                  totalPages: 22
                links:
                  self: /api/v1/kanban-columns?page=1&limit=25
                  first: /api/v1/kanban-columns?page=1&limit=25
                  last: /api/v1/kanban-columns?page=22&limit=25
                  next: /api/v1/kanban-columns?page=2&limit=25
                  prev: null
    head:
      summary: Check kanban-columns collection availability
      operationId: head-kanban-columns
      tags:
        - kanban-columns
      parameters: *a376
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a kanban-columns record (fake — not persisted)
      operationId: create-kanban-columns
      tags:
        - kanban-columns
      requestBody:
        required: true
        content:
          application/json:
            schema: &a380
              $ref: "#/components/schemas/KanbanColumnsRecordInput"
            example: &a381
              boardId: 1
              name: Backlog
              sortOrder: 0
              color: "#94a3b8"
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a377
              example: *a378
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/kanban-columns/{id}:
    get:
      summary: Get one kanban-columns record by id
      operationId: get-kanban-columns-by-id
      tags:
        - kanban-columns
      parameters: &a379
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a377
              example: *a378
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a kanban-columns record exists
      operationId: head-kanban-columns-by-id
      tags:
        - kanban-columns
      parameters: *a379
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a kanban-columns record (fake — not persisted)
      operationId: replace-kanban-columns
      tags:
        - kanban-columns
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a380
            example: *a381
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a377
              example: *a378
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a kanban-columns record (fake — not persisted)
      operationId: patch-kanban-columns
      tags:
        - kanban-columns
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/KanbanColumnsRecordPatch"
            example: *a381
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a377
              example: *a378
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a kanban-columns record (fake — not persisted)
      operationId: delete-kanban-columns
      tags:
        - kanban-columns
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/files:
    get:
      summary: List files
      operationId: list-files
      tags:
        - files
      parameters: &a382
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a383
                      $ref: "#/components/schemas/FilesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a384
                    id: 1
                    ownerUserId: 231
                    name: Shared
                    mimeType: application/x-directory
                    sizeBytes: 0
                    url: https://files.example.com/folders/1
                    parentFolderId: null
                    isFolder: true
                    createdAt: 2024-09-29T20:35:10.132Z
                    updatedAt: 2025-02-17T01:19:07.711Z
                meta:
                  total: 600
                  page: 1
                  limit: 25
                  totalPages: 24
                links:
                  self: /api/v1/files?page=1&limit=25
                  first: /api/v1/files?page=1&limit=25
                  last: /api/v1/files?page=24&limit=25
                  next: /api/v1/files?page=2&limit=25
                  prev: null
    head:
      summary: Check files collection availability
      operationId: head-files
      tags:
        - files
      parameters: *a382
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a files record (fake — not persisted)
      operationId: create-files
      tags:
        - files
      requestBody:
        required: true
        content:
          application/json:
            schema: &a386
              $ref: "#/components/schemas/FilesRecordInput"
            example: &a387
              ownerUserId: 231
              name: Shared
              mimeType: application/x-directory
              sizeBytes: 0
              url: https://files.example.com/folders/1
              parentFolderId: null
              isFolder: true
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a383
              example: *a384
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/files/{id}:
    get:
      summary: Get one files record by id
      operationId: get-files-by-id
      tags:
        - files
      parameters: &a385
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a383
              example: *a384
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a files record exists
      operationId: head-files-by-id
      tags:
        - files
      parameters: *a385
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a files record (fake — not persisted)
      operationId: replace-files
      tags:
        - files
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a386
            example: *a387
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a383
              example: *a384
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a files record (fake — not persisted)
      operationId: patch-files
      tags:
        - files
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/FilesRecordPatch"
            example: *a387
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a383
              example: *a384
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a files record (fake — not persisted)
      operationId: delete-files
      tags:
        - files
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/stocks:
    get:
      summary: List stocks
      operationId: list-stocks
      tags:
        - stocks
      parameters: &a388
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a389
                      $ref: "#/components/schemas/StocksRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a390
                    id: 1
                    symbol: AAPL
                    name: Apple Inc.
                    exchange: NASDAQ
                    sector: Technology
                    marketCap: 7226659649002
                    price: 2589.12
                    priceChangePercent24h: 8.12
                    volume24h: 297600310
                    createdAt: 2025-04-21T22:02:47.230Z
                meta:
                  total: 100
                  page: 1
                  limit: 25
                  totalPages: 4
                links:
                  self: /api/v1/stocks?page=1&limit=25
                  first: /api/v1/stocks?page=1&limit=25
                  last: /api/v1/stocks?page=4&limit=25
                  next: /api/v1/stocks?page=2&limit=25
                  prev: null
    head:
      summary: Check stocks collection availability
      operationId: head-stocks
      tags:
        - stocks
      parameters: *a388
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a stocks record (fake — not persisted)
      operationId: create-stocks
      tags:
        - stocks
      requestBody:
        required: true
        content:
          application/json:
            schema: &a392
              $ref: "#/components/schemas/StocksRecordInput"
            example: &a393
              symbol: AAPL
              name: Apple Inc.
              exchange: NASDAQ
              sector: Technology
              marketCap: 7226659649002
              price: 2589.12
              priceChangePercent24h: 8.12
              volume24h: 297600310
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a389
              example: *a390
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/stocks/{id}:
    get:
      summary: Get one stocks record by id
      operationId: get-stocks-by-id
      tags:
        - stocks
      parameters: &a391
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a389
              example: *a390
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a stocks record exists
      operationId: head-stocks-by-id
      tags:
        - stocks
      parameters: *a391
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a stocks record (fake — not persisted)
      operationId: replace-stocks
      tags:
        - stocks
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a392
            example: *a393
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a389
              example: *a390
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a stocks record (fake — not persisted)
      operationId: patch-stocks
      tags:
        - stocks
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/StocksRecordPatch"
            example: *a393
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a389
              example: *a390
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a stocks record (fake — not persisted)
      operationId: delete-stocks
      tags:
        - stocks
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/crypto:
    get:
      summary: List crypto
      operationId: list-crypto
      tags:
        - crypto
      parameters: &a394
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a395
                      $ref: "#/components/schemas/CryptoRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a396
                    id: 1
                    symbol: BTC
                    name: Bitcoin
                    slug: bitcoin
                    marketCap: 900022500000
                    price: 46155
                    priceChangePercent24h: -2.04
                    volume24h: 7638122780
                    circulatingSupply: 19500000
                    totalSupply: 21000000
                    createdAt: 2026-02-07T01:29:08.434Z
                meta:
                  total: 50
                  page: 1
                  limit: 25
                  totalPages: 2
                links:
                  self: /api/v1/crypto?page=1&limit=25
                  first: /api/v1/crypto?page=1&limit=25
                  last: /api/v1/crypto?page=2&limit=25
                  next: /api/v1/crypto?page=2&limit=25
                  prev: null
    head:
      summary: Check crypto collection availability
      operationId: head-crypto
      tags:
        - crypto
      parameters: *a394
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a crypto record (fake — not persisted)
      operationId: create-crypto
      tags:
        - crypto
      requestBody:
        required: true
        content:
          application/json:
            schema: &a398
              $ref: "#/components/schemas/CryptoRecordInput"
            example: &a399
              symbol: BTC
              name: Bitcoin
              slug: bitcoin
              marketCap: 900022500000
              price: 46155
              priceChangePercent24h: -2.04
              volume24h: 7638122780
              circulatingSupply: 19500000
              totalSupply: 21000000
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a395
              example: *a396
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/crypto/{id}:
    get:
      summary: Get one crypto record by id
      operationId: get-crypto-by-id
      tags:
        - crypto
      parameters: &a397
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a395
              example: *a396
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a crypto record exists
      operationId: head-crypto-by-id
      tags:
        - crypto
      parameters: *a397
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a crypto record (fake — not persisted)
      operationId: replace-crypto
      tags:
        - crypto
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a398
            example: *a399
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a395
              example: *a396
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a crypto record (fake — not persisted)
      operationId: patch-crypto
      tags:
        - crypto
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CryptoRecordPatch"
            example: *a399
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a395
              example: *a396
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a crypto record (fake — not persisted)
      operationId: delete-crypto
      tags:
        - crypto
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/stock-holdings:
    get:
      summary: List stock-holdings
      operationId: list-stock-holdings
      tags:
        - stock-holdings
      parameters: &a400
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a401
                      $ref: "#/components/schemas/StockHoldingsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a402
                    id: 1
                    userId: 2
                    stockId: 5
                    quantity: 117.999
                    costBasis: 1627.48
                    purchasedAt: 2024-09-27T02:42:34.677Z
                meta:
                  total: 512
                  page: 1
                  limit: 25
                  totalPages: 21
                links:
                  self: /api/v1/stock-holdings?page=1&limit=25
                  first: /api/v1/stock-holdings?page=1&limit=25
                  last: /api/v1/stock-holdings?page=21&limit=25
                  next: /api/v1/stock-holdings?page=2&limit=25
                  prev: null
    head:
      summary: Check stock-holdings collection availability
      operationId: head-stock-holdings
      tags:
        - stock-holdings
      parameters: *a400
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a stock-holdings record (fake — not persisted)
      operationId: create-stock-holdings
      tags:
        - stock-holdings
      requestBody:
        required: true
        content:
          application/json:
            schema: &a404
              $ref: "#/components/schemas/StockHoldingsRecordInput"
            example: &a405
              userId: 2
              stockId: 5
              quantity: 117.999
              costBasis: 1627.48
              purchasedAt: 2024-09-27T02:42:34.677Z
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a401
              example: *a402
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/stock-holdings/{id}:
    get:
      summary: Get one stock-holdings record by id
      operationId: get-stock-holdings-by-id
      tags:
        - stock-holdings
      parameters: &a403
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a401
              example: *a402
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a stock-holdings record exists
      operationId: head-stock-holdings-by-id
      tags:
        - stock-holdings
      parameters: *a403
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a stock-holdings record (fake — not persisted)
      operationId: replace-stock-holdings
      tags:
        - stock-holdings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a404
            example: *a405
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a401
              example: *a402
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a stock-holdings record (fake — not persisted)
      operationId: patch-stock-holdings
      tags:
        - stock-holdings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/StockHoldingsRecordPatch"
            example: *a405
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a401
              example: *a402
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a stock-holdings record (fake — not persisted)
      operationId: delete-stock-holdings
      tags:
        - stock-holdings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/crypto-holdings:
    get:
      summary: List crypto-holdings
      operationId: list-crypto-holdings
      tags:
        - crypto-holdings
      parameters: &a406
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a407
                      $ref: "#/components/schemas/CryptoHoldingsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a408
                    id: 1
                    userId: 1
                    cryptoId: 13
                    quantity: 85.07869486
                    costBasis: 0.00000492
                    purchasedAt: 2025-03-11T09:55:17.870Z
                meta:
                  total: 498
                  page: 1
                  limit: 25
                  totalPages: 20
                links:
                  self: /api/v1/crypto-holdings?page=1&limit=25
                  first: /api/v1/crypto-holdings?page=1&limit=25
                  last: /api/v1/crypto-holdings?page=20&limit=25
                  next: /api/v1/crypto-holdings?page=2&limit=25
                  prev: null
    head:
      summary: Check crypto-holdings collection availability
      operationId: head-crypto-holdings
      tags:
        - crypto-holdings
      parameters: *a406
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a crypto-holdings record (fake — not persisted)
      operationId: create-crypto-holdings
      tags:
        - crypto-holdings
      requestBody:
        required: true
        content:
          application/json:
            schema: &a410
              $ref: "#/components/schemas/CryptoHoldingsRecordInput"
            example: &a411
              userId: 1
              cryptoId: 13
              quantity: 85.07869486
              costBasis: 0.00000492
              purchasedAt: 2025-03-11T09:55:17.870Z
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a407
              example: *a408
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/crypto-holdings/{id}:
    get:
      summary: Get one crypto-holdings record by id
      operationId: get-crypto-holdings-by-id
      tags:
        - crypto-holdings
      parameters: &a409
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a407
              example: *a408
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a crypto-holdings record exists
      operationId: head-crypto-holdings-by-id
      tags:
        - crypto-holdings
      parameters: *a409
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a crypto-holdings record (fake — not persisted)
      operationId: replace-crypto-holdings
      tags:
        - crypto-holdings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a410
            example: *a411
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a407
              example: *a408
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a crypto-holdings record (fake — not persisted)
      operationId: patch-crypto-holdings
      tags:
        - crypto-holdings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CryptoHoldingsRecordPatch"
            example: *a411
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a407
              example: *a408
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a crypto-holdings record (fake — not persisted)
      operationId: delete-crypto-holdings
      tags:
        - crypto-holdings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/accounts:
    get:
      summary: List accounts
      operationId: list-accounts
      tags:
        - accounts
      parameters: &a412
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a413
                      $ref: "#/components/schemas/AccountsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a414
                    id: 1
                    userId: 1
                    name: Emergency Fund
                    type: savings
                    balance: 5751.77
                    currency: EUR
                    isActive: true
                    createdAt: 2025-09-16T19:40:55.373Z
                meta:
                  total: 507
                  page: 1
                  limit: 25
                  totalPages: 21
                links:
                  self: /api/v1/accounts?page=1&limit=25
                  first: /api/v1/accounts?page=1&limit=25
                  last: /api/v1/accounts?page=21&limit=25
                  next: /api/v1/accounts?page=2&limit=25
                  prev: null
    head:
      summary: Check accounts collection availability
      operationId: head-accounts
      tags:
        - accounts
      parameters: *a412
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a accounts record (fake — not persisted)
      operationId: create-accounts
      tags:
        - accounts
      requestBody:
        required: true
        content:
          application/json:
            schema: &a416
              $ref: "#/components/schemas/AccountsRecordInput"
            example: &a417
              userId: 1
              name: Emergency Fund
              type: savings
              balance: 5751.77
              currency: EUR
              isActive: true
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a413
              example: *a414
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/accounts/{id}:
    get:
      summary: Get one accounts record by id
      operationId: get-accounts-by-id
      tags:
        - accounts
      parameters: &a415
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a413
              example: *a414
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a accounts record exists
      operationId: head-accounts-by-id
      tags:
        - accounts
      parameters: *a415
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a accounts record (fake — not persisted)
      operationId: replace-accounts
      tags:
        - accounts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a416
            example: *a417
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a413
              example: *a414
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a accounts record (fake — not persisted)
      operationId: patch-accounts
      tags:
        - accounts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AccountsRecordPatch"
            example: *a417
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a413
              example: *a414
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a accounts record (fake — not persisted)
      operationId: delete-accounts
      tags:
        - accounts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/transactions:
    get:
      summary: List transactions
      operationId: list-transactions
      tags:
        - transactions
      parameters: &a418
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a419
                      $ref: "#/components/schemas/TransactionsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a420
                    id: 1
                    accountId: 447
                    kind: fee
                    amount: -3421.61
                    currency: USD
                    description: Late payment fee
                    status: completed
                    occurredAt: 2024-10-17T08:57:01.284Z
                    createdAt: 2024-10-17T08:57:40.581Z
                meta:
                  total: 2500
                  page: 1
                  limit: 25
                  totalPages: 100
                links:
                  self: /api/v1/transactions?page=1&limit=25
                  first: /api/v1/transactions?page=1&limit=25
                  last: /api/v1/transactions?page=100&limit=25
                  next: /api/v1/transactions?page=2&limit=25
                  prev: null
    head:
      summary: Check transactions collection availability
      operationId: head-transactions
      tags:
        - transactions
      parameters: *a418
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a transactions record (fake — not persisted)
      operationId: create-transactions
      tags:
        - transactions
      requestBody:
        required: true
        content:
          application/json:
            schema: &a422
              $ref: "#/components/schemas/TransactionsRecordInput"
            example: &a423
              accountId: 447
              kind: fee
              amount: -3421.61
              currency: USD
              description: Late payment fee
              status: completed
              occurredAt: 2024-10-17T08:57:01.284Z
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a419
              example: *a420
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/transactions/{id}:
    get:
      summary: Get one transactions record by id
      operationId: get-transactions-by-id
      tags:
        - transactions
      parameters: &a421
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a419
              example: *a420
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a transactions record exists
      operationId: head-transactions-by-id
      tags:
        - transactions
      parameters: *a421
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a transactions record (fake — not persisted)
      operationId: replace-transactions
      tags:
        - transactions
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a422
            example: *a423
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a419
              example: *a420
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a transactions record (fake — not persisted)
      operationId: patch-transactions
      tags:
        - transactions
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TransactionsRecordPatch"
            example: *a423
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a419
              example: *a420
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a transactions record (fake — not persisted)
      operationId: delete-transactions
      tags:
        - transactions
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/budgets:
    get:
      summary: List budgets
      operationId: list-budgets
      tags:
        - budgets
      parameters: &a424
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a425
                      $ref: "#/components/schemas/BudgetsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a426
                    id: 1
                    userId: 1
                    name: Groceries
                    categoryId: 18
                    amount: 4245.1
                    period: quarterly
                    spent: 156.23
                    currency: EUR
                    startsAt: 2024-12-03
                    endsAt: null
                    createdAt: 2025-12-09T19:44:56.377Z
                meta:
                  total: 250
                  page: 1
                  limit: 25
                  totalPages: 10
                links:
                  self: /api/v1/budgets?page=1&limit=25
                  first: /api/v1/budgets?page=1&limit=25
                  last: /api/v1/budgets?page=10&limit=25
                  next: /api/v1/budgets?page=2&limit=25
                  prev: null
    head:
      summary: Check budgets collection availability
      operationId: head-budgets
      tags:
        - budgets
      parameters: *a424
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a budgets record (fake — not persisted)
      operationId: create-budgets
      tags:
        - budgets
      requestBody:
        required: true
        content:
          application/json:
            schema: &a428
              $ref: "#/components/schemas/BudgetsRecordInput"
            example: &a429
              userId: 1
              name: Groceries
              categoryId: 18
              amount: 4245.1
              period: quarterly
              spent: 156.23
              currency: EUR
              startsAt: 2024-12-03
              endsAt: null
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a425
              example: *a426
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/budgets/{id}:
    get:
      summary: Get one budgets record by id
      operationId: get-budgets-by-id
      tags:
        - budgets
      parameters: &a427
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a425
              example: *a426
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a budgets record exists
      operationId: head-budgets-by-id
      tags:
        - budgets
      parameters: *a427
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a budgets record (fake — not persisted)
      operationId: replace-budgets
      tags:
        - budgets
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a428
            example: *a429
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a425
              example: *a426
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a budgets record (fake — not persisted)
      operationId: patch-budgets
      tags:
        - budgets
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/BudgetsRecordPatch"
            example: *a429
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a425
              example: *a426
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a budgets record (fake — not persisted)
      operationId: delete-budgets
      tags:
        - budgets
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/invoices:
    get:
      summary: List invoices
      operationId: list-invoices
      tags:
        - invoices
      parameters: &a430
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a432
                      $ref: "#/components/schemas/InvoicesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a433
                    id: 1
                    fromUserId: 211
                    toUserId: 74
                    invoiceNumber: INV-2024-0001
                    status: viewed
                    issuedAt: 2024-10-18T03:09:14.336Z
                    dueAt: 2024-11-27T03:09:14.336Z
                    paidAt: null
                    subtotal: 23575.44
                    tax: 3536.32
                    total: 27111.76
                    currency: EUR
                    lineItems: &a431
                      - description: Technical support
                        quantity: 40
                        unitPrice: 129.84
                        lineTotal: 5193.6
                      - description: Data analysis
                        quantity: 30
                        unitPrice: 434.78
                        lineTotal: 13043.4
                      - description: Quality assurance
                        quantity: 36
                        unitPrice: 108.75
                        lineTotal: 3915
                      - description: Software development
                        quantity: 12
                        unitPrice: 118.62
                        lineTotal: 1423.44
                    createdAt: 2024-10-17T19:25:36.167Z
                meta:
                  total: 300
                  page: 1
                  limit: 25
                  totalPages: 12
                links:
                  self: /api/v1/invoices?page=1&limit=25
                  first: /api/v1/invoices?page=1&limit=25
                  last: /api/v1/invoices?page=12&limit=25
                  next: /api/v1/invoices?page=2&limit=25
                  prev: null
    head:
      summary: Check invoices collection availability
      operationId: head-invoices
      tags:
        - invoices
      parameters: *a430
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a invoices record (fake — not persisted)
      operationId: create-invoices
      tags:
        - invoices
      requestBody:
        required: true
        content:
          application/json:
            schema: &a435
              $ref: "#/components/schemas/InvoicesRecordInput"
            example: &a436
              fromUserId: 211
              toUserId: 74
              invoiceNumber: INV-2024-0001
              status: viewed
              issuedAt: 2024-10-18T03:09:14.336Z
              dueAt: 2024-11-27T03:09:14.336Z
              paidAt: null
              subtotal: 23575.44
              tax: 3536.32
              total: 27111.76
              currency: EUR
              lineItems: *a431
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a432
              example: *a433
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/invoices/{id}:
    get:
      summary: Get one invoices record by id
      operationId: get-invoices-by-id
      tags:
        - invoices
      parameters: &a434
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a432
              example: *a433
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a invoices record exists
      operationId: head-invoices-by-id
      tags:
        - invoices
      parameters: *a434
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a invoices record (fake — not persisted)
      operationId: replace-invoices
      tags:
        - invoices
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a435
            example: *a436
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a432
              example: *a433
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a invoices record (fake — not persisted)
      operationId: patch-invoices
      tags:
        - invoices
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/InvoicesRecordPatch"
            example: *a436
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a432
              example: *a433
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a invoices record (fake — not persisted)
      operationId: delete-invoices
      tags:
        - invoices
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/articles:
    get:
      summary: List articles
      operationId: list-articles
      tags:
        - articles
      parameters: &a437
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a439
                      $ref: "#/components/schemas/ArticlesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a440
                    id: 1
                    userId: 233
                    title: Una verto denique solio dolores acsi dolores convoco
                    slug: una-verto-denique-solio-dolores-acsi-dolores-convoco-1
                    excerpt: Thesis tamdiu ventus sum consectetur decimus admoneo. Adstringo ceno
                      tyrannus exercitationem tum decretum. Cultellus vulgivagus
                      vorago conventus.
                    content: >-
                      Experimentation is at the heart of discovery. By testing
                      assumptions systematically, we eliminate guesswork and
                      build on solid, evidence-based foundations.


                      Sustainable growth requires intentional effort. Short-term
                      gains that compromise long-term health are ultimately
                      self-defeating and must be carefully avoided.


                      ## Introduction


                      The world of technology is evolving at an unprecedented
                      pace. Every day, new discoveries reshape how we live,
                      work, and interact with each other.


                      Data tells a compelling story. By analyzing patterns over
                      time, we can make smarter decisions and anticipate
                      challenges before they arise.


                      Community plays a vital role in any ecosystem. When
                      individuals share knowledge freely, everyone benefits and
                      the collective intelligence grows exponentially.


                      ## Conclusion


                      The journey toward excellence is never complete. Each
                      milestone reveals new possibilities, encouraging us to aim
                      higher and push beyond previous limits.
                    category: education
                    tags: &a438
                      - remote-work
                      - design
                      - ai
                      - open-source
                    readMinutes: 14
                    imageUrl: https://picsum.photos/seed/article-1/800/450
                    isPublished: false
                    publishedAt: null
                    viewCount: 0
                    createdAt: 2025-08-05T14:44:09.124Z
                    updatedAt: 2025-08-31T23:46:19.041Z
                meta:
                  total: 300
                  page: 1
                  limit: 25
                  totalPages: 12
                links:
                  self: /api/v1/articles?page=1&limit=25
                  first: /api/v1/articles?page=1&limit=25
                  last: /api/v1/articles?page=12&limit=25
                  next: /api/v1/articles?page=2&limit=25
                  prev: null
    head:
      summary: Check articles collection availability
      operationId: head-articles
      tags:
        - articles
      parameters: *a437
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a articles record (fake — not persisted)
      operationId: create-articles
      tags:
        - articles
      requestBody:
        required: true
        content:
          application/json:
            schema: &a442
              $ref: "#/components/schemas/ArticlesRecordInput"
            example: &a443
              userId: 233
              title: Una verto denique solio dolores acsi dolores convoco
              slug: una-verto-denique-solio-dolores-acsi-dolores-convoco-1
              excerpt: Thesis tamdiu ventus sum consectetur decimus admoneo. Adstringo ceno
                tyrannus exercitationem tum decretum. Cultellus vulgivagus
                vorago conventus.
              content: >-
                Experimentation is at the heart of discovery. By testing
                assumptions systematically, we eliminate guesswork and build on
                solid, evidence-based foundations.


                Sustainable growth requires intentional effort. Short-term gains
                that compromise long-term health are ultimately self-defeating
                and must be carefully avoided.


                ## Introduction


                The world of technology is evolving at an unprecedented pace.
                Every day, new discoveries reshape how we live, work, and
                interact with each other.


                Data tells a compelling story. By analyzing patterns over time,
                we can make smarter decisions and anticipate challenges before
                they arise.


                Community plays a vital role in any ecosystem. When individuals
                share knowledge freely, everyone benefits and the collective
                intelligence grows exponentially.


                ## Conclusion


                The journey toward excellence is never complete. Each milestone
                reveals new possibilities, encouraging us to aim higher and push
                beyond previous limits.
              category: education
              tags: *a438
              readMinutes: 14
              imageUrl: https://picsum.photos/seed/article-1/800/450
              isPublished: false
              publishedAt: null
              viewCount: 0
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a439
              example: *a440
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/articles/{id}:
    get:
      summary: Get one articles record by id
      operationId: get-articles-by-id
      tags:
        - articles
      parameters: &a441
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a439
              example: *a440
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a articles record exists
      operationId: head-articles-by-id
      tags:
        - articles
      parameters: *a441
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a articles record (fake — not persisted)
      operationId: replace-articles
      tags:
        - articles
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a442
            example: *a443
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a439
              example: *a440
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a articles record (fake — not persisted)
      operationId: patch-articles
      tags:
        - articles
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ArticlesRecordPatch"
            example: *a443
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a439
              example: *a440
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a articles record (fake — not persisted)
      operationId: delete-articles
      tags:
        - articles
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/videos:
    get:
      summary: List videos
      operationId: list-videos
      tags:
        - videos
      parameters: &a444
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a445
                      $ref: "#/components/schemas/VideosRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a446
                    id: 1
                    userId: 213
                    title: Fugit validus admiratio virga
                    slug: fugit-validus-admiratio-virga-1
                    description: Vicinus ratione demergo undique. Quis tabella deinde accedo tenetur
                      sophismata peccatus amet trucido spes. Optio error taceo
                      viduo consuasor saepe voluptatum thymbra. Nam textilis
                      creber sed asperiores comes.
                    videoUrl: https://example.com/videos/1.mp4
                    thumbnailUrl: https://picsum.photos/seed/video-1/1280/720
                    durationSeconds: 5038
                    viewCount: 1085373
                    likeCount: 31915
                    isPublic: true
                    publishedAt: 2023-08-22T09:07:45.341Z
                    createdAt: 2023-08-21T10:24:43.821Z
                meta:
                  total: 200
                  page: 1
                  limit: 25
                  totalPages: 8
                links:
                  self: /api/v1/videos?page=1&limit=25
                  first: /api/v1/videos?page=1&limit=25
                  last: /api/v1/videos?page=8&limit=25
                  next: /api/v1/videos?page=2&limit=25
                  prev: null
    head:
      summary: Check videos collection availability
      operationId: head-videos
      tags:
        - videos
      parameters: *a444
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a videos record (fake — not persisted)
      operationId: create-videos
      tags:
        - videos
      requestBody:
        required: true
        content:
          application/json:
            schema: &a448
              $ref: "#/components/schemas/VideosRecordInput"
            example: &a449
              userId: 213
              title: Fugit validus admiratio virga
              slug: fugit-validus-admiratio-virga-1
              description: Vicinus ratione demergo undique. Quis tabella deinde accedo tenetur
                sophismata peccatus amet trucido spes. Optio error taceo viduo
                consuasor saepe voluptatum thymbra. Nam textilis creber sed
                asperiores comes.
              videoUrl: https://example.com/videos/1.mp4
              thumbnailUrl: https://picsum.photos/seed/video-1/1280/720
              durationSeconds: 5038
              viewCount: 1085373
              likeCount: 31915
              isPublic: true
              publishedAt: 2023-08-22T09:07:45.341Z
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a445
              example: *a446
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/videos/{id}:
    get:
      summary: Get one videos record by id
      operationId: get-videos-by-id
      tags:
        - videos
      parameters: &a447
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a445
              example: *a446
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a videos record exists
      operationId: head-videos-by-id
      tags:
        - videos
      parameters: *a447
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a videos record (fake — not persisted)
      operationId: replace-videos
      tags:
        - videos
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a448
            example: *a449
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a445
              example: *a446
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a videos record (fake — not persisted)
      operationId: patch-videos
      tags:
        - videos
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/VideosRecordPatch"
            example: *a449
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a445
              example: *a446
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a videos record (fake — not persisted)
      operationId: delete-videos
      tags:
        - videos
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/podcasts:
    get:
      summary: List podcasts
      operationId: list-podcasts
      tags:
        - podcasts
      parameters: &a450
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a451
                      $ref: "#/components/schemas/PodcastsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a452
                    id: 1
                    name: Zboncak, Hudson and Jaskolski Podcast
                    slug: zboncak-hudson-and-jaskolski-podcast-1
                    description: Inventore delinquo admoneo aptus conventus dolores labore. Admoveo
                      tabernus vacuus abduco adfero theologus civis. Cervus
                      aliquam vestigium cimentarius alii caste.
                    hostName: Renee Homenick
                    category: sports
                    language: Japanese
                    coverUrl: https://picsum.photos/seed/podcast-1/500/500
                    episodeCount: 31
                    isExplicit: false
                    createdAt: 2026-03-25T05:33:17.845Z
                    updatedAt: 2026-04-01T22:26:42.645Z
                meta:
                  total: 30
                  page: 1
                  limit: 25
                  totalPages: 2
                links:
                  self: /api/v1/podcasts?page=1&limit=25
                  first: /api/v1/podcasts?page=1&limit=25
                  last: /api/v1/podcasts?page=2&limit=25
                  next: /api/v1/podcasts?page=2&limit=25
                  prev: null
    head:
      summary: Check podcasts collection availability
      operationId: head-podcasts
      tags:
        - podcasts
      parameters: *a450
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a podcasts record (fake — not persisted)
      operationId: create-podcasts
      tags:
        - podcasts
      requestBody:
        required: true
        content:
          application/json:
            schema: &a454
              $ref: "#/components/schemas/PodcastsRecordInput"
            example: &a455
              name: Zboncak, Hudson and Jaskolski Podcast
              slug: zboncak-hudson-and-jaskolski-podcast-1
              description: Inventore delinquo admoneo aptus conventus dolores labore. Admoveo
                tabernus vacuus abduco adfero theologus civis. Cervus aliquam
                vestigium cimentarius alii caste.
              hostName: Renee Homenick
              category: sports
              language: Japanese
              coverUrl: https://picsum.photos/seed/podcast-1/500/500
              episodeCount: 31
              isExplicit: false
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a451
              example: *a452
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/podcasts/{id}:
    get:
      summary: Get one podcasts record by id
      operationId: get-podcasts-by-id
      tags:
        - podcasts
      parameters: &a453
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a451
              example: *a452
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a podcasts record exists
      operationId: head-podcasts-by-id
      tags:
        - podcasts
      parameters: *a453
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a podcasts record (fake — not persisted)
      operationId: replace-podcasts
      tags:
        - podcasts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a454
            example: *a455
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a451
              example: *a452
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a podcasts record (fake — not persisted)
      operationId: patch-podcasts
      tags:
        - podcasts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PodcastsRecordPatch"
            example: *a455
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a451
              example: *a452
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a podcasts record (fake — not persisted)
      operationId: delete-podcasts
      tags:
        - podcasts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/podcast-episodes:
    get:
      summary: List podcast-episodes
      operationId: list-podcast-episodes
      tags:
        - podcast-episodes
      parameters: &a456
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a457
                      $ref: "#/components/schemas/PodcastEpisodesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a458
                    id: 1
                    podcastId: 1
                    title: Sapiente aliquid aqua agnitio aurum
                    slug: sapiente-aliquid-aqua-agnitio-aurum-1
                    description: Ipsam reiciendis conitor suppono. Dolorum utroque caelestis ultio.
                      Culpa demum commemoro commemoro deserunt minus caput.
                      Aiunt suadeo usque alii tardus debeo.
                    audioUrl: https://example.com/podcasts/1/episodes/1.mp3
                    durationSeconds: 448
                    episodeNumber: 1
                    seasonNumber: null
                    publishedAt: 2023-09-07T07:54:59.382Z
                    createdAt: 2023-09-06T07:59:02.380Z
                meta:
                  total: 612
                  page: 1
                  limit: 25
                  totalPages: 25
                links:
                  self: /api/v1/podcast-episodes?page=1&limit=25
                  first: /api/v1/podcast-episodes?page=1&limit=25
                  last: /api/v1/podcast-episodes?page=25&limit=25
                  next: /api/v1/podcast-episodes?page=2&limit=25
                  prev: null
    head:
      summary: Check podcast-episodes collection availability
      operationId: head-podcast-episodes
      tags:
        - podcast-episodes
      parameters: *a456
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a podcast-episodes record (fake — not persisted)
      operationId: create-podcast-episodes
      tags:
        - podcast-episodes
      requestBody:
        required: true
        content:
          application/json:
            schema: &a460
              $ref: "#/components/schemas/PodcastEpisodesRecordInput"
            example: &a461
              podcastId: 1
              title: Sapiente aliquid aqua agnitio aurum
              slug: sapiente-aliquid-aqua-agnitio-aurum-1
              description: Ipsam reiciendis conitor suppono. Dolorum utroque caelestis ultio.
                Culpa demum commemoro commemoro deserunt minus caput. Aiunt
                suadeo usque alii tardus debeo.
              audioUrl: https://example.com/podcasts/1/episodes/1.mp3
              durationSeconds: 448
              episodeNumber: 1
              seasonNumber: null
              publishedAt: 2023-09-07T07:54:59.382Z
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a457
              example: *a458
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/podcast-episodes/{id}:
    get:
      summary: Get one podcast-episodes record by id
      operationId: get-podcast-episodes-by-id
      tags:
        - podcast-episodes
      parameters: &a459
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a457
              example: *a458
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a podcast-episodes record exists
      operationId: head-podcast-episodes-by-id
      tags:
        - podcast-episodes
      parameters: *a459
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a podcast-episodes record (fake — not persisted)
      operationId: replace-podcast-episodes
      tags:
        - podcast-episodes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a460
            example: *a461
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a457
              example: *a458
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a podcast-episodes record (fake — not persisted)
      operationId: patch-podcast-episodes
      tags:
        - podcast-episodes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PodcastEpisodesRecordPatch"
            example: *a461
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a457
              example: *a458
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a podcast-episodes record (fake — not persisted)
      operationId: delete-podcast-episodes
      tags:
        - podcast-episodes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/books:
    get:
      summary: List books
      operationId: list-books
      tags:
        - books
      parameters: &a462
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a465
                      $ref: "#/components/schemas/BooksRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a466
                    id: 1
                    title: Coniecto caput taceo
                    slug: coniecto-caput-taceo-1
                    authors: &a463
                      - Arnold Turcotte-Kiehn
                    isbn: "9441056558693"
                    publisher: Vintage Books
                    publishedYear: 2016
                    pages: 472
                    language: Spanish
                    description: Certe dolores sit unde suadeo valeo at demulceo. Quisquam claudeo
                      casso. Umbra sint arguo ulterius cogito inflammatio.
                    coverUrl: https://picsum.photos/seed/book-1/400/600
                    genres: &a464
                      - fantasy
                    rating: 2.2
                    ratingCount: 24096
                    createdAt: 2024-08-05T01:33:54.486Z
                meta:
                  total: 250
                  page: 1
                  limit: 25
                  totalPages: 10
                links:
                  self: /api/v1/books?page=1&limit=25
                  first: /api/v1/books?page=1&limit=25
                  last: /api/v1/books?page=10&limit=25
                  next: /api/v1/books?page=2&limit=25
                  prev: null
    head:
      summary: Check books collection availability
      operationId: head-books
      tags:
        - books
      parameters: *a462
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a books record (fake — not persisted)
      operationId: create-books
      tags:
        - books
      requestBody:
        required: true
        content:
          application/json:
            schema: &a468
              $ref: "#/components/schemas/BooksRecordInput"
            example: &a469
              title: Coniecto caput taceo
              slug: coniecto-caput-taceo-1
              authors: *a463
              isbn: "9441056558693"
              publisher: Vintage Books
              publishedYear: 2016
              pages: 472
              language: Spanish
              description: Certe dolores sit unde suadeo valeo at demulceo. Quisquam claudeo
                casso. Umbra sint arguo ulterius cogito inflammatio.
              coverUrl: https://picsum.photos/seed/book-1/400/600
              genres: *a464
              rating: 2.2
              ratingCount: 24096
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a465
              example: *a466
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/books/{id}:
    get:
      summary: Get one books record by id
      operationId: get-books-by-id
      tags:
        - books
      parameters: &a467
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a465
              example: *a466
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a books record exists
      operationId: head-books-by-id
      tags:
        - books
      parameters: *a467
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a books record (fake — not persisted)
      operationId: replace-books
      tags:
        - books
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a468
            example: *a469
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a465
              example: *a466
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a books record (fake — not persisted)
      operationId: patch-books
      tags:
        - books
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/BooksRecordPatch"
            example: *a469
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a465
              example: *a466
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a books record (fake — not persisted)
      operationId: delete-books
      tags:
        - books
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/book-favs:
    get:
      summary: List book-favs
      operationId: list-book-favs
      tags:
        - book-favs
      parameters: &a470
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a471
                      $ref: "#/components/schemas/BookFavsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a472
                    id: 1
                    userId: 1
                    bookId: 207
                    savedAt: 2025-05-18T16:37:52.930Z
                meta:
                  total: 391
                  page: 1
                  limit: 25
                  totalPages: 16
                links:
                  self: /api/v1/book-favs?page=1&limit=25
                  first: /api/v1/book-favs?page=1&limit=25
                  last: /api/v1/book-favs?page=16&limit=25
                  next: /api/v1/book-favs?page=2&limit=25
                  prev: null
    head:
      summary: Check book-favs collection availability
      operationId: head-book-favs
      tags:
        - book-favs
      parameters: *a470
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a book-favs record (fake — not persisted)
      operationId: create-book-favs
      tags:
        - book-favs
      requestBody:
        required: true
        content:
          application/json:
            schema: &a474
              $ref: "#/components/schemas/BookFavsRecordInput"
            example: &a475
              userId: 1
              bookId: 207
              savedAt: 2025-05-18T16:37:52.930Z
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a471
              example: *a472
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/book-favs/{id}:
    get:
      summary: Get one book-favs record by id
      operationId: get-book-favs-by-id
      tags:
        - book-favs
      parameters: &a473
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a471
              example: *a472
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a book-favs record exists
      operationId: head-book-favs-by-id
      tags:
        - book-favs
      parameters: *a473
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a book-favs record (fake — not persisted)
      operationId: replace-book-favs
      tags:
        - book-favs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a474
            example: *a475
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a471
              example: *a472
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a book-favs record (fake — not persisted)
      operationId: patch-book-favs
      tags:
        - book-favs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/BookFavsRecordPatch"
            example: *a475
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a471
              example: *a472
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a book-favs record (fake — not persisted)
      operationId: delete-book-favs
      tags:
        - book-favs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/movies:
    get:
      summary: List movies
      operationId: list-movies
      tags:
        - movies
      parameters: &a476
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a479
                      $ref: "#/components/schemas/MoviesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a480
                    id: 1
                    title: Cunae crebro
                    slug: cunae-crebro-1
                    year: 1976
                    runtimeMinutes: 79
                    director: Kate Kovacek
                    cast: &a477
                      - Ruben Lang III
                      - Wayne Wehner IV
                      - Nicolas Schimmel
                      - Rita Friesen
                      - Salvatore Wuckert
                      - Kimberly Roob
                      - Victoria Littel
                    genres: &a478
                      - comedy
                      - drama
                      - action
                    language: Spanish
                    plot: Corpus amor animadverto viridis tui. Cinis ullam denuo decipio urbs magni
                      xiphias denuncio tantum vindico. Sursum theatrum somnus
                      tepidus accusator attero cohaero sui aliquam alienus.
                      Vulnus uberrime tego congregatio arguo ventito capillus
                      spiritus nulla.
                    posterUrl: https://picsum.photos/seed/movie-1/400/600
                    rating: 5.7
                    ratingCount: 1800761
                    createdAt: 2025-09-27T09:51:52.518Z
                meta:
                  total: 200
                  page: 1
                  limit: 25
                  totalPages: 8
                links:
                  self: /api/v1/movies?page=1&limit=25
                  first: /api/v1/movies?page=1&limit=25
                  last: /api/v1/movies?page=8&limit=25
                  next: /api/v1/movies?page=2&limit=25
                  prev: null
    head:
      summary: Check movies collection availability
      operationId: head-movies
      tags:
        - movies
      parameters: *a476
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a movies record (fake — not persisted)
      operationId: create-movies
      tags:
        - movies
      requestBody:
        required: true
        content:
          application/json:
            schema: &a482
              $ref: "#/components/schemas/MoviesRecordInput"
            example: &a483
              title: Cunae crebro
              slug: cunae-crebro-1
              year: 1976
              runtimeMinutes: 79
              director: Kate Kovacek
              cast: *a477
              genres: *a478
              language: Spanish
              plot: Corpus amor animadverto viridis tui. Cinis ullam denuo decipio urbs magni
                xiphias denuncio tantum vindico. Sursum theatrum somnus tepidus
                accusator attero cohaero sui aliquam alienus. Vulnus uberrime
                tego congregatio arguo ventito capillus spiritus nulla.
              posterUrl: https://picsum.photos/seed/movie-1/400/600
              rating: 5.7
              ratingCount: 1800761
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a479
              example: *a480
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/movies/{id}:
    get:
      summary: Get one movies record by id
      operationId: get-movies-by-id
      tags:
        - movies
      parameters: &a481
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a479
              example: *a480
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a movies record exists
      operationId: head-movies-by-id
      tags:
        - movies
      parameters: *a481
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a movies record (fake — not persisted)
      operationId: replace-movies
      tags:
        - movies
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a482
            example: *a483
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a479
              example: *a480
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a movies record (fake — not persisted)
      operationId: patch-movies
      tags:
        - movies
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/MoviesRecordPatch"
            example: *a483
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a479
              example: *a480
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a movies record (fake — not persisted)
      operationId: delete-movies
      tags:
        - movies
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/tv-shows:
    get:
      summary: List tv-shows
      operationId: list-tv-shows
      tags:
        - tv-shows
      parameters: &a484
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a486
                      $ref: "#/components/schemas/TvShowsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a487
                    id: 1
                    title: Coaegresco ancilla terebro confero
                    slug: coaegresco-ancilla-terebro-confero-1
                    firstAired: 2018-08-04
                    lastAired: 2025-11-08
                    seasonCount: 2
                    episodeCount: 21
                    genres: &a485
                      - adventure
                      - mystery
                    language: English
                    posterUrl: https://picsum.photos/seed/tvshow-1/400/600
                    rating: 8.6
                    ratingCount: 492051
                    status: ended
                    createdAt: 2023-09-01T01:43:29.348Z
                meta:
                  total: 100
                  page: 1
                  limit: 25
                  totalPages: 4
                links:
                  self: /api/v1/tv-shows?page=1&limit=25
                  first: /api/v1/tv-shows?page=1&limit=25
                  last: /api/v1/tv-shows?page=4&limit=25
                  next: /api/v1/tv-shows?page=2&limit=25
                  prev: null
    head:
      summary: Check tv-shows collection availability
      operationId: head-tv-shows
      tags:
        - tv-shows
      parameters: *a484
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a tv-shows record (fake — not persisted)
      operationId: create-tv-shows
      tags:
        - tv-shows
      requestBody:
        required: true
        content:
          application/json:
            schema: &a489
              $ref: "#/components/schemas/TvShowsRecordInput"
            example: &a490
              title: Coaegresco ancilla terebro confero
              slug: coaegresco-ancilla-terebro-confero-1
              firstAired: 2018-08-04
              lastAired: 2025-11-08
              seasonCount: 2
              episodeCount: 21
              genres: *a485
              language: English
              posterUrl: https://picsum.photos/seed/tvshow-1/400/600
              rating: 8.6
              ratingCount: 492051
              status: ended
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a486
              example: *a487
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/tv-shows/{id}:
    get:
      summary: Get one tv-shows record by id
      operationId: get-tv-shows-by-id
      tags:
        - tv-shows
      parameters: &a488
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a486
              example: *a487
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a tv-shows record exists
      operationId: head-tv-shows-by-id
      tags:
        - tv-shows
      parameters: *a488
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a tv-shows record (fake — not persisted)
      operationId: replace-tv-shows
      tags:
        - tv-shows
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a489
            example: *a490
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a486
              example: *a487
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a tv-shows record (fake — not persisted)
      operationId: patch-tv-shows
      tags:
        - tv-shows
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TvShowsRecordPatch"
            example: *a490
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a486
              example: *a487
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a tv-shows record (fake — not persisted)
      operationId: delete-tv-shows
      tags:
        - tv-shows
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/tv-episodes:
    get:
      summary: List tv-episodes
      operationId: list-tv-episodes
      tags:
        - tv-episodes
      parameters: &a491
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a492
                      $ref: "#/components/schemas/TvEpisodesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a493
                    id: 1
                    tvShowId: 1
                    title: Tero suggero cervus acquiro uter
                    slug: tero-suggero-cervus-acquiro-uter-1
                    seasonNumber: 1
                    episodeNumber: 1
                    airDate: 2020-12-02
                    runtimeMinutes: 26
                    description: Tunc uterque architecto utpote adficio cognomen tubineus adeo.
                      Pecto triumphus adstringo civitas utrimque comprehendo.
                    createdAt: 2025-02-05T16:58:37.658Z
                meta:
                  total: 12102
                  page: 1
                  limit: 25
                  totalPages: 485
                links:
                  self: /api/v1/tv-episodes?page=1&limit=25
                  first: /api/v1/tv-episodes?page=1&limit=25
                  last: /api/v1/tv-episodes?page=485&limit=25
                  next: /api/v1/tv-episodes?page=2&limit=25
                  prev: null
    head:
      summary: Check tv-episodes collection availability
      operationId: head-tv-episodes
      tags:
        - tv-episodes
      parameters: *a491
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a tv-episodes record (fake — not persisted)
      operationId: create-tv-episodes
      tags:
        - tv-episodes
      requestBody:
        required: true
        content:
          application/json:
            schema: &a495
              $ref: "#/components/schemas/TvEpisodesRecordInput"
            example: &a496
              tvShowId: 1
              title: Tero suggero cervus acquiro uter
              slug: tero-suggero-cervus-acquiro-uter-1
              seasonNumber: 1
              episodeNumber: 1
              airDate: 2020-12-02
              runtimeMinutes: 26
              description: Tunc uterque architecto utpote adficio cognomen tubineus adeo.
                Pecto triumphus adstringo civitas utrimque comprehendo.
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a492
              example: *a493
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/tv-episodes/{id}:
    get:
      summary: Get one tv-episodes record by id
      operationId: get-tv-episodes-by-id
      tags:
        - tv-episodes
      parameters: &a494
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a492
              example: *a493
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a tv-episodes record exists
      operationId: head-tv-episodes-by-id
      tags:
        - tv-episodes
      parameters: *a494
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a tv-episodes record (fake — not persisted)
      operationId: replace-tv-episodes
      tags:
        - tv-episodes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a495
            example: *a496
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a492
              example: *a493
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a tv-episodes record (fake — not persisted)
      operationId: patch-tv-episodes
      tags:
        - tv-episodes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TvEpisodesRecordPatch"
            example: *a496
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a492
              example: *a493
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a tv-episodes record (fake — not persisted)
      operationId: delete-tv-episodes
      tags:
        - tv-episodes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/artists:
    get:
      summary: List artists
      operationId: list-artists
      tags:
        - artists
      parameters: &a497
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a499
                      $ref: "#/components/schemas/ArtistsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a500
                    id: 1
                    name: Rolando Kulas
                    slug: rolando-kulas-1
                    bio: Tunc turpis odit amitto advoco aliquam. Cimentarius callide arx clam thymum
                      quo. Eum adsum brevis demens laborum delectatio
                      necessitatibus deludo. Chirographum creo ullus casso
                      cribro cubitum caute nihil.
                    genres: &a498
                      - r&b
                    imageUrl: https://picsum.photos/seed/artist-1/400/400
                    monthlyListeners: 40109765
                    formedYear: 2010
                    isVerified: true
                    createdAt: 2022-11-03T13:28:31.476Z
                meta:
                  total: 100
                  page: 1
                  limit: 25
                  totalPages: 4
                links:
                  self: /api/v1/artists?page=1&limit=25
                  first: /api/v1/artists?page=1&limit=25
                  last: /api/v1/artists?page=4&limit=25
                  next: /api/v1/artists?page=2&limit=25
                  prev: null
    head:
      summary: Check artists collection availability
      operationId: head-artists
      tags:
        - artists
      parameters: *a497
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a artists record (fake — not persisted)
      operationId: create-artists
      tags:
        - artists
      requestBody:
        required: true
        content:
          application/json:
            schema: &a502
              $ref: "#/components/schemas/ArtistsRecordInput"
            example: &a503
              name: Rolando Kulas
              slug: rolando-kulas-1
              bio: Tunc turpis odit amitto advoco aliquam. Cimentarius callide arx clam thymum
                quo. Eum adsum brevis demens laborum delectatio necessitatibus
                deludo. Chirographum creo ullus casso cribro cubitum caute
                nihil.
              genres: *a498
              imageUrl: https://picsum.photos/seed/artist-1/400/400
              monthlyListeners: 40109765
              formedYear: 2010
              isVerified: true
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a499
              example: *a500
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/artists/{id}:
    get:
      summary: Get one artists record by id
      operationId: get-artists-by-id
      tags:
        - artists
      parameters: &a501
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a499
              example: *a500
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a artists record exists
      operationId: head-artists-by-id
      tags:
        - artists
      parameters: *a501
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a artists record (fake — not persisted)
      operationId: replace-artists
      tags:
        - artists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a502
            example: *a503
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a499
              example: *a500
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a artists record (fake — not persisted)
      operationId: patch-artists
      tags:
        - artists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ArtistsRecordPatch"
            example: *a503
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a499
              example: *a500
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a artists record (fake — not persisted)
      operationId: delete-artists
      tags:
        - artists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/albums:
    get:
      summary: List albums
      operationId: list-albums
      tags:
        - albums
      parameters: &a504
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a506
                      $ref: "#/components/schemas/AlbumsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a507
                    id: 1
                    artistId: 1
                    title: Addo
                    slug: addo-1
                    releaseDate: 2004-09-07
                    trackCount: 9
                    durationSeconds: 3365
                    genres: &a505
                      - soul
                      - electronic
                      - folk
                    coverUrl: https://picsum.photos/seed/album-1/500/500
                    createdAt: 2025-10-18T04:51:02.326Z
                meta:
                  total: 282
                  page: 1
                  limit: 25
                  totalPages: 12
                links:
                  self: /api/v1/albums?page=1&limit=25
                  first: /api/v1/albums?page=1&limit=25
                  last: /api/v1/albums?page=12&limit=25
                  next: /api/v1/albums?page=2&limit=25
                  prev: null
    head:
      summary: Check albums collection availability
      operationId: head-albums
      tags:
        - albums
      parameters: *a504
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a albums record (fake — not persisted)
      operationId: create-albums
      tags:
        - albums
      requestBody:
        required: true
        content:
          application/json:
            schema: &a509
              $ref: "#/components/schemas/AlbumsRecordInput"
            example: &a510
              artistId: 1
              title: Addo
              slug: addo-1
              releaseDate: 2004-09-07
              trackCount: 9
              durationSeconds: 3365
              genres: *a505
              coverUrl: https://picsum.photos/seed/album-1/500/500
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a506
              example: *a507
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/albums/{id}:
    get:
      summary: Get one albums record by id
      operationId: get-albums-by-id
      tags:
        - albums
      parameters: &a508
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a506
              example: *a507
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a albums record exists
      operationId: head-albums-by-id
      tags:
        - albums
      parameters: *a508
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a albums record (fake — not persisted)
      operationId: replace-albums
      tags:
        - albums
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a509
            example: *a510
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a506
              example: *a507
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a albums record (fake — not persisted)
      operationId: patch-albums
      tags:
        - albums
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AlbumsRecordPatch"
            example: *a510
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a506
              example: *a507
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a albums record (fake — not persisted)
      operationId: delete-albums
      tags:
        - albums
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/songs:
    get:
      summary: List songs
      operationId: list-songs
      tags:
        - songs
      parameters: &a511
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a512
                      $ref: "#/components/schemas/SongsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a513
                    id: 1
                    albumId: 1
                    artistId: 1
                    title: Will It Go Round In Circles
                    slug: will-it-go-round-in-circles-1
                    trackNumber: 1
                    durationSeconds: 143
                    isExplicit: false
                    playCount: 17622831
                    createdAt: 2022-06-01T17:10:51.068Z
                meta:
                  total: 2978
                  page: 1
                  limit: 25
                  totalPages: 120
                links:
                  self: /api/v1/songs?page=1&limit=25
                  first: /api/v1/songs?page=1&limit=25
                  last: /api/v1/songs?page=120&limit=25
                  next: /api/v1/songs?page=2&limit=25
                  prev: null
    head:
      summary: Check songs collection availability
      operationId: head-songs
      tags:
        - songs
      parameters: *a511
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a songs record (fake — not persisted)
      operationId: create-songs
      tags:
        - songs
      requestBody:
        required: true
        content:
          application/json:
            schema: &a515
              $ref: "#/components/schemas/SongsRecordInput"
            example: &a516
              albumId: 1
              artistId: 1
              title: Will It Go Round In Circles
              slug: will-it-go-round-in-circles-1
              trackNumber: 1
              durationSeconds: 143
              isExplicit: false
              playCount: 17622831
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a512
              example: *a513
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/songs/{id}:
    get:
      summary: Get one songs record by id
      operationId: get-songs-by-id
      tags:
        - songs
      parameters: &a514
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a512
              example: *a513
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a songs record exists
      operationId: head-songs-by-id
      tags:
        - songs
      parameters: *a514
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a songs record (fake — not persisted)
      operationId: replace-songs
      tags:
        - songs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a515
            example: *a516
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a512
              example: *a513
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a songs record (fake — not persisted)
      operationId: patch-songs
      tags:
        - songs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SongsRecordPatch"
            example: *a516
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a512
              example: *a513
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a songs record (fake — not persisted)
      operationId: delete-songs
      tags:
        - songs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/playlists:
    get:
      summary: List playlists
      operationId: list-playlists
      tags:
        - playlists
      parameters: &a517
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a519
                      $ref: "#/components/schemas/PlaylistsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a520
                    id: 1
                    userId: 43
                    name: When Doves Cry Mix
                    slug: when-doves-cry-mix-1
                    description: Virgo abstergo dolore ager ex autem conspergo vesper tamisium cura
                      canis.
                    songIds: &a518
                      - 1095
                      - 1910
                      - 2416
                      - 1482
                      - 416
                      - 2616
                      - 1192
                      - 1287
                      - 855
                      - 153
                      - 21
                      - 417
                      - 1382
                    isPublic: true
                    coverUrl: https://picsum.photos/seed/playlist-1/500/500
                    createdAt: 2025-08-18T18:59:01.651Z
                    updatedAt: 2025-08-19T04:35:38.799Z
                meta:
                  total: 200
                  page: 1
                  limit: 25
                  totalPages: 8
                links:
                  self: /api/v1/playlists?page=1&limit=25
                  first: /api/v1/playlists?page=1&limit=25
                  last: /api/v1/playlists?page=8&limit=25
                  next: /api/v1/playlists?page=2&limit=25
                  prev: null
    head:
      summary: Check playlists collection availability
      operationId: head-playlists
      tags:
        - playlists
      parameters: *a517
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a playlists record (fake — not persisted)
      operationId: create-playlists
      tags:
        - playlists
      requestBody:
        required: true
        content:
          application/json:
            schema: &a522
              $ref: "#/components/schemas/PlaylistsRecordInput"
            example: &a523
              userId: 43
              name: When Doves Cry Mix
              slug: when-doves-cry-mix-1
              description: Virgo abstergo dolore ager ex autem conspergo vesper tamisium cura
                canis.
              songIds: *a518
              isPublic: true
              coverUrl: https://picsum.photos/seed/playlist-1/500/500
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a519
              example: *a520
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/playlists/{id}:
    get:
      summary: Get one playlists record by id
      operationId: get-playlists-by-id
      tags:
        - playlists
      parameters: &a521
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a519
              example: *a520
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a playlists record exists
      operationId: head-playlists-by-id
      tags:
        - playlists
      parameters: *a521
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a playlists record (fake — not persisted)
      operationId: replace-playlists
      tags:
        - playlists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a522
            example: *a523
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a519
              example: *a520
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a playlists record (fake — not persisted)
      operationId: patch-playlists
      tags:
        - playlists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PlaylistsRecordPatch"
            example: *a523
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a519
              example: *a520
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a playlists record (fake — not persisted)
      operationId: delete-playlists
      tags:
        - playlists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/exercises:
    get:
      summary: List exercises
      operationId: list-exercises
      tags:
        - exercises
      parameters: &a524
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a527
                      $ref: "#/components/schemas/ExercisesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a528
                    id: 1
                    name: Bench Press
                    slug: bench-press-1
                    muscleGroup: chest
                    equipment: &a525
                      - resistance band
                    description: Astrum aliquid defaeco assentator deinde vester doloremque
                      stillicidium stabilis abeo desipio acervus tergeo voveo
                      ancilla amplexus amissio ago auctus.
                    instructions: &a526
                      - Laudantium vulticulus color sub candidus utrimque deleo nemo at
                        defluo auctor umquam conventus acer rem.
                      - Denique patruus theca cultura atrocitas compello sponte victus.
                      - Caelum illum commodo aedificium ventito ipsa pecto sub templum
                        thesis comis claustrum.
                      - Vitium terga carcer deleniti vinculum.
                      - Teneo turbo ascit correptius administratio vulgus dapifer deduco.
                      - Surgo verus perspiciatis censura depopulo tres denique infit
                        accusamus abundans convoco pel vero arbitro.
                    createdAt: 2025-11-21T12:14:44.633Z
                meta:
                  total: 100
                  page: 1
                  limit: 25
                  totalPages: 4
                links:
                  self: /api/v1/exercises?page=1&limit=25
                  first: /api/v1/exercises?page=1&limit=25
                  last: /api/v1/exercises?page=4&limit=25
                  next: /api/v1/exercises?page=2&limit=25
                  prev: null
    head:
      summary: Check exercises collection availability
      operationId: head-exercises
      tags:
        - exercises
      parameters: *a524
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a exercises record (fake — not persisted)
      operationId: create-exercises
      tags:
        - exercises
      requestBody:
        required: true
        content:
          application/json:
            schema: &a530
              $ref: "#/components/schemas/ExercisesRecordInput"
            example: &a531
              name: Bench Press
              slug: bench-press-1
              muscleGroup: chest
              equipment: *a525
              description: Astrum aliquid defaeco assentator deinde vester doloremque
                stillicidium stabilis abeo desipio acervus tergeo voveo ancilla
                amplexus amissio ago auctus.
              instructions: *a526
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a527
              example: *a528
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/exercises/{id}:
    get:
      summary: Get one exercises record by id
      operationId: get-exercises-by-id
      tags:
        - exercises
      parameters: &a529
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a527
              example: *a528
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a exercises record exists
      operationId: head-exercises-by-id
      tags:
        - exercises
      parameters: *a529
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a exercises record (fake — not persisted)
      operationId: replace-exercises
      tags:
        - exercises
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a530
            example: *a531
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a527
              example: *a528
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a exercises record (fake — not persisted)
      operationId: patch-exercises
      tags:
        - exercises
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ExercisesRecordPatch"
            example: *a531
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a527
              example: *a528
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a exercises record (fake — not persisted)
      operationId: delete-exercises
      tags:
        - exercises
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/workouts:
    get:
      summary: List workouts
      operationId: list-workouts
      tags:
        - workouts
      parameters: &a532
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a533
                      $ref: "#/components/schemas/WorkoutsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a534
                    id: 1
                    userId: 1
                    kind: sports
                    name: HIIT Routine
                    durationMinutes: 17
                    caloriesBurned: 233
                    intensity: very_high
                    notes: Felt strong today
                    performedAt: 2026-04-19T03:56:37.746Z
                    createdAt: 2026-04-19T04:42:30.957Z
                meta:
                  total: 620
                  page: 1
                  limit: 25
                  totalPages: 25
                links:
                  self: /api/v1/workouts?page=1&limit=25
                  first: /api/v1/workouts?page=1&limit=25
                  last: /api/v1/workouts?page=25&limit=25
                  next: /api/v1/workouts?page=2&limit=25
                  prev: null
    head:
      summary: Check workouts collection availability
      operationId: head-workouts
      tags:
        - workouts
      parameters: *a532
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a workouts record (fake — not persisted)
      operationId: create-workouts
      tags:
        - workouts
      requestBody:
        required: true
        content:
          application/json:
            schema: &a536
              $ref: "#/components/schemas/WorkoutsRecordInput"
            example: &a537
              userId: 1
              kind: sports
              name: HIIT Routine
              durationMinutes: 17
              caloriesBurned: 233
              intensity: very_high
              notes: Felt strong today
              performedAt: 2026-04-19T03:56:37.746Z
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a533
              example: *a534
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/workouts/{id}:
    get:
      summary: Get one workouts record by id
      operationId: get-workouts-by-id
      tags:
        - workouts
      parameters: &a535
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a533
              example: *a534
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a workouts record exists
      operationId: head-workouts-by-id
      tags:
        - workouts
      parameters: *a535
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a workouts record (fake — not persisted)
      operationId: replace-workouts
      tags:
        - workouts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a536
            example: *a537
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a533
              example: *a534
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a workouts record (fake — not persisted)
      operationId: patch-workouts
      tags:
        - workouts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WorkoutsRecordPatch"
            example: *a537
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a533
              example: *a534
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a workouts record (fake — not persisted)
      operationId: delete-workouts
      tags:
        - workouts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/meals:
    get:
      summary: List meals
      operationId: list-meals
      tags:
        - meals
      parameters: &a538
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a539
                      $ref: "#/components/schemas/MealsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a540
                    id: 1
                    userId: 1
                    name: Baked Salmon
                    kind: dinner
                    calories: 565
                    proteinGrams: 53.6
                    carbsGrams: 18.6
                    fatGrams: 30.7
                    eatenAt: 2025-09-09T20:25:35.188Z
                    createdAt: 2025-09-09T20:49:18.988Z
                meta:
                  total: 1016
                  page: 1
                  limit: 25
                  totalPages: 41
                links:
                  self: /api/v1/meals?page=1&limit=25
                  first: /api/v1/meals?page=1&limit=25
                  last: /api/v1/meals?page=41&limit=25
                  next: /api/v1/meals?page=2&limit=25
                  prev: null
    head:
      summary: Check meals collection availability
      operationId: head-meals
      tags:
        - meals
      parameters: *a538
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a meals record (fake — not persisted)
      operationId: create-meals
      tags:
        - meals
      requestBody:
        required: true
        content:
          application/json:
            schema: &a542
              $ref: "#/components/schemas/MealsRecordInput"
            example: &a543
              userId: 1
              name: Baked Salmon
              kind: dinner
              calories: 565
              proteinGrams: 53.6
              carbsGrams: 18.6
              fatGrams: 30.7
              eatenAt: 2025-09-09T20:25:35.188Z
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a539
              example: *a540
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/meals/{id}:
    get:
      summary: Get one meals record by id
      operationId: get-meals-by-id
      tags:
        - meals
      parameters: &a541
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a539
              example: *a540
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a meals record exists
      operationId: head-meals-by-id
      tags:
        - meals
      parameters: *a541
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a meals record (fake — not persisted)
      operationId: replace-meals
      tags:
        - meals
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a542
            example: *a543
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a539
              example: *a540
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a meals record (fake — not persisted)
      operationId: patch-meals
      tags:
        - meals
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/MealsRecordPatch"
            example: *a543
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a539
              example: *a540
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a meals record (fake — not persisted)
      operationId: delete-meals
      tags:
        - meals
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/nutrition-logs:
    get:
      summary: List nutrition-logs
      operationId: list-nutrition-logs
      tags:
        - nutrition-logs
      parameters: &a544
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a545
                      $ref: "#/components/schemas/NutritionLogsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a546
                    id: 1
                    userId: 1
                    date: 2026-04-16
                    totalCalories: 2795
                    totalProteinGrams: 82.6
                    totalCarbsGrams: 393.1
                    totalFatGrams: 99.1
                    waterMl: 1137
                    createdAt: 2026-04-16T23:59:59.999Z
                meta:
                  total: 496
                  page: 1
                  limit: 25
                  totalPages: 20
                links:
                  self: /api/v1/nutrition-logs?page=1&limit=25
                  first: /api/v1/nutrition-logs?page=1&limit=25
                  last: /api/v1/nutrition-logs?page=20&limit=25
                  next: /api/v1/nutrition-logs?page=2&limit=25
                  prev: null
    head:
      summary: Check nutrition-logs collection availability
      operationId: head-nutrition-logs
      tags:
        - nutrition-logs
      parameters: *a544
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a nutrition-logs record (fake — not persisted)
      operationId: create-nutrition-logs
      tags:
        - nutrition-logs
      requestBody:
        required: true
        content:
          application/json:
            schema: &a548
              $ref: "#/components/schemas/NutritionLogsRecordInput"
            example: &a549
              userId: 1
              date: 2026-04-16
              totalCalories: 2795
              totalProteinGrams: 82.6
              totalCarbsGrams: 393.1
              totalFatGrams: 99.1
              waterMl: 1137
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a545
              example: *a546
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/nutrition-logs/{id}:
    get:
      summary: Get one nutrition-logs record by id
      operationId: get-nutrition-logs-by-id
      tags:
        - nutrition-logs
      parameters: &a547
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a545
              example: *a546
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a nutrition-logs record exists
      operationId: head-nutrition-logs-by-id
      tags:
        - nutrition-logs
      parameters: *a547
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a nutrition-logs record (fake — not persisted)
      operationId: replace-nutrition-logs
      tags:
        - nutrition-logs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a548
            example: *a549
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a545
              example: *a546
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a nutrition-logs record (fake — not persisted)
      operationId: patch-nutrition-logs
      tags:
        - nutrition-logs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NutritionLogsRecordPatch"
            example: *a549
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a545
              example: *a546
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a nutrition-logs record (fake — not persisted)
      operationId: delete-nutrition-logs
      tags:
        - nutrition-logs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/goals:
    get:
      summary: List goals
      operationId: list-goals
      tags:
        - goals
      parameters: &a550
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a551
                      $ref: "#/components/schemas/GoalsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a552
                    id: 1
                    userId: 1
                    name: Lose weight
                    category: weight
                    targetValue: 76.2
                    currentValue: 54.4
                    unit: kg
                    deadline: null
                    isCompleted: false
                    createdAt: 2025-09-18T00:27:21.129Z
                meta:
                  total: 244
                  page: 1
                  limit: 25
                  totalPages: 10
                links:
                  self: /api/v1/goals?page=1&limit=25
                  first: /api/v1/goals?page=1&limit=25
                  last: /api/v1/goals?page=10&limit=25
                  next: /api/v1/goals?page=2&limit=25
                  prev: null
    head:
      summary: Check goals collection availability
      operationId: head-goals
      tags:
        - goals
      parameters: *a550
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a goals record (fake — not persisted)
      operationId: create-goals
      tags:
        - goals
      requestBody:
        required: true
        content:
          application/json:
            schema: &a554
              $ref: "#/components/schemas/GoalsRecordInput"
            example: &a555
              userId: 1
              name: Lose weight
              category: weight
              targetValue: 76.2
              currentValue: 54.4
              unit: kg
              deadline: null
              isCompleted: false
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a551
              example: *a552
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/goals/{id}:
    get:
      summary: Get one goals record by id
      operationId: get-goals-by-id
      tags:
        - goals
      parameters: &a553
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a551
              example: *a552
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a goals record exists
      operationId: head-goals-by-id
      tags:
        - goals
      parameters: *a553
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a goals record (fake — not persisted)
      operationId: replace-goals
      tags:
        - goals
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a554
            example: *a555
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a551
              example: *a552
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a goals record (fake — not persisted)
      operationId: patch-goals
      tags:
        - goals
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GoalsRecordPatch"
            example: *a555
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a551
              example: *a552
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a goals record (fake — not persisted)
      operationId: delete-goals
      tags:
        - goals
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/measurements:
    get:
      summary: List measurements
      operationId: list-measurements
      tags:
        - measurements
      parameters: &a556
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a557
                      $ref: "#/components/schemas/MeasurementsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a558
                    id: 1
                    userId: 1
                    kind: resting_hr
                    value: 48.9
                    unit: bpm
                    measuredAt: 2025-07-08T07:02:41.682Z
                    createdAt: 2025-07-08T07:11:11.881Z
                meta:
                  total: 760
                  page: 1
                  limit: 25
                  totalPages: 31
                links:
                  self: /api/v1/measurements?page=1&limit=25
                  first: /api/v1/measurements?page=1&limit=25
                  last: /api/v1/measurements?page=31&limit=25
                  next: /api/v1/measurements?page=2&limit=25
                  prev: null
    head:
      summary: Check measurements collection availability
      operationId: head-measurements
      tags:
        - measurements
      parameters: *a556
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a measurements record (fake — not persisted)
      operationId: create-measurements
      tags:
        - measurements
      requestBody:
        required: true
        content:
          application/json:
            schema: &a560
              $ref: "#/components/schemas/MeasurementsRecordInput"
            example: &a561
              userId: 1
              kind: resting_hr
              value: 48.9
              unit: bpm
              measuredAt: 2025-07-08T07:02:41.682Z
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a557
              example: *a558
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/measurements/{id}:
    get:
      summary: Get one measurements record by id
      operationId: get-measurements-by-id
      tags:
        - measurements
      parameters: &a559
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a557
              example: *a558
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a measurements record exists
      operationId: head-measurements-by-id
      tags:
        - measurements
      parameters: *a559
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a measurements record (fake — not persisted)
      operationId: replace-measurements
      tags:
        - measurements
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a560
            example: *a561
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a557
              example: *a558
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a measurements record (fake — not persisted)
      operationId: patch-measurements
      tags:
        - measurements
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/MeasurementsRecordPatch"
            example: *a561
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a557
              example: *a558
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a measurements record (fake — not persisted)
      operationId: delete-measurements
      tags:
        - measurements
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/sleep-entries:
    get:
      summary: List sleep-entries
      operationId: list-sleep-entries
      tags:
        - sleep-entries
      parameters: &a562
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a563
                      $ref: "#/components/schemas/SleepEntriesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a564
                    id: 1
                    userId: 1
                    date: 2025-06-21
                    sleepAt: 2025-06-21T23:11:00.000Z
                    wakeAt: 2025-06-22T05:53:00.000Z
                    durationMinutes: 402
                    quality: 3
                    createdAt: 2025-06-22T06:31:37.020Z
                meta:
                  total: 773
                  page: 1
                  limit: 25
                  totalPages: 31
                links:
                  self: /api/v1/sleep-entries?page=1&limit=25
                  first: /api/v1/sleep-entries?page=1&limit=25
                  last: /api/v1/sleep-entries?page=31&limit=25
                  next: /api/v1/sleep-entries?page=2&limit=25
                  prev: null
    head:
      summary: Check sleep-entries collection availability
      operationId: head-sleep-entries
      tags:
        - sleep-entries
      parameters: *a562
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a sleep-entries record (fake — not persisted)
      operationId: create-sleep-entries
      tags:
        - sleep-entries
      requestBody:
        required: true
        content:
          application/json:
            schema: &a566
              $ref: "#/components/schemas/SleepEntriesRecordInput"
            example: &a567
              userId: 1
              date: 2025-06-21
              sleepAt: 2025-06-21T23:11:00.000Z
              wakeAt: 2025-06-22T05:53:00.000Z
              durationMinutes: 402
              quality: 3
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a563
              example: *a564
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/sleep-entries/{id}:
    get:
      summary: Get one sleep-entries record by id
      operationId: get-sleep-entries-by-id
      tags:
        - sleep-entries
      parameters: &a565
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a563
              example: *a564
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a sleep-entries record exists
      operationId: head-sleep-entries-by-id
      tags:
        - sleep-entries
      parameters: *a565
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a sleep-entries record (fake — not persisted)
      operationId: replace-sleep-entries
      tags:
        - sleep-entries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a566
            example: *a567
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a563
              example: *a564
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a sleep-entries record (fake — not persisted)
      operationId: patch-sleep-entries
      tags:
        - sleep-entries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SleepEntriesRecordPatch"
            example: *a567
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a563
              example: *a564
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a sleep-entries record (fake — not persisted)
      operationId: delete-sleep-entries
      tags:
        - sleep-entries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/courses:
    get:
      summary: List courses
      operationId: list-courses
      tags:
        - courses
      parameters: &a568
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a569
                      $ref: "#/components/schemas/CoursesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a570
                    id: 1
                    instructorUserId: 38
                    title: The Complete Guide to SEO
                    slug: the-complete-guide-to-seo-1
                    description: Dolorum demergo appello sopor vere terra spargo vinculum tollo.
                      Vinum ars tandem cerno sunt dignissimos.
                    category: marketing
                    difficulty: intermediate
                    language: English
                    durationHours: 24.5
                    priceFrom: 182.64
                    currency: USD
                    thumbnailUrl: https://picsum.photos/seed/course-1/800/450
                    rating: 4.2
                    ratingCount: 92
                    enrollmentCount: 191
                    isPublished: true
                    createdAt: 2024-07-10T05:31:49.481Z
                    updatedAt: 2024-08-25T23:52:33.141Z
                meta:
                  total: 80
                  page: 1
                  limit: 25
                  totalPages: 4
                links:
                  self: /api/v1/courses?page=1&limit=25
                  first: /api/v1/courses?page=1&limit=25
                  last: /api/v1/courses?page=4&limit=25
                  next: /api/v1/courses?page=2&limit=25
                  prev: null
    head:
      summary: Check courses collection availability
      operationId: head-courses
      tags:
        - courses
      parameters: *a568
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a courses record (fake — not persisted)
      operationId: create-courses
      tags:
        - courses
      requestBody:
        required: true
        content:
          application/json:
            schema: &a572
              $ref: "#/components/schemas/CoursesRecordInput"
            example: &a573
              instructorUserId: 38
              title: The Complete Guide to SEO
              slug: the-complete-guide-to-seo-1
              description: Dolorum demergo appello sopor vere terra spargo vinculum tollo.
                Vinum ars tandem cerno sunt dignissimos.
              category: marketing
              difficulty: intermediate
              language: English
              durationHours: 24.5
              priceFrom: 182.64
              currency: USD
              thumbnailUrl: https://picsum.photos/seed/course-1/800/450
              rating: 4.2
              ratingCount: 92
              enrollmentCount: 191
              isPublished: true
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a569
              example: *a570
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/courses/{id}:
    get:
      summary: Get one courses record by id
      operationId: get-courses-by-id
      tags:
        - courses
      parameters: &a571
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a569
              example: *a570
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a courses record exists
      operationId: head-courses-by-id
      tags:
        - courses
      parameters: *a571
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a courses record (fake — not persisted)
      operationId: replace-courses
      tags:
        - courses
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a572
            example: *a573
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a569
              example: *a570
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a courses record (fake — not persisted)
      operationId: patch-courses
      tags:
        - courses
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CoursesRecordPatch"
            example: *a573
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a569
              example: *a570
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a courses record (fake — not persisted)
      operationId: delete-courses
      tags:
        - courses
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/lessons:
    get:
      summary: List lessons
      operationId: list-lessons
      tags:
        - lessons
      parameters: &a574
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a575
                      $ref: "#/components/schemas/LessonsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a576
                    id: 1
                    courseId: 1
                    title: Exploring the Basics
                    slug: exploring-the-basics-c1-0
                    description: Vilis accusamus thymbra. Ex convoco angelus abscido apostolus.
                    content: >-
                      Antiquus coruscus mollitia. Laboriosam ipsa dapifer
                      thymbra. Reiciendis non acquiro stipes dapifer.


                      Comburo bene corrigo esse una casus velut deinde. Arbustum
                      tristis culpa coadunatio angelus auxilium curo. Thymum
                      animadverto terreo eligendi uterque vicissitudo.


                      Molestias doloremque certus consuasor fuga. Deprecator
                      benevolentia voro absum valeo. Vitae aufero cuppedia spero
                      pauper virga verto earum acsi.
                    sortOrder: 0
                    durationMinutes: 47
                    videoUrl: https://example.com/courses/1/lessons/1.mp4
                    createdAt: 2024-08-10T10:49:02.504Z
                    updatedAt: 2024-08-21T01:15:59.960Z
                meta:
                  total: 545
                  page: 1
                  limit: 25
                  totalPages: 22
                links:
                  self: /api/v1/lessons?page=1&limit=25
                  first: /api/v1/lessons?page=1&limit=25
                  last: /api/v1/lessons?page=22&limit=25
                  next: /api/v1/lessons?page=2&limit=25
                  prev: null
    head:
      summary: Check lessons collection availability
      operationId: head-lessons
      tags:
        - lessons
      parameters: *a574
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a lessons record (fake — not persisted)
      operationId: create-lessons
      tags:
        - lessons
      requestBody:
        required: true
        content:
          application/json:
            schema: &a578
              $ref: "#/components/schemas/LessonsRecordInput"
            example: &a579
              courseId: 1
              title: Exploring the Basics
              slug: exploring-the-basics-c1-0
              description: Vilis accusamus thymbra. Ex convoco angelus abscido apostolus.
              content: >-
                Antiquus coruscus mollitia. Laboriosam ipsa dapifer thymbra.
                Reiciendis non acquiro stipes dapifer.


                Comburo bene corrigo esse una casus velut deinde. Arbustum
                tristis culpa coadunatio angelus auxilium curo. Thymum
                animadverto terreo eligendi uterque vicissitudo.


                Molestias doloremque certus consuasor fuga. Deprecator
                benevolentia voro absum valeo. Vitae aufero cuppedia spero
                pauper virga verto earum acsi.
              sortOrder: 0
              durationMinutes: 47
              videoUrl: https://example.com/courses/1/lessons/1.mp4
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a575
              example: *a576
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/lessons/{id}:
    get:
      summary: Get one lessons record by id
      operationId: get-lessons-by-id
      tags:
        - lessons
      parameters: &a577
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a575
              example: *a576
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a lessons record exists
      operationId: head-lessons-by-id
      tags:
        - lessons
      parameters: *a577
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a lessons record (fake — not persisted)
      operationId: replace-lessons
      tags:
        - lessons
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a578
            example: *a579
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a575
              example: *a576
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a lessons record (fake — not persisted)
      operationId: patch-lessons
      tags:
        - lessons
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LessonsRecordPatch"
            example: *a579
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a575
              example: *a576
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a lessons record (fake — not persisted)
      operationId: delete-lessons
      tags:
        - lessons
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/enrollments:
    get:
      summary: List enrollments
      operationId: list-enrollments
      tags:
        - enrollments
      parameters: &a580
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a581
                      $ref: "#/components/schemas/EnrollmentsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a582
                    id: 1
                    userId: 1
                    courseId: 16
                    enrolledAt: 2025-10-15T22:31:55.977Z
                    completedAt: null
                    progressPercent: 56
                    createdAt: 2025-10-15T22:29:13.969Z
                meta:
                  total: 501
                  page: 1
                  limit: 25
                  totalPages: 21
                links:
                  self: /api/v1/enrollments?page=1&limit=25
                  first: /api/v1/enrollments?page=1&limit=25
                  last: /api/v1/enrollments?page=21&limit=25
                  next: /api/v1/enrollments?page=2&limit=25
                  prev: null
    head:
      summary: Check enrollments collection availability
      operationId: head-enrollments
      tags:
        - enrollments
      parameters: *a580
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a enrollments record (fake — not persisted)
      operationId: create-enrollments
      tags:
        - enrollments
      requestBody:
        required: true
        content:
          application/json:
            schema: &a584
              $ref: "#/components/schemas/EnrollmentsRecordInput"
            example: &a585
              userId: 1
              courseId: 16
              enrolledAt: 2025-10-15T22:31:55.977Z
              completedAt: null
              progressPercent: 56
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a581
              example: *a582
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/enrollments/{id}:
    get:
      summary: Get one enrollments record by id
      operationId: get-enrollments-by-id
      tags:
        - enrollments
      parameters: &a583
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a581
              example: *a582
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a enrollments record exists
      operationId: head-enrollments-by-id
      tags:
        - enrollments
      parameters: *a583
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a enrollments record (fake — not persisted)
      operationId: replace-enrollments
      tags:
        - enrollments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a584
            example: *a585
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a581
              example: *a582
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a enrollments record (fake — not persisted)
      operationId: patch-enrollments
      tags:
        - enrollments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EnrollmentsRecordPatch"
            example: *a585
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a581
              example: *a582
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a enrollments record (fake — not persisted)
      operationId: delete-enrollments
      tags:
        - enrollments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/quizzes:
    get:
      summary: List quizzes
      operationId: list-quizzes
      tags:
        - quizzes
      parameters: &a586
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a587
                      $ref: "#/components/schemas/QuizzesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a588
                    id: 1
                    courseId: 1
                    lessonId: 3
                    title: Quick Quiz — The Complete Guide to SEO
                    description: Vilis apostolus cado tantillus conturbo magnam sophismata varius
                      assentator.
                    passingScorePercent: 60
                    timeLimitMinutes: null
                    createdAt: 2024-08-10T09:50:22.416Z
                    updatedAt: 2024-09-23T01:34:56.262Z
                meta:
                  total: 126
                  page: 1
                  limit: 25
                  totalPages: 6
                links:
                  self: /api/v1/quizzes?page=1&limit=25
                  first: /api/v1/quizzes?page=1&limit=25
                  last: /api/v1/quizzes?page=6&limit=25
                  next: /api/v1/quizzes?page=2&limit=25
                  prev: null
    head:
      summary: Check quizzes collection availability
      operationId: head-quizzes
      tags:
        - quizzes
      parameters: *a586
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a quizzes record (fake — not persisted)
      operationId: create-quizzes
      tags:
        - quizzes
      requestBody:
        required: true
        content:
          application/json:
            schema: &a590
              $ref: "#/components/schemas/QuizzesRecordInput"
            example: &a591
              courseId: 1
              lessonId: 3
              title: Quick Quiz — The Complete Guide to SEO
              description: Vilis apostolus cado tantillus conturbo magnam sophismata varius
                assentator.
              passingScorePercent: 60
              timeLimitMinutes: null
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a587
              example: *a588
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/quizzes/{id}:
    get:
      summary: Get one quizzes record by id
      operationId: get-quizzes-by-id
      tags:
        - quizzes
      parameters: &a589
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a587
              example: *a588
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a quizzes record exists
      operationId: head-quizzes-by-id
      tags:
        - quizzes
      parameters: *a589
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a quizzes record (fake — not persisted)
      operationId: replace-quizzes
      tags:
        - quizzes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a590
            example: *a591
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a587
              example: *a588
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a quizzes record (fake — not persisted)
      operationId: patch-quizzes
      tags:
        - quizzes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/QuizzesRecordPatch"
            example: *a591
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a587
              example: *a588
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a quizzes record (fake — not persisted)
      operationId: delete-quizzes
      tags:
        - quizzes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/quiz-questions:
    get:
      summary: List quiz-questions
      operationId: list-quiz-questions
      tags:
        - quiz-questions
      parameters: &a592
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a594
                      $ref: "#/components/schemas/QuizQuestionsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a595
                    id: 1
                    quizId: 1
                    text: Correptius doloribus consuasor magnam suffragium patruus incidunt crur
                      allatus campana absorbeo?
                    kind: multiple_choice
                    options: &a593
                      - centum
                      - tabernus amaritudo
                      - depopulo
                      - aliqua verecundia
                    correctAnswer: tabernus amaritudo
                    sortOrder: 0
                    createdAt: 2024-08-14T04:21:59.102Z
                meta:
                  total: 805
                  page: 1
                  limit: 25
                  totalPages: 33
                links:
                  self: /api/v1/quiz-questions?page=1&limit=25
                  first: /api/v1/quiz-questions?page=1&limit=25
                  last: /api/v1/quiz-questions?page=33&limit=25
                  next: /api/v1/quiz-questions?page=2&limit=25
                  prev: null
    head:
      summary: Check quiz-questions collection availability
      operationId: head-quiz-questions
      tags:
        - quiz-questions
      parameters: *a592
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a quiz-questions record (fake — not persisted)
      operationId: create-quiz-questions
      tags:
        - quiz-questions
      requestBody:
        required: true
        content:
          application/json:
            schema: &a597
              $ref: "#/components/schemas/QuizQuestionsRecordInput"
            example: &a598
              quizId: 1
              text: Correptius doloribus consuasor magnam suffragium patruus incidunt crur
                allatus campana absorbeo?
              kind: multiple_choice
              options: *a593
              correctAnswer: tabernus amaritudo
              sortOrder: 0
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a594
              example: *a595
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/quiz-questions/{id}:
    get:
      summary: Get one quiz-questions record by id
      operationId: get-quiz-questions-by-id
      tags:
        - quiz-questions
      parameters: &a596
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a594
              example: *a595
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a quiz-questions record exists
      operationId: head-quiz-questions-by-id
      tags:
        - quiz-questions
      parameters: *a596
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a quiz-questions record (fake — not persisted)
      operationId: replace-quiz-questions
      tags:
        - quiz-questions
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a597
            example: *a598
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a594
              example: *a595
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a quiz-questions record (fake — not persisted)
      operationId: patch-quiz-questions
      tags:
        - quiz-questions
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/QuizQuestionsRecordPatch"
            example: *a598
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a594
              example: *a595
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a quiz-questions record (fake — not persisted)
      operationId: delete-quiz-questions
      tags:
        - quiz-questions
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/flashcards:
    get:
      summary: List flashcards
      operationId: list-flashcards
      tags:
        - flashcards
      parameters: &a599
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a600
                      $ref: "#/components/schemas/FlashcardsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a601
                    id: 1
                    userId: 5
                    deckName: History Dates
                    front: Aliqua apostolus cervus sunt
                    back: Tunc curia numquam corroboro id abeo.
                    difficulty: hard
                    lastReviewedAt: 2026-03-31T00:00:00.000Z
                    nextReviewAt: 2026-04-14T00:00:00.000Z
                    reviewCount: 18
                    createdAt: 2026-03-23T17:28:57.944Z
                meta:
                  total: 526
                  page: 1
                  limit: 25
                  totalPages: 22
                links:
                  self: /api/v1/flashcards?page=1&limit=25
                  first: /api/v1/flashcards?page=1&limit=25
                  last: /api/v1/flashcards?page=22&limit=25
                  next: /api/v1/flashcards?page=2&limit=25
                  prev: null
    head:
      summary: Check flashcards collection availability
      operationId: head-flashcards
      tags:
        - flashcards
      parameters: *a599
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a flashcards record (fake — not persisted)
      operationId: create-flashcards
      tags:
        - flashcards
      requestBody:
        required: true
        content:
          application/json:
            schema: &a603
              $ref: "#/components/schemas/FlashcardsRecordInput"
            example: &a604
              userId: 5
              deckName: History Dates
              front: Aliqua apostolus cervus sunt
              back: Tunc curia numquam corroboro id abeo.
              difficulty: hard
              lastReviewedAt: 2026-03-31T00:00:00.000Z
              nextReviewAt: 2026-04-14T00:00:00.000Z
              reviewCount: 18
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a600
              example: *a601
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/flashcards/{id}:
    get:
      summary: Get one flashcards record by id
      operationId: get-flashcards-by-id
      tags:
        - flashcards
      parameters: &a602
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a600
              example: *a601
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a flashcards record exists
      operationId: head-flashcards-by-id
      tags:
        - flashcards
      parameters: *a602
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a flashcards record (fake — not persisted)
      operationId: replace-flashcards
      tags:
        - flashcards
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a603
            example: *a604
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a600
              example: *a601
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a flashcards record (fake — not persisted)
      operationId: patch-flashcards
      tags:
        - flashcards
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/FlashcardsRecordPatch"
            example: *a604
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a600
              example: *a601
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a flashcards record (fake — not persisted)
      operationId: delete-flashcards
      tags:
        - flashcards
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/progress:
    get:
      summary: List progress
      operationId: list-progress
      tags:
        - progress
      parameters: &a605
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a606
                      $ref: "#/components/schemas/ProgressRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a607
                    id: 1
                    userId: 160
                    courseId: 74
                    lessonId: null
                    state: not_started
                    completedAt: null
                    updatedAt: 2025-07-26T22:51:26.915Z
                    createdAt: 2025-07-26T22:51:26.915Z
                meta:
                  total: 800
                  page: 1
                  limit: 25
                  totalPages: 32
                links:
                  self: /api/v1/progress?page=1&limit=25
                  first: /api/v1/progress?page=1&limit=25
                  last: /api/v1/progress?page=32&limit=25
                  next: /api/v1/progress?page=2&limit=25
                  prev: null
    head:
      summary: Check progress collection availability
      operationId: head-progress
      tags:
        - progress
      parameters: *a605
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a progress record (fake — not persisted)
      operationId: create-progress
      tags:
        - progress
      requestBody:
        required: true
        content:
          application/json:
            schema: &a609
              $ref: "#/components/schemas/ProgressRecordInput"
            example: &a610
              userId: 160
              courseId: 74
              lessonId: null
              state: not_started
              completedAt: null
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a606
              example: *a607
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/progress/{id}:
    get:
      summary: Get one progress record by id
      operationId: get-progress-by-id
      tags:
        - progress
      parameters: &a608
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a606
              example: *a607
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a progress record exists
      operationId: head-progress-by-id
      tags:
        - progress
      parameters: *a608
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a progress record (fake — not persisted)
      operationId: replace-progress
      tags:
        - progress
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a609
            example: *a610
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a606
              example: *a607
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a progress record (fake — not persisted)
      operationId: patch-progress
      tags:
        - progress
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ProgressRecordPatch"
            example: *a610
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a606
              example: *a607
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a progress record (fake — not persisted)
      operationId: delete-progress
      tags:
        - progress
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/companies:
    get:
      summary: List companies
      operationId: list-companies
      tags:
        - companies
      parameters: &a611
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a612
                      $ref: "#/components/schemas/CompaniesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a613
                    id: 1
                    name: Schroeder Inc
                    slug: schroeder-inc-1
                    description: Public-key analyzing function
                    industryId: 5
                    headquartersCountryAlpha2: FI
                    employeeCount: 48076
                    foundedYear: 2020
                    websiteUrl: https://example.com/companies/schroeder-inc
                    logoUrl: https://picsum.photos/seed/company-1/200/200
                    isHiring: true
                    createdAt: 2015-04-14T18:56:49.601Z
                meta:
                  total: 80
                  page: 1
                  limit: 25
                  totalPages: 4
                links:
                  self: /api/v1/companies?page=1&limit=25
                  first: /api/v1/companies?page=1&limit=25
                  last: /api/v1/companies?page=4&limit=25
                  next: /api/v1/companies?page=2&limit=25
                  prev: null
    head:
      summary: Check companies collection availability
      operationId: head-companies
      tags:
        - companies
      parameters: *a611
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a companies record (fake — not persisted)
      operationId: create-companies
      tags:
        - companies
      requestBody:
        required: true
        content:
          application/json:
            schema: &a615
              $ref: "#/components/schemas/CompaniesRecordInput"
            example: &a616
              name: Schroeder Inc
              slug: schroeder-inc-1
              description: Public-key analyzing function
              industryId: 5
              headquartersCountryAlpha2: FI
              employeeCount: 48076
              foundedYear: 2020
              websiteUrl: https://example.com/companies/schroeder-inc
              logoUrl: https://picsum.photos/seed/company-1/200/200
              isHiring: true
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a612
              example: *a613
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/companies/{id}:
    get:
      summary: Get one companies record by id
      operationId: get-companies-by-id
      tags:
        - companies
      parameters: &a614
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a612
              example: *a613
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a companies record exists
      operationId: head-companies-by-id
      tags:
        - companies
      parameters: *a614
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a companies record (fake — not persisted)
      operationId: replace-companies
      tags:
        - companies
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a615
            example: *a616
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a612
              example: *a613
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a companies record (fake — not persisted)
      operationId: patch-companies
      tags:
        - companies
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CompaniesRecordPatch"
            example: *a616
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a612
              example: *a613
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a companies record (fake — not persisted)
      operationId: delete-companies
      tags:
        - companies
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/jobs:
    get:
      summary: List jobs
      operationId: list-jobs
      tags:
        - jobs
      parameters: &a617
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a618
                      $ref: "#/components/schemas/JobsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a619
                    id: 1
                    companyId: 1
                    title: UX Researcher
                    slug: ux-researcher-1
                    description: >-
                      Administratio atque deprimo delibero argentum. Adopto acsi
                      desidero attonbitus corroboro commodo claudeo. Voluptate
                      alter ars tripudio cohaero desolo crastinus.


                      Sublime eligendi vigilo valde velut. Iusto nesciunt cibus
                      despecto sumo totus veritas territo tres subseco. Suadeo
                      suus amaritudo candidus cultellus pel.


                      Arbor credo amiculum certe accedo correptius. Velit terra
                      statim laborum suspendo tactus clementia beneficium
                      strues. Patior casus libero tepidus contigo cotidie
                      adinventitias deprecator adiuvo.


                      Tener cernuus ultio cattus solvo thymbra comis amitto.
                      Officiis adeo valde adipisci vestrum apostolus
                      administratio vulgus. Nobis ocer earum aurum averto culpa
                      advoco adulatio adulescens ipsam.
                    employmentType: internship
                    locationType: hybrid
                    location: Port Aiden, Iran
                    salaryMin: 65000
                    salaryMax: 80976
                    currency: USD
                    isPublished: true
                    postedAt: 2025-06-17T20:43:36.601Z
                    expiresAt: 2025-07-23T20:43:36.601Z
                    createdAt: 2025-06-16T21:10:22.235Z
                    updatedAt: 2025-06-20T21:43:03.974Z
                meta:
                  total: 240
                  page: 1
                  limit: 25
                  totalPages: 10
                links:
                  self: /api/v1/jobs?page=1&limit=25
                  first: /api/v1/jobs?page=1&limit=25
                  last: /api/v1/jobs?page=10&limit=25
                  next: /api/v1/jobs?page=2&limit=25
                  prev: null
    head:
      summary: Check jobs collection availability
      operationId: head-jobs
      tags:
        - jobs
      parameters: *a617
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a jobs record (fake — not persisted)
      operationId: create-jobs
      tags:
        - jobs
      requestBody:
        required: true
        content:
          application/json:
            schema: &a621
              $ref: "#/components/schemas/JobsRecordInput"
            example: &a622
              companyId: 1
              title: UX Researcher
              slug: ux-researcher-1
              description: >-
                Administratio atque deprimo delibero argentum. Adopto acsi
                desidero attonbitus corroboro commodo claudeo. Voluptate alter
                ars tripudio cohaero desolo crastinus.


                Sublime eligendi vigilo valde velut. Iusto nesciunt cibus
                despecto sumo totus veritas territo tres subseco. Suadeo suus
                amaritudo candidus cultellus pel.


                Arbor credo amiculum certe accedo correptius. Velit terra statim
                laborum suspendo tactus clementia beneficium strues. Patior
                casus libero tepidus contigo cotidie adinventitias deprecator
                adiuvo.


                Tener cernuus ultio cattus solvo thymbra comis amitto. Officiis
                adeo valde adipisci vestrum apostolus administratio vulgus.
                Nobis ocer earum aurum averto culpa advoco adulatio adulescens
                ipsam.
              employmentType: internship
              locationType: hybrid
              location: Port Aiden, Iran
              salaryMin: 65000
              salaryMax: 80976
              currency: USD
              isPublished: true
              postedAt: 2025-06-17T20:43:36.601Z
              expiresAt: 2025-07-23T20:43:36.601Z
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a618
              example: *a619
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/jobs/{id}:
    get:
      summary: Get one jobs record by id
      operationId: get-jobs-by-id
      tags:
        - jobs
      parameters: &a620
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a618
              example: *a619
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a jobs record exists
      operationId: head-jobs-by-id
      tags:
        - jobs
      parameters: *a620
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a jobs record (fake — not persisted)
      operationId: replace-jobs
      tags:
        - jobs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a621
            example: *a622
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a618
              example: *a619
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a jobs record (fake — not persisted)
      operationId: patch-jobs
      tags:
        - jobs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/JobsRecordPatch"
            example: *a622
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a618
              example: *a619
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a jobs record (fake — not persisted)
      operationId: delete-jobs
      tags:
        - jobs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/applications:
    get:
      summary: List applications
      operationId: list-applications
      tags:
        - applications
      parameters: &a623
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a624
                      $ref: "#/components/schemas/ApplicationsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a625
                    id: 1
                    userId: 1
                    jobId: 98
                    status: screening
                    coverLetter: >-
                      Ager beatus harum deleo truculenter. Aggero quasi
                      suppellex talus sublime subiungo alo solium cariosus.
                      Ullam cupiditate spes vito cohaero virtus tubineus sequi.


                      Arguo villa deludo depraedor auditor voluptatum quia
                      audacia verecundia. Cohaero tempora alienus maiores sum
                      colo excepturi. Vos callide solio.
                    appliedAt: 2026-05-05T19:31:00.375Z
                    lastUpdatedAt: 2026-05-17T13:03:50.974Z
                meta:
                  total: 389
                  page: 1
                  limit: 25
                  totalPages: 16
                links:
                  self: /api/v1/applications?page=1&limit=25
                  first: /api/v1/applications?page=1&limit=25
                  last: /api/v1/applications?page=16&limit=25
                  next: /api/v1/applications?page=2&limit=25
                  prev: null
    head:
      summary: Check applications collection availability
      operationId: head-applications
      tags:
        - applications
      parameters: *a623
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a applications record (fake — not persisted)
      operationId: create-applications
      tags:
        - applications
      requestBody:
        required: true
        content:
          application/json:
            schema: &a627
              $ref: "#/components/schemas/ApplicationsRecordInput"
            example: &a628
              userId: 1
              jobId: 98
              status: screening
              coverLetter: >-
                Ager beatus harum deleo truculenter. Aggero quasi suppellex
                talus sublime subiungo alo solium cariosus. Ullam cupiditate
                spes vito cohaero virtus tubineus sequi.


                Arguo villa deludo depraedor auditor voluptatum quia audacia
                verecundia. Cohaero tempora alienus maiores sum colo excepturi.
                Vos callide solio.
              appliedAt: 2026-05-05T19:31:00.375Z
              lastUpdatedAt: 2026-05-17T13:03:50.974Z
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a624
              example: *a625
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/applications/{id}:
    get:
      summary: Get one applications record by id
      operationId: get-applications-by-id
      tags:
        - applications
      parameters: &a626
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a624
              example: *a625
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a applications record exists
      operationId: head-applications-by-id
      tags:
        - applications
      parameters: *a626
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a applications record (fake — not persisted)
      operationId: replace-applications
      tags:
        - applications
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a627
            example: *a628
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a624
              example: *a625
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a applications record (fake — not persisted)
      operationId: patch-applications
      tags:
        - applications
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ApplicationsRecordPatch"
            example: *a628
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a624
              example: *a625
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a applications record (fake — not persisted)
      operationId: delete-applications
      tags:
        - applications
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/resumes:
    get:
      summary: List resumes
      operationId: list-resumes
      tags:
        - resumes
      parameters: &a629
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a630
                      $ref: "#/components/schemas/ResumesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a631
                    id: 1
                    userId: 1
                    title: Sales Resume
                    summary: Vae sub audacia solutio quam tollo congregatio cohaero. Aufero capio
                      peior ventito vehemens acer tam cavus voco alienus. Unus
                      decipio deinde ipsam curatio approbo nihil.
                    isDefault: true
                    createdAt: 2023-05-28T08:01:55.110Z
                    updatedAt: 2026-02-09T17:22:16.138Z
                meta:
                  total: 298
                  page: 1
                  limit: 25
                  totalPages: 12
                links:
                  self: /api/v1/resumes?page=1&limit=25
                  first: /api/v1/resumes?page=1&limit=25
                  last: /api/v1/resumes?page=12&limit=25
                  next: /api/v1/resumes?page=2&limit=25
                  prev: null
    head:
      summary: Check resumes collection availability
      operationId: head-resumes
      tags:
        - resumes
      parameters: *a629
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a resumes record (fake — not persisted)
      operationId: create-resumes
      tags:
        - resumes
      requestBody:
        required: true
        content:
          application/json:
            schema: &a633
              $ref: "#/components/schemas/ResumesRecordInput"
            example: &a634
              userId: 1
              title: Sales Resume
              summary: Vae sub audacia solutio quam tollo congregatio cohaero. Aufero capio
                peior ventito vehemens acer tam cavus voco alienus. Unus decipio
                deinde ipsam curatio approbo nihil.
              isDefault: true
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a630
              example: *a631
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/resumes/{id}:
    get:
      summary: Get one resumes record by id
      operationId: get-resumes-by-id
      tags:
        - resumes
      parameters: &a632
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a630
              example: *a631
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a resumes record exists
      operationId: head-resumes-by-id
      tags:
        - resumes
      parameters: *a632
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a resumes record (fake — not persisted)
      operationId: replace-resumes
      tags:
        - resumes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a633
            example: *a634
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a630
              example: *a631
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a resumes record (fake — not persisted)
      operationId: patch-resumes
      tags:
        - resumes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ResumesRecordPatch"
            example: *a634
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a630
              example: *a631
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a resumes record (fake — not persisted)
      operationId: delete-resumes
      tags:
        - resumes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/agents:
    get:
      summary: List agents
      operationId: list-agents
      tags:
        - agents
      parameters: &a635
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a636
                      $ref: "#/components/schemas/AgentsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a637
                    id: 1
                    userId: 55
                    brokerage: RE/MAX
                    licenseNumber: HFQC39M9VT
                    specialty: land
                    yearsExperience: 15
                    rating: 4.8
                    ratingCount: 77
                    createdAt: 2024-06-01T00:18:28.217Z
                meta:
                  total: 50
                  page: 1
                  limit: 25
                  totalPages: 2
                links:
                  self: /api/v1/agents?page=1&limit=25
                  first: /api/v1/agents?page=1&limit=25
                  last: /api/v1/agents?page=2&limit=25
                  next: /api/v1/agents?page=2&limit=25
                  prev: null
    head:
      summary: Check agents collection availability
      operationId: head-agents
      tags:
        - agents
      parameters: *a635
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a agents record (fake — not persisted)
      operationId: create-agents
      tags:
        - agents
      requestBody:
        required: true
        content:
          application/json:
            schema: &a639
              $ref: "#/components/schemas/AgentsRecordInput"
            example: &a640
              userId: 55
              brokerage: RE/MAX
              licenseNumber: HFQC39M9VT
              specialty: land
              yearsExperience: 15
              rating: 4.8
              ratingCount: 77
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a636
              example: *a637
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/agents/{id}:
    get:
      summary: Get one agents record by id
      operationId: get-agents-by-id
      tags:
        - agents
      parameters: &a638
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a636
              example: *a637
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a agents record exists
      operationId: head-agents-by-id
      tags:
        - agents
      parameters: *a638
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a agents record (fake — not persisted)
      operationId: replace-agents
      tags:
        - agents
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a639
            example: *a640
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a636
              example: *a637
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a agents record (fake — not persisted)
      operationId: patch-agents
      tags:
        - agents
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AgentsRecordPatch"
            example: *a640
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a636
              example: *a637
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a agents record (fake — not persisted)
      operationId: delete-agents
      tags:
        - agents
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/listings:
    get:
      summary: List listings
      operationId: list-listings
      tags:
        - listings
      parameters: &a641
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a642
                      $ref: "#/components/schemas/ListingsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a643
                    id: 1
                    agentUserId: 55
                    propertyType: apartment
                    title: Apartment in Alizestad
                    description: >-
                      Attonbitus tener sollicito vorago trucido. Comedo centum
                      cinis capitulus tergeo. Denique confugo nulla temperantia
                      uberrime vulgivagus tego tepesco curiositas.


                      Claustrum sui cotidie. Delego vae natus decumbo quisquam.
                      Candidus varius animus atrocitas.
                    price: 4579200
                    currency: USD
                    bedrooms: 5
                    bathrooms: 5
                    squareFeet: 4891
                    address: 2659 Purdy Ramp
                    city: Alizestad
                    region: Colorado
                    countryAlpha2: ID
                    latitude: -28.267902
                    longitude: 70.893347
                    status: active
                    listedAt: 2025-02-08T18:28:05.336Z
                    createdAt: 2025-02-08T01:36:23.867Z
                    updatedAt: 2026-05-01T08:22:27.194Z
                meta:
                  total: 183
                  page: 1
                  limit: 25
                  totalPages: 8
                links:
                  self: /api/v1/listings?page=1&limit=25
                  first: /api/v1/listings?page=1&limit=25
                  last: /api/v1/listings?page=8&limit=25
                  next: /api/v1/listings?page=2&limit=25
                  prev: null
    head:
      summary: Check listings collection availability
      operationId: head-listings
      tags:
        - listings
      parameters: *a641
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a listings record (fake — not persisted)
      operationId: create-listings
      tags:
        - listings
      requestBody:
        required: true
        content:
          application/json:
            schema: &a645
              $ref: "#/components/schemas/ListingsRecordInput"
            example: &a646
              agentUserId: 55
              propertyType: apartment
              title: Apartment in Alizestad
              description: >-
                Attonbitus tener sollicito vorago trucido. Comedo centum cinis
                capitulus tergeo. Denique confugo nulla temperantia uberrime
                vulgivagus tego tepesco curiositas.


                Claustrum sui cotidie. Delego vae natus decumbo quisquam.
                Candidus varius animus atrocitas.
              price: 4579200
              currency: USD
              bedrooms: 5
              bathrooms: 5
              squareFeet: 4891
              address: 2659 Purdy Ramp
              city: Alizestad
              region: Colorado
              countryAlpha2: ID
              latitude: -28.267902
              longitude: 70.893347
              status: active
              listedAt: 2025-02-08T18:28:05.336Z
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a642
              example: *a643
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/listings/{id}:
    get:
      summary: Get one listings record by id
      operationId: get-listings-by-id
      tags:
        - listings
      parameters: &a644
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a642
              example: *a643
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a listings record exists
      operationId: head-listings-by-id
      tags:
        - listings
      parameters: *a644
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a listings record (fake — not persisted)
      operationId: replace-listings
      tags:
        - listings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a645
            example: *a646
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a642
              example: *a643
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a listings record (fake — not persisted)
      operationId: patch-listings
      tags:
        - listings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ListingsRecordPatch"
            example: *a646
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a642
              example: *a643
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a listings record (fake — not persisted)
      operationId: delete-listings
      tags:
        - listings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/showings:
    get:
      summary: List showings
      operationId: list-showings
      tags:
        - showings
      parameters: &a647
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a648
                      $ref: "#/components/schemas/ShowingsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a649
                    id: 1
                    listingId: 1
                    prospectUserId: 135
                    scheduledAt: 2025-08-01T08:26:47.823Z
                    status: cancelled
                    notes: Comis eligendi peccatus error quibusdam.
                    createdAt: 2025-08-01T22:59:01.722Z
                meta:
                  total: 483
                  page: 1
                  limit: 25
                  totalPages: 20
                links:
                  self: /api/v1/showings?page=1&limit=25
                  first: /api/v1/showings?page=1&limit=25
                  last: /api/v1/showings?page=20&limit=25
                  next: /api/v1/showings?page=2&limit=25
                  prev: null
    head:
      summary: Check showings collection availability
      operationId: head-showings
      tags:
        - showings
      parameters: *a647
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a showings record (fake — not persisted)
      operationId: create-showings
      tags:
        - showings
      requestBody:
        required: true
        content:
          application/json:
            schema: &a651
              $ref: "#/components/schemas/ShowingsRecordInput"
            example: &a652
              listingId: 1
              prospectUserId: 135
              scheduledAt: 2025-08-01T08:26:47.823Z
              status: cancelled
              notes: Comis eligendi peccatus error quibusdam.
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a648
              example: *a649
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/showings/{id}:
    get:
      summary: Get one showings record by id
      operationId: get-showings-by-id
      tags:
        - showings
      parameters: &a650
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a648
              example: *a649
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a showings record exists
      operationId: head-showings-by-id
      tags:
        - showings
      parameters: *a650
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a showings record (fake — not persisted)
      operationId: replace-showings
      tags:
        - showings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a651
            example: *a652
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a648
              example: *a649
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a showings record (fake — not persisted)
      operationId: patch-showings
      tags:
        - showings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ShowingsRecordPatch"
            example: *a652
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a648
              example: *a649
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a showings record (fake — not persisted)
      operationId: delete-showings
      tags:
        - showings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/pet-breeds:
    get:
      summary: List pet-breeds
      operationId: list-pet-breeds
      tags:
        - pet-breeds
      parameters: &a653
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a655
                      $ref: "#/components/schemas/PetBreedsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a656
                    id: 1
                    name: Labrador Retriever
                    slug: labrador-retriever
                    species: dog
                    origin: Canada
                    temperament: &a654
                      - Friendly
                      - Active
                      - Outgoing
                    lifeExpectancyYears: 12
                    isHypoallergenic: false
                    createdAt: 2025-09-14T00:42:36.016Z
                meta:
                  total: 80
                  page: 1
                  limit: 25
                  totalPages: 4
                links:
                  self: /api/v1/pet-breeds?page=1&limit=25
                  first: /api/v1/pet-breeds?page=1&limit=25
                  last: /api/v1/pet-breeds?page=4&limit=25
                  next: /api/v1/pet-breeds?page=2&limit=25
                  prev: null
    head:
      summary: Check pet-breeds collection availability
      operationId: head-pet-breeds
      tags:
        - pet-breeds
      parameters: *a653
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a pet-breeds record (fake — not persisted)
      operationId: create-pet-breeds
      tags:
        - pet-breeds
      requestBody:
        required: true
        content:
          application/json:
            schema: &a658
              $ref: "#/components/schemas/PetBreedsRecordInput"
            example: &a659
              name: Labrador Retriever
              slug: labrador-retriever
              species: dog
              origin: Canada
              temperament: *a654
              lifeExpectancyYears: 12
              isHypoallergenic: false
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a655
              example: *a656
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/pet-breeds/{id}:
    get:
      summary: Get one pet-breeds record by id
      operationId: get-pet-breeds-by-id
      tags:
        - pet-breeds
      parameters: &a657
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a655
              example: *a656
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a pet-breeds record exists
      operationId: head-pet-breeds-by-id
      tags:
        - pet-breeds
      parameters: *a657
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a pet-breeds record (fake — not persisted)
      operationId: replace-pet-breeds
      tags:
        - pet-breeds
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a658
            example: *a659
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a655
              example: *a656
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a pet-breeds record (fake — not persisted)
      operationId: patch-pet-breeds
      tags:
        - pet-breeds
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PetBreedsRecordPatch"
            example: *a659
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a655
              example: *a656
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a pet-breeds record (fake — not persisted)
      operationId: delete-pet-breeds
      tags:
        - pet-breeds
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/pets:
    get:
      summary: List pets
      operationId: list-pets
      tags:
        - pets
      parameters: &a660
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a661
                      $ref: "#/components/schemas/PetsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a662
                    id: 1
                    ownerUserId: 1
                    name: Juwan
                    species: reptile
                    breedId: 71
                    gender: unknown
                    birthDate: 2018-01-10
                    weightKg: 5.1
                    color: Yellow
                    imageUrl: https://picsum.photos/seed/pet-1/600/600
                    createdAt: 2014-07-16T00:37:39.435Z
                    updatedAt: 2021-04-21T04:08:36.863Z
                meta:
                  total: 200
                  page: 1
                  limit: 25
                  totalPages: 8
                links:
                  self: /api/v1/pets?page=1&limit=25
                  first: /api/v1/pets?page=1&limit=25
                  last: /api/v1/pets?page=8&limit=25
                  next: /api/v1/pets?page=2&limit=25
                  prev: null
    head:
      summary: Check pets collection availability
      operationId: head-pets
      tags:
        - pets
      parameters: *a660
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a pets record (fake — not persisted)
      operationId: create-pets
      tags:
        - pets
      requestBody:
        required: true
        content:
          application/json:
            schema: &a664
              $ref: "#/components/schemas/PetsRecordInput"
            example: &a665
              ownerUserId: 1
              name: Juwan
              species: reptile
              breedId: 71
              gender: unknown
              birthDate: 2018-01-10
              weightKg: 5.1
              color: Yellow
              imageUrl: https://picsum.photos/seed/pet-1/600/600
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a661
              example: *a662
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/pets/{id}:
    get:
      summary: Get one pets record by id
      operationId: get-pets-by-id
      tags:
        - pets
      parameters: &a663
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a661
              example: *a662
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a pets record exists
      operationId: head-pets-by-id
      tags:
        - pets
      parameters: *a663
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a pets record (fake — not persisted)
      operationId: replace-pets
      tags:
        - pets
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a664
            example: *a665
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a661
              example: *a662
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a pets record (fake — not persisted)
      operationId: patch-pets
      tags:
        - pets
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PetsRecordPatch"
            example: *a665
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a661
              example: *a662
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a pets record (fake — not persisted)
      operationId: delete-pets
      tags:
        - pets
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/cars:
    get:
      summary: List cars
      operationId: list-cars
      tags:
        - cars
      parameters: &a666
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a667
                      $ref: "#/components/schemas/CarsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a668
                    id: 1
                    make: Hyundai
                    model: Santa Fe
                    year: 2017
                    trim: Limited
                    vin: D0ZR08F8571HZFGPL
                    color: Brown
                    mileage: 160265
                    price: 45060
                    currency: USD
                    transmission: automatic
                    fuelType: gas
                    bodyType: suv
                    listingType: sale
                    city: Cypress
                    region: Oregon
                    countryAlpha2: KE
                    sellerUserId: 176
                    isSold: false
                    createdAt: 2025-09-20T23:32:17.701Z
                    updatedAt: 2025-10-21T08:31:42.231Z
                meta:
                  total: 200
                  page: 1
                  limit: 25
                  totalPages: 8
                links:
                  self: /api/v1/cars?page=1&limit=25
                  first: /api/v1/cars?page=1&limit=25
                  last: /api/v1/cars?page=8&limit=25
                  next: /api/v1/cars?page=2&limit=25
                  prev: null
    head:
      summary: Check cars collection availability
      operationId: head-cars
      tags:
        - cars
      parameters: *a666
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a cars record (fake — not persisted)
      operationId: create-cars
      tags:
        - cars
      requestBody:
        required: true
        content:
          application/json:
            schema: &a670
              $ref: "#/components/schemas/CarsRecordInput"
            example: &a671
              make: Hyundai
              model: Santa Fe
              year: 2017
              trim: Limited
              vin: D0ZR08F8571HZFGPL
              color: Brown
              mileage: 160265
              price: 45060
              currency: USD
              transmission: automatic
              fuelType: gas
              bodyType: suv
              listingType: sale
              city: Cypress
              region: Oregon
              countryAlpha2: KE
              sellerUserId: 176
              isSold: false
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a667
              example: *a668
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/cars/{id}:
    get:
      summary: Get one cars record by id
      operationId: get-cars-by-id
      tags:
        - cars
      parameters: &a669
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a667
              example: *a668
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a cars record exists
      operationId: head-cars-by-id
      tags:
        - cars
      parameters: *a669
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a cars record (fake — not persisted)
      operationId: replace-cars
      tags:
        - cars
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a670
            example: *a671
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a667
              example: *a668
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a cars record (fake — not persisted)
      operationId: patch-cars
      tags:
        - cars
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CarsRecordPatch"
            example: *a671
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a667
              example: *a668
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a cars record (fake — not persisted)
      operationId: delete-cars
      tags:
        - cars
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/cars-saved:
    get:
      summary: List cars-saved
      operationId: list-cars-saved
      tags:
        - cars-saved
      parameters: &a672
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a673
                      $ref: "#/components/schemas/CarsSavedRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a674
                    id: 1
                    userId: 1
                    carId: 46
                    savedAt: 2025-06-12T10:13:43.904Z
                meta:
                  total: 400
                  page: 1
                  limit: 25
                  totalPages: 16
                links:
                  self: /api/v1/cars-saved?page=1&limit=25
                  first: /api/v1/cars-saved?page=1&limit=25
                  last: /api/v1/cars-saved?page=16&limit=25
                  next: /api/v1/cars-saved?page=2&limit=25
                  prev: null
    head:
      summary: Check cars-saved collection availability
      operationId: head-cars-saved
      tags:
        - cars-saved
      parameters: *a672
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a cars-saved record (fake — not persisted)
      operationId: create-cars-saved
      tags:
        - cars-saved
      requestBody:
        required: true
        content:
          application/json:
            schema: &a676
              $ref: "#/components/schemas/CarsSavedRecordInput"
            example: &a677
              userId: 1
              carId: 46
              savedAt: 2025-06-12T10:13:43.904Z
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a673
              example: *a674
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/cars-saved/{id}:
    get:
      summary: Get one cars-saved record by id
      operationId: get-cars-saved-by-id
      tags:
        - cars-saved
      parameters: &a675
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a673
              example: *a674
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a cars-saved record exists
      operationId: head-cars-saved-by-id
      tags:
        - cars-saved
      parameters: *a675
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a cars-saved record (fake — not persisted)
      operationId: replace-cars-saved
      tags:
        - cars-saved
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a676
            example: *a677
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a673
              example: *a674
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a cars-saved record (fake — not persisted)
      operationId: patch-cars-saved
      tags:
        - cars-saved
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CarsSavedRecordPatch"
            example: *a677
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a673
              example: *a674
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a cars-saved record (fake — not persisted)
      operationId: delete-cars-saved
      tags:
        - cars-saved
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/sneakers:
    get:
      summary: List sneakers
      operationId: list-sneakers
      tags:
        - sneakers
      parameters: &a678
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a680
                      $ref: "#/components/schemas/SneakersRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a681
                    id: 1
                    brand: Nike
                    model: Blazer Mid
                    colorway: Blue/Yellow
                    style: Lifestyle
                    releaseDate: 2023-07-14
                    retailPrice: 265
                    currency: USD
                    imageUrl: https://picsum.photos/seed/sneaker-1/800/600
                    sizesAvailable: &a679
                      - 3.5Y
                      - 4Y
                      - 4.5Y
                      - 5Y
                      - 5.5Y
                      - 6Y
                      - 6.5Y
                      - 7Y
                    gender: youth
                    createdAt: 2023-07-14T03:55:17.628Z
                meta:
                  total: 80
                  page: 1
                  limit: 25
                  totalPages: 4
                links:
                  self: /api/v1/sneakers?page=1&limit=25
                  first: /api/v1/sneakers?page=1&limit=25
                  last: /api/v1/sneakers?page=4&limit=25
                  next: /api/v1/sneakers?page=2&limit=25
                  prev: null
    head:
      summary: Check sneakers collection availability
      operationId: head-sneakers
      tags:
        - sneakers
      parameters: *a678
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a sneakers record (fake — not persisted)
      operationId: create-sneakers
      tags:
        - sneakers
      requestBody:
        required: true
        content:
          application/json:
            schema: &a683
              $ref: "#/components/schemas/SneakersRecordInput"
            example: &a684
              brand: Nike
              model: Blazer Mid
              colorway: Blue/Yellow
              style: Lifestyle
              releaseDate: 2023-07-14
              retailPrice: 265
              currency: USD
              imageUrl: https://picsum.photos/seed/sneaker-1/800/600
              sizesAvailable: *a679
              gender: youth
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a680
              example: *a681
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/sneakers/{id}:
    get:
      summary: Get one sneakers record by id
      operationId: get-sneakers-by-id
      tags:
        - sneakers
      parameters: &a682
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a680
              example: *a681
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a sneakers record exists
      operationId: head-sneakers-by-id
      tags:
        - sneakers
      parameters: *a682
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a sneakers record (fake — not persisted)
      operationId: replace-sneakers
      tags:
        - sneakers
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a683
            example: *a684
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a680
              example: *a681
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a sneakers record (fake — not persisted)
      operationId: patch-sneakers
      tags:
        - sneakers
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SneakersRecordPatch"
            example: *a684
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a680
              example: *a681
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a sneakers record (fake — not persisted)
      operationId: delete-sneakers
      tags:
        - sneakers
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/places:
    get:
      summary: List places
      operationId: list-places
      tags:
        - places
      parameters: &a685
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a686
                      $ref: "#/components/schemas/PlacesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a687
                    id: 1
                    name: Historic District of United States
                    slug: historic-district-of-united-states-1
                    kind: other
                    city: Washington, D.C.
                    countryAlpha2: US
                    latitude: -35.576761
                    longitude: 24.092559
                    rating: 4.7
                    ratingCount: 1818
                    description: Ars apto acidus accusantium aliquam vestrum hic cibo ager volup.
                      Coaegresco vacuus vado sustineo clam compono qui ancilla.
                      Defessus cometes aurum deporto coaegresco coruscus caveo
                      ex.
                    imageUrl: https://picsum.photos/seed/place-1/1200/800
                    createdAt: 2022-01-01T05:46:47.405Z
                meta:
                  total: 150
                  page: 1
                  limit: 25
                  totalPages: 6
                links:
                  self: /api/v1/places?page=1&limit=25
                  first: /api/v1/places?page=1&limit=25
                  last: /api/v1/places?page=6&limit=25
                  next: /api/v1/places?page=2&limit=25
                  prev: null
    head:
      summary: Check places collection availability
      operationId: head-places
      tags:
        - places
      parameters: *a685
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a places record (fake — not persisted)
      operationId: create-places
      tags:
        - places
      requestBody:
        required: true
        content:
          application/json:
            schema: &a689
              $ref: "#/components/schemas/PlacesRecordInput"
            example: &a690
              name: Historic District of United States
              slug: historic-district-of-united-states-1
              kind: other
              city: Washington, D.C.
              countryAlpha2: US
              latitude: -35.576761
              longitude: 24.092559
              rating: 4.7
              ratingCount: 1818
              description: Ars apto acidus accusantium aliquam vestrum hic cibo ager volup.
                Coaegresco vacuus vado sustineo clam compono qui ancilla.
                Defessus cometes aurum deporto coaegresco coruscus caveo ex.
              imageUrl: https://picsum.photos/seed/place-1/1200/800
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a686
              example: *a687
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/places/{id}:
    get:
      summary: Get one places record by id
      operationId: get-places-by-id
      tags:
        - places
      parameters: &a688
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a686
              example: *a687
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a places record exists
      operationId: head-places-by-id
      tags:
        - places
      parameters: *a688
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a places record (fake — not persisted)
      operationId: replace-places
      tags:
        - places
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a689
            example: *a690
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a686
              example: *a687
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a places record (fake — not persisted)
      operationId: patch-places
      tags:
        - places
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PlacesRecordPatch"
            example: *a690
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a686
              example: *a687
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a places record (fake — not persisted)
      operationId: delete-places
      tags:
        - places
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/people:
    get:
      summary: List people
      operationId: list-people
      tags:
        - people
      parameters: &a691
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a692
                      $ref: "#/components/schemas/PeopleRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a693
                    id: 1
                    fullName: Ricardo Conn
                    firstName: Ricardo
                    lastName: Conn
                    email: ricardo.conn-1@example.com
                    phone: +1 202-555-0100 ext 1
                    occupation: Dynamic Configuration Technician
                    city: North Crystelborough
                    countryAlpha2: IL
                    bio: coach, photographer, parent
                    avatarUrl: https://api.dicebear.com/9.x/avataaars/svg?seed=person-1
                    createdAt: 2025-12-07T03:26:56.541Z
                meta:
                  total: 200
                  page: 1
                  limit: 25
                  totalPages: 8
                links:
                  self: /api/v1/people?page=1&limit=25
                  first: /api/v1/people?page=1&limit=25
                  last: /api/v1/people?page=8&limit=25
                  next: /api/v1/people?page=2&limit=25
                  prev: null
    head:
      summary: Check people collection availability
      operationId: head-people
      tags:
        - people
      parameters: *a691
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a people record (fake — not persisted)
      operationId: create-people
      tags:
        - people
      requestBody:
        required: true
        content:
          application/json:
            schema: &a695
              $ref: "#/components/schemas/PeopleRecordInput"
            example: &a696
              fullName: Ricardo Conn
              firstName: Ricardo
              lastName: Conn
              email: ricardo.conn-1@example.com
              phone: +1 202-555-0100 ext 1
              occupation: Dynamic Configuration Technician
              city: North Crystelborough
              countryAlpha2: IL
              bio: coach, photographer, parent
              avatarUrl: https://api.dicebear.com/9.x/avataaars/svg?seed=person-1
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a692
              example: *a693
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/people/{id}:
    get:
      summary: Get one people record by id
      operationId: get-people-by-id
      tags:
        - people
      parameters: &a694
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a692
              example: *a693
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a people record exists
      operationId: head-people-by-id
      tags:
        - people
      parameters: *a694
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a people record (fake — not persisted)
      operationId: replace-people
      tags:
        - people
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a695
            example: *a696
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a692
              example: *a693
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a people record (fake — not persisted)
      operationId: patch-people
      tags:
        - people
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PeopleRecordPatch"
            example: *a696
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a692
              example: *a693
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a people record (fake — not persisted)
      operationId: delete-people
      tags:
        - people
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/matchmaking:
    get:
      summary: List matchmaking
      operationId: list-matchmaking
      tags:
        - matchmaking
      parameters: &a697
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a699
                      $ref: "#/components/schemas/MatchmakingRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a700
                    id: 1
                    userId: 170
                    candidateUserId: 28
                    matchScorePercent: 65
                    commonInterests: &a698
                      - Dancing
                    status: pending
                    createdAt: 2025-08-29T11:17:19.015Z
                meta:
                  total: 500
                  page: 1
                  limit: 25
                  totalPages: 20
                links:
                  self: /api/v1/matchmaking?page=1&limit=25
                  first: /api/v1/matchmaking?page=1&limit=25
                  last: /api/v1/matchmaking?page=20&limit=25
                  next: /api/v1/matchmaking?page=2&limit=25
                  prev: null
    head:
      summary: Check matchmaking collection availability
      operationId: head-matchmaking
      tags:
        - matchmaking
      parameters: *a697
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a matchmaking record (fake — not persisted)
      operationId: create-matchmaking
      tags:
        - matchmaking
      requestBody:
        required: true
        content:
          application/json:
            schema: &a702
              $ref: "#/components/schemas/MatchmakingRecordInput"
            example: &a703
              userId: 170
              candidateUserId: 28
              matchScorePercent: 65
              commonInterests: *a698
              status: pending
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a699
              example: *a700
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/matchmaking/{id}:
    get:
      summary: Get one matchmaking record by id
      operationId: get-matchmaking-by-id
      tags:
        - matchmaking
      parameters: &a701
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a699
              example: *a700
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a matchmaking record exists
      operationId: head-matchmaking-by-id
      tags:
        - matchmaking
      parameters: *a701
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a matchmaking record (fake — not persisted)
      operationId: replace-matchmaking
      tags:
        - matchmaking
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a702
            example: *a703
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a699
              example: *a700
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a matchmaking record (fake — not persisted)
      operationId: patch-matchmaking
      tags:
        - matchmaking
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/MatchmakingRecordPatch"
            example: *a703
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a699
              example: *a700
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a matchmaking record (fake — not persisted)
      operationId: delete-matchmaking
      tags:
        - matchmaking
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/stem-figures:
    get:
      summary: List stem-figures
      operationId: list-stem-figures
      tags:
        - stem-figures
      parameters: &a704
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a706
                      $ref: "#/components/schemas/StemFiguresRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a707
                    id: 1
                    name: Albert Einstein
                    slug: albert-einstein
                    field: science
                    bio: Altus tempore torrens xiphias dens solitudo curo. Vinitor vindico dolorum.
                      Tredecim strenuus abstergo adsidue utrimque compono cras
                      autem.
                    bornYear: 1879
                    diedYear: 1955
                    country: Germany
                    imageUrl: https://picsum.photos/seed/stem-1/600/600
                    accomplishments: &a705
                      - Theory of relativity
                      - Nobel Prize in Physics 1921
                    createdAt: 2024-07-15T10:09:04.988Z
                meta:
                  total: 50
                  page: 1
                  limit: 25
                  totalPages: 2
                links:
                  self: /api/v1/stem-figures?page=1&limit=25
                  first: /api/v1/stem-figures?page=1&limit=25
                  last: /api/v1/stem-figures?page=2&limit=25
                  next: /api/v1/stem-figures?page=2&limit=25
                  prev: null
    head:
      summary: Check stem-figures collection availability
      operationId: head-stem-figures
      tags:
        - stem-figures
      parameters: *a704
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a stem-figures record (fake — not persisted)
      operationId: create-stem-figures
      tags:
        - stem-figures
      requestBody:
        required: true
        content:
          application/json:
            schema: &a709
              $ref: "#/components/schemas/StemFiguresRecordInput"
            example: &a710
              name: Albert Einstein
              slug: albert-einstein
              field: science
              bio: Altus tempore torrens xiphias dens solitudo curo. Vinitor vindico dolorum.
                Tredecim strenuus abstergo adsidue utrimque compono cras autem.
              bornYear: 1879
              diedYear: 1955
              country: Germany
              imageUrl: https://picsum.photos/seed/stem-1/600/600
              accomplishments: *a705
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a706
              example: *a707
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/stem-figures/{id}:
    get:
      summary: Get one stem-figures record by id
      operationId: get-stem-figures-by-id
      tags:
        - stem-figures
      parameters: &a708
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a706
              example: *a707
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a stem-figures record exists
      operationId: head-stem-figures-by-id
      tags:
        - stem-figures
      parameters: *a708
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a stem-figures record (fake — not persisted)
      operationId: replace-stem-figures
      tags:
        - stem-figures
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a709
            example: *a710
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a706
              example: *a707
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a stem-figures record (fake — not persisted)
      operationId: patch-stem-figures
      tags:
        - stem-figures
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/StemFiguresRecordPatch"
            example: *a710
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a706
              example: *a707
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a stem-figures record (fake — not persisted)
      operationId: delete-stem-figures
      tags:
        - stem-figures
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/authors:
    get:
      summary: List authors
      operationId: list-authors
      tags:
        - authors
      parameters: &a711
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a714
                      $ref: "#/components/schemas/AuthorsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a715
                    id: 1
                    name: William Shakespeare
                    slug: william-shakespeare
                    bio: Vilitas thesis caute soleo aliquid aliqua delectatio conventus. Amplus
                      colligo circumvenio voluptas curo consectetur demonstro
                      animus repudiandae. Defleo ater verumtamen credo.
                    bornYear: 1564
                    diedYear: 1616
                    nationality: English
                    genres: &a712
                      - Drama
                      - Poetry
                      - Tragedy
                    notableWorks: &a713
                      - Hamlet
                      - Macbeth
                      - Romeo and Juliet
                    imageUrl: https://picsum.photos/seed/author-1/600/600
                    createdAt: 2024-09-02T12:28:04.676Z
                meta:
                  total: 50
                  page: 1
                  limit: 25
                  totalPages: 2
                links:
                  self: /api/v1/authors?page=1&limit=25
                  first: /api/v1/authors?page=1&limit=25
                  last: /api/v1/authors?page=2&limit=25
                  next: /api/v1/authors?page=2&limit=25
                  prev: null
    head:
      summary: Check authors collection availability
      operationId: head-authors
      tags:
        - authors
      parameters: *a711
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a authors record (fake — not persisted)
      operationId: create-authors
      tags:
        - authors
      requestBody:
        required: true
        content:
          application/json:
            schema: &a717
              $ref: "#/components/schemas/AuthorsRecordInput"
            example: &a718
              name: William Shakespeare
              slug: william-shakespeare
              bio: Vilitas thesis caute soleo aliquid aliqua delectatio conventus. Amplus
                colligo circumvenio voluptas curo consectetur demonstro animus
                repudiandae. Defleo ater verumtamen credo.
              bornYear: 1564
              diedYear: 1616
              nationality: English
              genres: *a712
              notableWorks: *a713
              imageUrl: https://picsum.photos/seed/author-1/600/600
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a714
              example: *a715
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/authors/{id}:
    get:
      summary: Get one authors record by id
      operationId: get-authors-by-id
      tags:
        - authors
      parameters: &a716
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a714
              example: *a715
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a authors record exists
      operationId: head-authors-by-id
      tags:
        - authors
      parameters: *a716
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a authors record (fake — not persisted)
      operationId: replace-authors
      tags:
        - authors
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a717
            example: *a718
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a714
              example: *a715
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a authors record (fake — not persisted)
      operationId: patch-authors
      tags:
        - authors
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AuthorsRecordPatch"
            example: *a718
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a714
              example: *a715
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a authors record (fake — not persisted)
      operationId: delete-authors
      tags:
        - authors
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/activists:
    get:
      summary: List activists
      operationId: list-activists
      tags:
        - activists
      parameters: &a719
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a722
                      $ref: "#/components/schemas/ActivistsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a723
                    id: 1
                    name: Nelson Mandela
                    slug: nelson-mandela
                    bio: Solio delinquo sapiente strues bellum. Admiratio comprehendo advoco uxor
                      tamisium utpote fuga apostolus. Tyrannus caelestis
                      capitulus amplitudo cupiditas adhuc.
                    bornYear: 1918
                    diedYear: 2013
                    causes: &a720
                      - Anti-apartheid
                      - Civil rights
                    country: South Africa
                    imageUrl: https://picsum.photos/seed/activist-1/600/600
                    accomplishments: &a721
                      - First Black president of South Africa
                      - Nobel Peace Prize 1993
                    createdAt: 2025-07-07T17:21:30.815Z
                meta:
                  total: 50
                  page: 1
                  limit: 25
                  totalPages: 2
                links:
                  self: /api/v1/activists?page=1&limit=25
                  first: /api/v1/activists?page=1&limit=25
                  last: /api/v1/activists?page=2&limit=25
                  next: /api/v1/activists?page=2&limit=25
                  prev: null
    head:
      summary: Check activists collection availability
      operationId: head-activists
      tags:
        - activists
      parameters: *a719
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a activists record (fake — not persisted)
      operationId: create-activists
      tags:
        - activists
      requestBody:
        required: true
        content:
          application/json:
            schema: &a725
              $ref: "#/components/schemas/ActivistsRecordInput"
            example: &a726
              name: Nelson Mandela
              slug: nelson-mandela
              bio: Solio delinquo sapiente strues bellum. Admiratio comprehendo advoco uxor
                tamisium utpote fuga apostolus. Tyrannus caelestis capitulus
                amplitudo cupiditas adhuc.
              bornYear: 1918
              diedYear: 2013
              causes: *a720
              country: South Africa
              imageUrl: https://picsum.photos/seed/activist-1/600/600
              accomplishments: *a721
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a722
              example: *a723
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/activists/{id}:
    get:
      summary: Get one activists record by id
      operationId: get-activists-by-id
      tags:
        - activists
      parameters: &a724
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a722
              example: *a723
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a activists record exists
      operationId: head-activists-by-id
      tags:
        - activists
      parameters: *a724
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a activists record (fake — not persisted)
      operationId: replace-activists
      tags:
        - activists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a725
            example: *a726
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a722
              example: *a723
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a activists record (fake — not persisted)
      operationId: patch-activists
      tags:
        - activists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ActivistsRecordPatch"
            example: *a726
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a722
              example: *a723
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a activists record (fake — not persisted)
      operationId: delete-activists
      tags:
        - activists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/quotes:
    get:
      summary: List quotes
      operationId: list-quotes
      tags:
        - quotes
      parameters: &a727
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a728
                      $ref: "#/components/schemas/QuotesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a729
                    id: 1
                    text: Be the change that you wish to see in the world.
                    authorName: Mahatma Gandhi
                    source: null
                    category: Inspiration
                    createdAt: 2025-03-23T18:12:43.329Z
                meta:
                  total: 200
                  page: 1
                  limit: 25
                  totalPages: 8
                links:
                  self: /api/v1/quotes?page=1&limit=25
                  first: /api/v1/quotes?page=1&limit=25
                  last: /api/v1/quotes?page=8&limit=25
                  next: /api/v1/quotes?page=2&limit=25
                  prev: null
    head:
      summary: Check quotes collection availability
      operationId: head-quotes
      tags:
        - quotes
      parameters: *a727
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a quotes record (fake — not persisted)
      operationId: create-quotes
      tags:
        - quotes
      requestBody:
        required: true
        content:
          application/json:
            schema: &a731
              $ref: "#/components/schemas/QuotesRecordInput"
            example: &a732
              text: Be the change that you wish to see in the world.
              authorName: Mahatma Gandhi
              source: null
              category: Inspiration
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a728
              example: *a729
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/quotes/{id}:
    get:
      summary: Get one quotes record by id
      operationId: get-quotes-by-id
      tags:
        - quotes
      parameters: &a730
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a728
              example: *a729
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a quotes record exists
      operationId: head-quotes-by-id
      tags:
        - quotes
      parameters: *a730
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a quotes record (fake — not persisted)
      operationId: replace-quotes
      tags:
        - quotes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a731
            example: *a732
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a728
              example: *a729
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a quotes record (fake — not persisted)
      operationId: patch-quotes
      tags:
        - quotes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/QuotesRecordPatch"
            example: *a732
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a728
              example: *a729
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a quotes record (fake — not persisted)
      operationId: delete-quotes
      tags:
        - quotes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
  /api/v1/jokes:
    get:
      summary: List jokes
      operationId: list-jokes
      tags:
        - jokes
      parameters: &a733
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Maximum number of records to return
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-based)
        - name: q
          in: query
          schema:
            type: string
          description: Full-text search query
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: &a734
                      $ref: "#/components/schemas/JokesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      last:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
                    required:
                      - self
                      - first
                      - last
                      - next
                      - prev
                required:
                  - data
                  - meta
                  - links
              example:
                data:
                  - &a735
                    id: 1
                    setup: Why don't scientists trust atoms?
                    punchline: Because they make up everything.
                    category: pun
                    rating: 4.8
                    createdAt: 2025-08-05T00:49:19.906Z
                meta:
                  total: 150
                  page: 1
                  limit: 25
                  totalPages: 6
                links:
                  self: /api/v1/jokes?page=1&limit=25
                  first: /api/v1/jokes?page=1&limit=25
                  last: /api/v1/jokes?page=6&limit=25
                  next: /api/v1/jokes?page=2&limit=25
                  prev: null
    head:
      summary: Check jokes collection availability
      operationId: head-jokes
      tags:
        - jokes
      parameters: *a733
      responses:
        "200":
          description: OK (headers only)
    post:
      summary: Create a jokes record (fake — not persisted)
      operationId: create-jokes
      tags:
        - jokes
      requestBody:
        required: true
        content:
          application/json:
            schema: &a737
              $ref: "#/components/schemas/JokesRecordInput"
            example: &a738
              setup: Why don't scientists trust atoms?
              punchline: Because they make up everything.
              category: pun
              rating: 4.8
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a734
              example: *a735
        "400":
          description: Malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
  /api/v1/jokes/{id}:
    get:
      summary: Get one jokes record by id
      operationId: get-jokes-by-id
      tags:
        - jokes
      parameters: &a736
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a734
              example: *a735
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
    head:
      summary: Check whether a jokes record exists
      operationId: head-jokes-by-id
      tags:
        - jokes
      parameters: *a736
      responses:
        "200":
          description: Record exists (headers only)
        "400":
          description: Invalid record id (headers only)
        "404":
          description: Record not found (headers only)
    put:
      summary: Replace a jokes record (fake — not persisted)
      operationId: replace-jokes
      tags:
        - jokes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema: *a737
            example: *a738
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a734
              example: *a735
        "400":
          description: Invalid id or malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
        "422":
          description: Validation failed
          content:
            application/problem+json:
              schema: *a4
    patch:
      summary: Partial update of a jokes record (fake — not persisted)
      operationId: patch-jokes
      tags:
        - jokes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/JokesRecordPatch"
            example: *a738
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a734
              example: *a735
        "400":
          description: Invalid id or non-object/malformed JSON request body
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
        "413":
          description: Request body exceeds 64 KiB
          content:
            application/problem+json:
              schema: *a4
    delete:
      summary: Delete a jokes record (fake — not persisted)
      operationId: delete-jokes
      tags:
        - jokes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "204":
          description: Deleted (no content)
        "400":
          description: Invalid record id
          content:
            application/problem+json:
              schema: *a4
        "404":
          description: Not found
          content:
            application/problem+json:
              schema: *a4
components:
  schemas:
    ProblemDetails:
      type: object
      properties:
        type:
          type: string
        title:
          type: string
        status:
          type: integer
        detail:
          type: string
        instance:
          type: string
        invalidParams:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
              reason:
                type: string
            required:
              - name
              - reason
      required:
        - type
        - title
        - status
    UsersRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        firstName:
          type: string
        lastName:
          type: string
        fullName:
          type: string
        username:
          type: string
        email:
          type: string
          format: email
        phone:
          type: string
        bio:
          type: string
        avatarUrl:
          type: string
          format: uri
        thumbnailUrl:
          type: string
          format: uri
        coverImageUrl:
          type: string
          format: uri
        emailVerified:
          type: boolean
        isActive:
          type: boolean
        twitterHandle:
          type: string
          nullable: true
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - firstName
        - lastName
        - fullName
        - username
        - email
        - phone
        - bio
        - avatarUrl
        - thumbnailUrl
        - coverImageUrl
        - emailVerified
        - isActive
        - twitterHandle
        - createdAt
        - updatedAt
    UsersRecordInput:
      type: object
      properties:
        firstName:
          type: string
        lastName:
          type: string
        fullName:
          type: string
        username:
          type: string
        email:
          type: string
          format: email
        phone:
          type: string
        bio:
          type: string
        avatarUrl:
          type: string
          format: uri
        thumbnailUrl:
          type: string
          format: uri
        coverImageUrl:
          type: string
          format: uri
        emailVerified:
          type: boolean
        isActive:
          type: boolean
        twitterHandle:
          type: string
          nullable: true
      required:
        - firstName
        - lastName
        - fullName
        - username
        - email
        - phone
        - bio
        - avatarUrl
        - thumbnailUrl
        - coverImageUrl
        - emailVerified
        - isActive
        - twitterHandle
    UsersRecordPatch:
      type: object
      properties:
        firstName:
          type: string
        lastName:
          type: string
        fullName:
          type: string
        username:
          type: string
        email:
          type: string
          format: email
        phone:
          type: string
        bio:
          type: string
        avatarUrl:
          type: string
          format: uri
        thumbnailUrl:
          type: string
          format: uri
        coverImageUrl:
          type: string
          format: uri
        emailVerified:
          type: boolean
        isActive:
          type: boolean
        twitterHandle:
          type: string
          nullable: true
    CountriesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        alpha2:
          type: string
        alpha3:
          type: string
        numericCode:
          type: string
        capital:
          type: string
        region:
          type: string
        subregion:
          type: string
        currencyCode:
          type: string
        callingCode:
          type: string
        flagEmoji:
          type: string
      required:
        - id
        - name
        - alpha2
        - alpha3
        - numericCode
        - capital
        - region
        - subregion
        - currencyCode
        - callingCode
        - flagEmoji
    CountriesRecordInput:
      type: object
      properties:
        name:
          type: string
        alpha2:
          type: string
        alpha3:
          type: string
        numericCode:
          type: string
        capital:
          type: string
        region:
          type: string
        subregion:
          type: string
        currencyCode:
          type: string
        callingCode:
          type: string
        flagEmoji:
          type: string
      required:
        - name
        - alpha2
        - alpha3
        - numericCode
        - capital
        - region
        - subregion
        - currencyCode
        - callingCode
        - flagEmoji
    CountriesRecordPatch:
      type: object
      properties:
        name:
          type: string
        alpha2:
          type: string
        alpha3:
          type: string
        numericCode:
          type: string
        capital:
          type: string
        region:
          type: string
        subregion:
          type: string
        currencyCode:
          type: string
        callingCode:
          type: string
        flagEmoji:
          type: string
    PostsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        title:
          type: string
        slug:
          type: string
        excerpt:
          type: string
        content:
          type: string
        isPublished:
          type: boolean
        publishedAt:
          type: string
          format: date-time
          nullable: true
        viewCount:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - title
        - slug
        - excerpt
        - content
        - isPublished
        - publishedAt
        - viewCount
        - createdAt
        - updatedAt
    PostsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        title:
          type: string
        slug:
          type: string
        excerpt:
          type: string
        content:
          type: string
        isPublished:
          type: boolean
        publishedAt:
          type: string
          format: date-time
          nullable: true
        viewCount:
          type: integer
      required:
        - userId
        - title
        - slug
        - excerpt
        - content
        - isPublished
        - publishedAt
        - viewCount
    PostsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        title:
          type: string
        slug:
          type: string
        excerpt:
          type: string
        content:
          type: string
        isPublished:
          type: boolean
        publishedAt:
          type: string
          format: date-time
          nullable: true
        viewCount:
          type: integer
    ProductsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        sku:
          type: string
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        category:
          type: string
          enum: &a739
            - electronics
            - clothing
            - home
            - kitchen
            - books
            - sports
            - beauty
            - toys
        brand:
          type: string
        price:
          type: number
        salePrice:
          type: number
          nullable: true
        currency:
          type: string
        inStock:
          type: boolean
        stockCount:
          type: integer
        rating:
          type: number
        ratingCount:
          type: integer
        imageUrl:
          type: string
          format: uri
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - sku
        - name
        - slug
        - description
        - category
        - brand
        - price
        - salePrice
        - currency
        - inStock
        - stockCount
        - rating
        - ratingCount
        - imageUrl
        - createdAt
        - updatedAt
    ProductsRecordInput:
      type: object
      properties:
        sku:
          type: string
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        category:
          type: string
          enum: *a739
        brand:
          type: string
        price:
          type: number
        salePrice:
          type: number
          nullable: true
        currency:
          type: string
        inStock:
          type: boolean
        stockCount:
          type: integer
        rating:
          type: number
        ratingCount:
          type: integer
        imageUrl:
          type: string
          format: uri
      required:
        - sku
        - name
        - slug
        - description
        - category
        - brand
        - price
        - salePrice
        - currency
        - inStock
        - stockCount
        - rating
        - ratingCount
        - imageUrl
    ProductsRecordPatch:
      type: object
      properties:
        sku:
          type: string
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        category:
          type: string
          enum: *a739
        brand:
          type: string
        price:
          type: number
        salePrice:
          type: number
          nullable: true
        currency:
          type: string
        inStock:
          type: boolean
        stockCount:
          type: integer
        rating:
          type: number
        ratingCount:
          type: integer
        imageUrl:
          type: string
          format: uri
    OrdersRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        status:
          type: string
          enum: &a740
            - pending
            - confirmed
            - shipped
            - delivered
            - cancelled
            - refunded
        currency:
          type: string
        subtotal:
          type: number
        tax:
          type: number
        shipping:
          type: number
        total:
          type: number
        placedAt:
          type: string
          format: date-time
        shippedAt:
          type: string
          format: date-time
          nullable: true
        deliveredAt:
          type: string
          format: date-time
          nullable: true
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - status
        - currency
        - subtotal
        - tax
        - shipping
        - total
        - placedAt
        - shippedAt
        - deliveredAt
        - createdAt
        - updatedAt
    OrdersRecordInput:
      type: object
      properties:
        userId:
          type: integer
        status:
          type: string
          enum: *a740
        currency:
          type: string
        subtotal:
          type: number
        tax:
          type: number
        shipping:
          type: number
        total:
          type: number
        placedAt:
          type: string
          format: date-time
        shippedAt:
          type: string
          format: date-time
          nullable: true
        deliveredAt:
          type: string
          format: date-time
          nullable: true
      required:
        - userId
        - status
        - currency
        - subtotal
        - tax
        - shipping
        - total
        - placedAt
        - shippedAt
        - deliveredAt
    OrdersRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        status:
          type: string
          enum: *a740
        currency:
          type: string
        subtotal:
          type: number
        tax:
          type: number
        shipping:
          type: number
        total:
          type: number
        placedAt:
          type: string
          format: date-time
        shippedAt:
          type: string
          format: date-time
          nullable: true
        deliveredAt:
          type: string
          format: date-time
          nullable: true
    OrderItemsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        orderId:
          type: integer
        productId:
          type: integer
        quantity:
          type: integer
        unitPrice:
          type: number
        lineTotal:
          type: number
      required:
        - id
        - orderId
        - productId
        - quantity
        - unitPrice
        - lineTotal
    OrderItemsRecordInput:
      type: object
      properties:
        orderId:
          type: integer
        productId:
          type: integer
        quantity:
          type: integer
        unitPrice:
          type: number
        lineTotal:
          type: number
      required:
        - orderId
        - productId
        - quantity
        - unitPrice
        - lineTotal
    OrderItemsRecordPatch:
      type: object
      properties:
        orderId:
          type: integer
        productId:
          type: integer
        quantity:
          type: integer
        unitPrice:
          type: number
        lineTotal:
          type: number
    RestaurantsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        cuisine:
          type: string
          enum: &a741
            - italian
            - japanese
            - mexican
            - indian
            - thai
            - french
            - american
            - chinese
            - mediterranean
            - vietnamese
            - korean
            - ethiopian
        priceRange:
          type: string
          enum: &a742
            - $
            - $$
            - $$$
            - $$$$
        rating:
          type: number
        ratingCount:
          type: integer
        countryAlpha2:
          type: string
        city:
          type: string
        neighborhood:
          type: string
        address:
          type: string
        phone:
          type: string
        website:
          type: string
          format: uri
          nullable: true
        hasDelivery:
          type: boolean
        isOpen:
          type: boolean
        latitude:
          type: number
        longitude:
          type: number
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - name
        - slug
        - cuisine
        - priceRange
        - rating
        - ratingCount
        - countryAlpha2
        - city
        - neighborhood
        - address
        - phone
        - website
        - hasDelivery
        - isOpen
        - latitude
        - longitude
        - createdAt
        - updatedAt
    RestaurantsRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        cuisine:
          type: string
          enum: *a741
        priceRange:
          type: string
          enum: *a742
        rating:
          type: number
        ratingCount:
          type: integer
        countryAlpha2:
          type: string
        city:
          type: string
        neighborhood:
          type: string
        address:
          type: string
        phone:
          type: string
        website:
          type: string
          format: uri
          nullable: true
        hasDelivery:
          type: boolean
        isOpen:
          type: boolean
        latitude:
          type: number
        longitude:
          type: number
      required:
        - name
        - slug
        - cuisine
        - priceRange
        - rating
        - ratingCount
        - countryAlpha2
        - city
        - neighborhood
        - address
        - phone
        - website
        - hasDelivery
        - isOpen
        - latitude
        - longitude
    RestaurantsRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        cuisine:
          type: string
          enum: *a741
        priceRange:
          type: string
          enum: *a742
        rating:
          type: number
        ratingCount:
          type: integer
        countryAlpha2:
          type: string
        city:
          type: string
        neighborhood:
          type: string
        address:
          type: string
        phone:
          type: string
        website:
          type: string
          format: uri
          nullable: true
        hasDelivery:
          type: boolean
        isOpen:
          type: boolean
        latitude:
          type: number
        longitude:
          type: number
    RestaurantPhotosRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        restaurantId:
          type: integer
        url:
          type: string
          format: uri
        alt:
          type: string
        caption:
          type: string
        isPrimary:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - restaurantId
        - url
        - alt
        - caption
        - isPrimary
        - createdAt
    RestaurantPhotosRecordInput:
      type: object
      properties:
        restaurantId:
          type: integer
        url:
          type: string
          format: uri
        alt:
          type: string
        caption:
          type: string
        isPrimary:
          type: boolean
      required:
        - restaurantId
        - url
        - alt
        - caption
        - isPrimary
    RestaurantPhotosRecordPatch:
      type: object
      properties:
        restaurantId:
          type: integer
        url:
          type: string
          format: uri
        alt:
          type: string
        caption:
          type: string
        isPrimary:
          type: boolean
    RecipesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        cuisine:
          type: string
          enum: &a743
            - italian
            - japanese
            - mexican
            - indian
            - thai
            - french
            - american
            - chinese
            - mediterranean
            - vietnamese
        difficulty:
          type: string
          enum: &a744
            - easy
            - medium
            - hard
        prepMinutes:
          type: integer
        cookMinutes:
          type: integer
        servings:
          type: integer
        ingredients:
          type: array
          items: &a745
            type: string
        instructions:
          type: array
          items: &a746
            type: string
        tags:
          type: array
          items: &a747
            type: string
        imageUrl:
          type: string
          format: uri
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - title
        - slug
        - description
        - cuisine
        - difficulty
        - prepMinutes
        - cookMinutes
        - servings
        - ingredients
        - instructions
        - tags
        - imageUrl
        - createdAt
        - updatedAt
    RecipesRecordInput:
      type: object
      properties:
        userId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        cuisine:
          type: string
          enum: *a743
        difficulty:
          type: string
          enum: *a744
        prepMinutes:
          type: integer
        cookMinutes:
          type: integer
        servings:
          type: integer
        ingredients:
          type: array
          items: *a745
        instructions:
          type: array
          items: *a746
        tags:
          type: array
          items: *a747
        imageUrl:
          type: string
          format: uri
      required:
        - userId
        - title
        - slug
        - description
        - cuisine
        - difficulty
        - prepMinutes
        - cookMinutes
        - servings
        - ingredients
        - instructions
        - tags
        - imageUrl
    RecipesRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        cuisine:
          type: string
          enum: *a743
        difficulty:
          type: string
          enum: *a744
        prepMinutes:
          type: integer
        cookMinutes:
          type: integer
        servings:
          type: integer
        ingredients:
          type: array
          items: *a745
        instructions:
          type: array
          items: *a746
        tags:
          type: array
          items: *a747
        imageUrl:
          type: string
          format: uri
    CommentsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        targetType:
          type: string
          enum: &a748
            - post
            - product
            - comment
            - recipe
            - restaurant
        targetId:
          type: integer
        body:
          type: string
        isEdited:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - targetType
        - targetId
        - body
        - isEdited
        - createdAt
        - updatedAt
    CommentsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        targetType:
          type: string
          enum: *a748
        targetId:
          type: integer
        body:
          type: string
        isEdited:
          type: boolean
      required:
        - userId
        - targetType
        - targetId
        - body
        - isEdited
    CommentsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        targetType:
          type: string
          enum: *a748
        targetId:
          type: integer
        body:
          type: string
        isEdited:
          type: boolean
    ReactionsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        targetType:
          type: string
          enum: &a749
            - post
            - product
            - comment
            - recipe
            - restaurant
        targetId:
          type: integer
        type:
          type: string
          enum: &a750
            - like
            - love
            - laugh
            - wow
            - sad
            - angry
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - targetType
        - targetId
        - type
        - createdAt
    ReactionsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        targetType:
          type: string
          enum: *a749
        targetId:
          type: integer
        type:
          type: string
          enum: *a750
      required:
        - userId
        - targetType
        - targetId
        - type
    ReactionsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        targetType:
          type: string
          enum: *a749
        targetId:
          type: integer
        type:
          type: string
          enum: *a750
    CurrenciesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        code:
          type: string
        name:
          type: string
        symbol:
          type: string
        decimalDigits:
          type: integer
      required:
        - id
        - code
        - name
        - symbol
        - decimalDigits
    CurrenciesRecordInput:
      type: object
      properties:
        code:
          type: string
        name:
          type: string
        symbol:
          type: string
        decimalDigits:
          type: integer
      required:
        - code
        - name
        - symbol
        - decimalDigits
    CurrenciesRecordPatch:
      type: object
      properties:
        code:
          type: string
        name:
          type: string
        symbol:
          type: string
        decimalDigits:
          type: integer
    LanguagesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        code:
          type: string
        name:
          type: string
        nativeName:
          type: string
        direction:
          type: string
          enum: &a751
            - ltr
            - rtl
      required:
        - id
        - code
        - name
        - nativeName
        - direction
    LanguagesRecordInput:
      type: object
      properties:
        code:
          type: string
        name:
          type: string
        nativeName:
          type: string
        direction:
          type: string
          enum: *a751
      required:
        - code
        - name
        - nativeName
        - direction
    LanguagesRecordPatch:
      type: object
      properties:
        code:
          type: string
        name:
          type: string
        nativeName:
          type: string
        direction:
          type: string
          enum: *a751
    TimeZonesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        offsetMinutes:
          type: integer
        abbreviation:
          type: string
        countryAlpha2:
          type: string
      required:
        - id
        - name
        - offsetMinutes
        - abbreviation
        - countryAlpha2
    TimeZonesRecordInput:
      type: object
      properties:
        name:
          type: string
        offsetMinutes:
          type: integer
        abbreviation:
          type: string
        countryAlpha2:
          type: string
      required:
        - name
        - offsetMinutes
        - abbreviation
        - countryAlpha2
    TimeZonesRecordPatch:
      type: object
      properties:
        name:
          type: string
        offsetMinutes:
          type: integer
        abbreviation:
          type: string
        countryAlpha2:
          type: string
    IndustriesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        sector:
          type: string
        description:
          type: string
      required:
        - id
        - name
        - slug
        - sector
        - description
    IndustriesRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        sector:
          type: string
        description:
          type: string
      required:
        - name
        - slug
        - sector
        - description
    IndustriesRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        sector:
          type: string
        description:
          type: string
    CategoriesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        parentId:
          type: integer
          nullable: true
        sortOrder:
          type: integer
      required:
        - id
        - name
        - slug
        - description
        - parentId
        - sortOrder
    CategoriesRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        parentId:
          type: integer
          nullable: true
        sortOrder:
          type: integer
      required:
        - name
        - slug
        - description
        - parentId
        - sortOrder
    CategoriesRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        parentId:
          type: integer
          nullable: true
        sortOrder:
          type: integer
    TagsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        color:
          type: string
        useCount:
          type: integer
      required:
        - id
        - name
        - slug
        - color
        - useCount
    TagsRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        color:
          type: string
        useCount:
          type: integer
      required:
        - name
        - slug
        - color
        - useCount
    TagsRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        color:
          type: string
        useCount:
          type: integer
    FollowersRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        followsUserId:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - followsUserId
        - createdAt
    FollowersRecordInput:
      type: object
      properties:
        userId:
          type: integer
        followsUserId:
          type: integer
      required:
        - userId
        - followsUserId
    FollowersRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        followsUserId:
          type: integer
    NotificationsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        type:
          type: string
          enum: &a752
            - follow
            - mention
            - reply
            - like
            - system
        title:
          type: string
        body:
          type: string
        isRead:
          type: boolean
        link:
          type: string
          nullable: true
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - type
        - title
        - body
        - isRead
        - link
        - createdAt
    NotificationsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        type:
          type: string
          enum: *a752
        title:
          type: string
        body:
          type: string
        isRead:
          type: boolean
        link:
          type: string
          nullable: true
      required:
        - userId
        - type
        - title
        - body
        - isRead
        - link
    NotificationsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        type:
          type: string
          enum: *a752
        title:
          type: string
        body:
          type: string
        isRead:
          type: boolean
        link:
          type: string
          nullable: true
    ConversationsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        title:
          type: string
          nullable: true
        isGroup:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - title
        - isGroup
        - createdAt
        - updatedAt
    ConversationsRecordInput:
      type: object
      properties:
        title:
          type: string
          nullable: true
        isGroup:
          type: boolean
      required:
        - title
        - isGroup
    ConversationsRecordPatch:
      type: object
      properties:
        title:
          type: string
          nullable: true
        isGroup:
          type: boolean
    MessagesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        conversationId:
          type: integer
        userId:
          type: integer
        body:
          type: string
        isEdited:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - conversationId
        - userId
        - body
        - isEdited
        - createdAt
        - updatedAt
    MessagesRecordInput:
      type: object
      properties:
        conversationId:
          type: integer
        userId:
          type: integer
        body:
          type: string
        isEdited:
          type: boolean
      required:
        - conversationId
        - userId
        - body
        - isEdited
    MessagesRecordPatch:
      type: object
      properties:
        conversationId:
          type: integer
        userId:
          type: integer
        body:
          type: string
        isEdited:
          type: boolean
    ActivitiesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        verb:
          type: string
          enum: &a753
            - created
            - updated
            - deleted
            - liked
            - commented
            - shared
        targetType:
          type: string
          enum: &a754
            - post
            - product
            - comment
            - recipe
            - restaurant
        targetId:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - verb
        - targetType
        - targetId
        - createdAt
    ActivitiesRecordInput:
      type: object
      properties:
        userId:
          type: integer
        verb:
          type: string
          enum: *a753
        targetType:
          type: string
          enum: *a754
        targetId:
          type: integer
      required:
        - userId
        - verb
        - targetType
        - targetId
    ActivitiesRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        verb:
          type: string
          enum: *a753
        targetType:
          type: string
          enum: *a754
        targetId:
          type: integer
    AttachmentsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        targetType:
          type: string
          enum: &a755
            - post
            - product
            - comment
            - recipe
            - restaurant
        targetId:
          type: integer
        url:
          type: string
        mimeType:
          type: string
        sizeBytes:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - targetType
        - targetId
        - url
        - mimeType
        - sizeBytes
        - createdAt
    AttachmentsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        targetType:
          type: string
          enum: *a755
        targetId:
          type: integer
        url:
          type: string
        mimeType:
          type: string
        sizeBytes:
          type: integer
      required:
        - userId
        - targetType
        - targetId
        - url
        - mimeType
        - sizeBytes
    AttachmentsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        targetType:
          type: string
          enum: *a755
        targetId:
          type: integer
        url:
          type: string
        mimeType:
          type: string
        sizeBytes:
          type: integer
    HashtagsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        tag:
          type: string
        useCount:
          type: integer
      required:
        - id
        - tag
        - useCount
    HashtagsRecordInput:
      type: object
      properties:
        tag:
          type: string
        useCount:
          type: integer
      required:
        - tag
        - useCount
    HashtagsRecordPatch:
      type: object
      properties:
        tag:
          type: string
        useCount:
          type: integer
    GroupsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        memberCount:
          type: integer
        isPublic:
          type: boolean
        ownerUserId:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - name
        - slug
        - description
        - memberCount
        - isPublic
        - ownerUserId
        - createdAt
        - updatedAt
    GroupsRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        memberCount:
          type: integer
        isPublic:
          type: boolean
        ownerUserId:
          type: integer
      required:
        - name
        - slug
        - description
        - memberCount
        - isPublic
        - ownerUserId
    GroupsRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        memberCount:
          type: integer
        isPublic:
          type: boolean
        ownerUserId:
          type: integer
    GroupMembersRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        groupId:
          type: integer
        userId:
          type: integer
        role:
          type: string
          enum: &a756
            - owner
            - admin
            - moderator
            - member
        joinedAt:
          type: string
          format: date-time
      required:
        - id
        - groupId
        - userId
        - role
        - joinedAt
    GroupMembersRecordInput:
      type: object
      properties:
        groupId:
          type: integer
        userId:
          type: integer
        role:
          type: string
          enum: *a756
        joinedAt:
          type: string
          format: date-time
      required:
        - groupId
        - userId
        - role
        - joinedAt
    GroupMembersRecordPatch:
      type: object
      properties:
        groupId:
          type: integer
        userId:
          type: integer
        role:
          type: string
          enum: *a756
        joinedAt:
          type: string
          format: date-time
    StoriesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        mediaUrl:
          type: string
          format: uri
        mediaType:
          type: string
          enum: &a757
            - image
            - video
        caption:
          type: string
        viewCount:
          type: integer
        expiresAt:
          type: string
          format: date-time
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - mediaUrl
        - mediaType
        - caption
        - viewCount
        - expiresAt
        - createdAt
    StoriesRecordInput:
      type: object
      properties:
        userId:
          type: integer
        mediaUrl:
          type: string
          format: uri
        mediaType:
          type: string
          enum: *a757
        caption:
          type: string
        viewCount:
          type: integer
        expiresAt:
          type: string
          format: date-time
      required:
        - userId
        - mediaUrl
        - mediaType
        - caption
        - viewCount
        - expiresAt
    StoriesRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        mediaUrl:
          type: string
          format: uri
        mediaType:
          type: string
          enum: *a757
        caption:
          type: string
        viewCount:
          type: integer
        expiresAt:
          type: string
          format: date-time
    EventsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        location:
          type: string
        isOnline:
          type: boolean
        startAt:
          type: string
          format: date-time
        endAt:
          type: string
          format: date-time
        organizerUserId:
          type: integer
        attendeeCount:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - title
        - slug
        - description
        - location
        - isOnline
        - startAt
        - endAt
        - organizerUserId
        - attendeeCount
        - createdAt
        - updatedAt
    EventsRecordInput:
      type: object
      properties:
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        location:
          type: string
        isOnline:
          type: boolean
        startAt:
          type: string
          format: date-time
        endAt:
          type: string
          format: date-time
        organizerUserId:
          type: integer
        attendeeCount:
          type: integer
      required:
        - title
        - slug
        - description
        - location
        - isOnline
        - startAt
        - endAt
        - organizerUserId
        - attendeeCount
    EventsRecordPatch:
      type: object
      properties:
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        location:
          type: string
        isOnline:
          type: boolean
        startAt:
          type: string
          format: date-time
        endAt:
          type: string
          format: date-time
        organizerUserId:
          type: integer
        attendeeCount:
          type: integer
    EventRsvpsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        eventId:
          type: integer
        userId:
          type: integer
        status:
          type: string
          enum: &a758
            - going
            - maybe
            - declined
        respondedAt:
          type: string
          format: date-time
      required:
        - id
        - eventId
        - userId
        - status
        - respondedAt
    EventRsvpsRecordInput:
      type: object
      properties:
        eventId:
          type: integer
        userId:
          type: integer
        status:
          type: string
          enum: *a758
        respondedAt:
          type: string
          format: date-time
      required:
        - eventId
        - userId
        - status
        - respondedAt
    EventRsvpsRecordPatch:
      type: object
      properties:
        eventId:
          type: integer
        userId:
          type: integer
        status:
          type: string
          enum: *a758
        respondedAt:
          type: string
          format: date-time
    BrandsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        logoUrl:
          type: string
          format: uri
        website:
          type: string
          format: uri
          nullable: true
        foundedYear:
          type: integer
        headquartersCountryAlpha2:
          type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - name
        - slug
        - description
        - logoUrl
        - website
        - foundedYear
        - headquartersCountryAlpha2
        - createdAt
    BrandsRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        logoUrl:
          type: string
          format: uri
        website:
          type: string
          format: uri
          nullable: true
        foundedYear:
          type: integer
        headquartersCountryAlpha2:
          type: string
      required:
        - name
        - slug
        - description
        - logoUrl
        - website
        - foundedYear
        - headquartersCountryAlpha2
    BrandsRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        logoUrl:
          type: string
          format: uri
        website:
          type: string
          format: uri
          nullable: true
        foundedYear:
          type: integer
        headquartersCountryAlpha2:
          type: string
    StoresRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        address:
          type: string
        city:
          type: string
        region:
          type: string
        countryAlpha2:
          type: string
        postalCode:
          type: string
        phone:
          type: string
        website:
          type: string
          format: uri
          nullable: true
        hours:
          type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - name
        - slug
        - description
        - address
        - city
        - region
        - countryAlpha2
        - postalCode
        - phone
        - website
        - hours
        - createdAt
    StoresRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        address:
          type: string
        city:
          type: string
        region:
          type: string
        countryAlpha2:
          type: string
        postalCode:
          type: string
        phone:
          type: string
        website:
          type: string
          format: uri
          nullable: true
        hours:
          type: string
      required:
        - name
        - slug
        - description
        - address
        - city
        - region
        - countryAlpha2
        - postalCode
        - phone
        - website
        - hours
    StoresRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        address:
          type: string
        city:
          type: string
        region:
          type: string
        countryAlpha2:
          type: string
        postalCode:
          type: string
        phone:
          type: string
        website:
          type: string
          format: uri
          nullable: true
        hours:
          type: string
    AddressesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        label:
          type: string
          enum: &a759
            - home
            - work
            - billing
            - shipping
            - other
        recipient:
          type: string
        street1:
          type: string
        street2:
          type: string
          nullable: true
        city:
          type: string
        region:
          type: string
        postalCode:
          type: string
        countryAlpha2:
          type: string
        isDefault:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - label
        - recipient
        - street1
        - street2
        - city
        - region
        - postalCode
        - countryAlpha2
        - isDefault
        - createdAt
    AddressesRecordInput:
      type: object
      properties:
        userId:
          type: integer
        label:
          type: string
          enum: *a759
        recipient:
          type: string
        street1:
          type: string
        street2:
          type: string
          nullable: true
        city:
          type: string
        region:
          type: string
        postalCode:
          type: string
        countryAlpha2:
          type: string
        isDefault:
          type: boolean
      required:
        - userId
        - label
        - recipient
        - street1
        - street2
        - city
        - region
        - postalCode
        - countryAlpha2
        - isDefault
    AddressesRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        label:
          type: string
          enum: *a759
        recipient:
          type: string
        street1:
          type: string
        street2:
          type: string
          nullable: true
        city:
          type: string
        region:
          type: string
        postalCode:
          type: string
        countryAlpha2:
          type: string
        isDefault:
          type: boolean
    CouponsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        code:
          type: string
        discountType:
          type: string
          enum: &a760
            - percent
            - fixed
        value:
          type: number
        minOrderAmount:
          type: number
          nullable: true
        maxRedemptions:
          type: integer
          nullable: true
        redemptionCount:
          type: integer
        validFrom:
          type: string
          format: date-time
        validUntil:
          type: string
          format: date-time
        isActive:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - code
        - discountType
        - value
        - minOrderAmount
        - maxRedemptions
        - redemptionCount
        - validFrom
        - validUntil
        - isActive
        - createdAt
    CouponsRecordInput:
      type: object
      properties:
        code:
          type: string
        discountType:
          type: string
          enum: *a760
        value:
          type: number
        minOrderAmount:
          type: number
          nullable: true
        maxRedemptions:
          type: integer
          nullable: true
        redemptionCount:
          type: integer
        validFrom:
          type: string
          format: date-time
        validUntil:
          type: string
          format: date-time
        isActive:
          type: boolean
      required:
        - code
        - discountType
        - value
        - minOrderAmount
        - maxRedemptions
        - redemptionCount
        - validFrom
        - validUntil
        - isActive
    CouponsRecordPatch:
      type: object
      properties:
        code:
          type: string
        discountType:
          type: string
          enum: *a760
        value:
          type: number
        minOrderAmount:
          type: number
          nullable: true
        maxRedemptions:
          type: integer
          nullable: true
        redemptionCount:
          type: integer
        validFrom:
          type: string
          format: date-time
        validUntil:
          type: string
          format: date-time
        isActive:
          type: boolean
    ProductReviewsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        productId:
          type: integer
        userId:
          type: integer
        rating:
          type: number
        title:
          type: string
        body:
          type: string
        isVerified:
          type: boolean
        helpfulCount:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - productId
        - userId
        - rating
        - title
        - body
        - isVerified
        - helpfulCount
        - createdAt
        - updatedAt
    ProductReviewsRecordInput:
      type: object
      properties:
        productId:
          type: integer
        userId:
          type: integer
        rating:
          type: number
        title:
          type: string
        body:
          type: string
        isVerified:
          type: boolean
        helpfulCount:
          type: integer
      required:
        - productId
        - userId
        - rating
        - title
        - body
        - isVerified
        - helpfulCount
    ProductReviewsRecordPatch:
      type: object
      properties:
        productId:
          type: integer
        userId:
          type: integer
        rating:
          type: number
        title:
          type: string
        body:
          type: string
        isVerified:
          type: boolean
        helpfulCount:
          type: integer
    WishlistsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        name:
          type: string
        isPublic:
          type: boolean
        productIds:
          type: array
          items: &a761
            type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - name
        - isPublic
        - productIds
        - createdAt
        - updatedAt
    WishlistsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        name:
          type: string
        isPublic:
          type: boolean
        productIds:
          type: array
          items: *a761
      required:
        - userId
        - name
        - isPublic
        - productIds
    WishlistsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        name:
          type: string
        isPublic:
          type: boolean
        productIds:
          type: array
          items: *a761
    CartsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        currency:
          type: string
        subtotal:
          type: number
        itemCount:
          type: integer
        updatedAt:
          type: string
          format: date-time
          readOnly: true
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - currency
        - subtotal
        - itemCount
        - updatedAt
        - createdAt
    CartsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        currency:
          type: string
        subtotal:
          type: number
        itemCount:
          type: integer
      required:
        - userId
        - currency
        - subtotal
        - itemCount
    CartsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        currency:
          type: string
        subtotal:
          type: number
        itemCount:
          type: integer
    CartItemsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        cartId:
          type: integer
        productId:
          type: integer
        quantity:
          type: integer
        unitPrice:
          type: number
        addedAt:
          type: string
          format: date-time
      required:
        - id
        - cartId
        - productId
        - quantity
        - unitPrice
        - addedAt
    CartItemsRecordInput:
      type: object
      properties:
        cartId:
          type: integer
        productId:
          type: integer
        quantity:
          type: integer
        unitPrice:
          type: number
        addedAt:
          type: string
          format: date-time
      required:
        - cartId
        - productId
        - quantity
        - unitPrice
        - addedAt
    CartItemsRecordPatch:
      type: object
      properties:
        cartId:
          type: integer
        productId:
          type: integer
        quantity:
          type: integer
        unitPrice:
          type: number
        addedAt:
          type: string
          format: date-time
    ShipmentsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        orderId:
          type: integer
        carrier:
          type: string
          enum: &a762
            - ups
            - usps
            - fedex
            - dhl
        trackingNumber:
          type: string
        status:
          type: string
          enum: &a763
            - label_created
            - in_transit
            - out_for_delivery
            - delivered
            - exception
        shippedAt:
          type: string
          format: date-time
        deliveredAt:
          type: string
          format: date-time
          nullable: true
        estimatedDeliveryAt:
          type: string
          format: date-time
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - orderId
        - carrier
        - trackingNumber
        - status
        - shippedAt
        - deliveredAt
        - estimatedDeliveryAt
        - createdAt
    ShipmentsRecordInput:
      type: object
      properties:
        orderId:
          type: integer
        carrier:
          type: string
          enum: *a762
        trackingNumber:
          type: string
        status:
          type: string
          enum: *a763
        shippedAt:
          type: string
          format: date-time
        deliveredAt:
          type: string
          format: date-time
          nullable: true
        estimatedDeliveryAt:
          type: string
          format: date-time
      required:
        - orderId
        - carrier
        - trackingNumber
        - status
        - shippedAt
        - deliveredAt
        - estimatedDeliveryAt
    ShipmentsRecordPatch:
      type: object
      properties:
        orderId:
          type: integer
        carrier:
          type: string
          enum: *a762
        trackingNumber:
          type: string
        status:
          type: string
          enum: *a763
        shippedAt:
          type: string
          format: date-time
        deliveredAt:
          type: string
          format: date-time
          nullable: true
        estimatedDeliveryAt:
          type: string
          format: date-time
    DestinationsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        countryAlpha2:
          type: string
        description:
          type: string
        imageUrl:
          type: string
          format: uri
        popularity:
          type: integer
      required:
        - id
        - name
        - slug
        - countryAlpha2
        - description
        - imageUrl
        - popularity
    DestinationsRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        countryAlpha2:
          type: string
        description:
          type: string
        imageUrl:
          type: string
          format: uri
        popularity:
          type: integer
      required:
        - name
        - slug
        - countryAlpha2
        - description
        - imageUrl
        - popularity
    DestinationsRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        countryAlpha2:
          type: string
        description:
          type: string
        imageUrl:
          type: string
          format: uri
        popularity:
          type: integer
    FlightsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        flightNumber:
          type: string
        airline:
          type: string
        departureAirport:
          type: string
        arrivalAirport:
          type: string
        departureAt:
          type: string
          format: date-time
        arrivalAt:
          type: string
          format: date-time
        durationMinutes:
          type: integer
        status:
          type: string
          enum: &a764
            - scheduled
            - boarding
            - in_air
            - landed
            - cancelled
            - delayed
        priceFrom:
          type: number
        currency:
          type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - flightNumber
        - airline
        - departureAirport
        - arrivalAirport
        - departureAt
        - arrivalAt
        - durationMinutes
        - status
        - priceFrom
        - currency
        - createdAt
    FlightsRecordInput:
      type: object
      properties:
        flightNumber:
          type: string
        airline:
          type: string
        departureAirport:
          type: string
        arrivalAirport:
          type: string
        departureAt:
          type: string
          format: date-time
        arrivalAt:
          type: string
          format: date-time
        durationMinutes:
          type: integer
        status:
          type: string
          enum: *a764
        priceFrom:
          type: number
        currency:
          type: string
      required:
        - flightNumber
        - airline
        - departureAirport
        - arrivalAirport
        - departureAt
        - arrivalAt
        - durationMinutes
        - status
        - priceFrom
        - currency
    FlightsRecordPatch:
      type: object
      properties:
        flightNumber:
          type: string
        airline:
          type: string
        departureAirport:
          type: string
        arrivalAirport:
          type: string
        departureAt:
          type: string
          format: date-time
        arrivalAt:
          type: string
          format: date-time
        durationMinutes:
          type: integer
        status:
          type: string
          enum: *a764
        priceFrom:
          type: number
        currency:
          type: string
    HotelsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        brand:
          type: string
          nullable: true
        countryAlpha2:
          type: string
        city:
          type: string
        address:
          type: string
        latitude:
          type: number
        longitude:
          type: number
        starRating:
          type: integer
        rating:
          type: number
        ratingCount:
          type: integer
        priceFromPerNight:
          type: number
        currency:
          type: string
        amenities:
          type: array
          items: &a765
            type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - name
        - slug
        - brand
        - countryAlpha2
        - city
        - address
        - latitude
        - longitude
        - starRating
        - rating
        - ratingCount
        - priceFromPerNight
        - currency
        - amenities
        - createdAt
    HotelsRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        brand:
          type: string
          nullable: true
        countryAlpha2:
          type: string
        city:
          type: string
        address:
          type: string
        latitude:
          type: number
        longitude:
          type: number
        starRating:
          type: integer
        rating:
          type: number
        ratingCount:
          type: integer
        priceFromPerNight:
          type: number
        currency:
          type: string
        amenities:
          type: array
          items: *a765
      required:
        - name
        - slug
        - brand
        - countryAlpha2
        - city
        - address
        - latitude
        - longitude
        - starRating
        - rating
        - ratingCount
        - priceFromPerNight
        - currency
        - amenities
    HotelsRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        brand:
          type: string
          nullable: true
        countryAlpha2:
          type: string
        city:
          type: string
        address:
          type: string
        latitude:
          type: number
        longitude:
          type: number
        starRating:
          type: integer
        rating:
          type: number
        ratingCount:
          type: integer
        priceFromPerNight:
          type: number
        currency:
          type: string
        amenities:
          type: array
          items: *a765
    PropertiesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        type:
          type: string
          enum: &a766
            - apartment
            - house
            - villa
            - cabin
            - loft
            - condo
        countryAlpha2:
          type: string
        city:
          type: string
        address:
          type: string
        latitude:
          type: number
        longitude:
          type: number
        bedrooms:
          type: integer
        bathrooms:
          type: number
        maxGuests:
          type: integer
        pricePerNight:
          type: number
        currency:
          type: string
        rating:
          type: number
        ratingCount:
          type: integer
        hostUserId:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - name
        - slug
        - type
        - countryAlpha2
        - city
        - address
        - latitude
        - longitude
        - bedrooms
        - bathrooms
        - maxGuests
        - pricePerNight
        - currency
        - rating
        - ratingCount
        - hostUserId
        - createdAt
        - updatedAt
    PropertiesRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        type:
          type: string
          enum: *a766
        countryAlpha2:
          type: string
        city:
          type: string
        address:
          type: string
        latitude:
          type: number
        longitude:
          type: number
        bedrooms:
          type: integer
        bathrooms:
          type: number
        maxGuests:
          type: integer
        pricePerNight:
          type: number
        currency:
          type: string
        rating:
          type: number
        ratingCount:
          type: integer
        hostUserId:
          type: integer
      required:
        - name
        - slug
        - type
        - countryAlpha2
        - city
        - address
        - latitude
        - longitude
        - bedrooms
        - bathrooms
        - maxGuests
        - pricePerNight
        - currency
        - rating
        - ratingCount
        - hostUserId
    PropertiesRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        type:
          type: string
          enum: *a766
        countryAlpha2:
          type: string
        city:
          type: string
        address:
          type: string
        latitude:
          type: number
        longitude:
          type: number
        bedrooms:
          type: integer
        bathrooms:
          type: number
        maxGuests:
          type: integer
        pricePerNight:
          type: number
        currency:
          type: string
        rating:
          type: number
        ratingCount:
          type: integer
        hostUserId:
          type: integer
    PropertiesSavedRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        propertyId:
          type: integer
        savedAt:
          type: string
          format: date-time
      required:
        - id
        - userId
        - propertyId
        - savedAt
    PropertiesSavedRecordInput:
      type: object
      properties:
        userId:
          type: integer
        propertyId:
          type: integer
        savedAt:
          type: string
          format: date-time
      required:
        - userId
        - propertyId
        - savedAt
    PropertiesSavedRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        propertyId:
          type: integer
        savedAt:
          type: string
          format: date-time
    TicketsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        eventName:
          type: string
        venue:
          type: string
        eventAt:
          type: string
          format: date-time
        type:
          type: string
          enum: &a767
            - vip
            - general
            - standing
            - balcony
            - reserved
        price:
          type: number
        currency:
          type: string
        sectionCode:
          type: string
        seatCode:
          type: string
          nullable: true
        isSold:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - eventName
        - venue
        - eventAt
        - type
        - price
        - currency
        - sectionCode
        - seatCode
        - isSold
        - createdAt
    TicketsRecordInput:
      type: object
      properties:
        eventName:
          type: string
        venue:
          type: string
        eventAt:
          type: string
          format: date-time
        type:
          type: string
          enum: *a767
        price:
          type: number
        currency:
          type: string
        sectionCode:
          type: string
        seatCode:
          type: string
          nullable: true
        isSold:
          type: boolean
      required:
        - eventName
        - venue
        - eventAt
        - type
        - price
        - currency
        - sectionCode
        - seatCode
        - isSold
    TicketsRecordPatch:
      type: object
      properties:
        eventName:
          type: string
        venue:
          type: string
        eventAt:
          type: string
          format: date-time
        type:
          type: string
          enum: *a767
        price:
          type: number
        currency:
          type: string
        sectionCode:
          type: string
        seatCode:
          type: string
          nullable: true
        isSold:
          type: boolean
    BookingsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        kind:
          type: string
          enum: &a768
            - flight
            - hotel
            - property
        referenceId:
          type: integer
        checkInAt:
          type: string
          format: date-time
        checkOutAt:
          type: string
          format: date-time
        status:
          type: string
          enum: &a769
            - confirmed
            - pending
            - cancelled
            - completed
        totalAmount:
          type: number
        currency:
          type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - kind
        - referenceId
        - checkInAt
        - checkOutAt
        - status
        - totalAmount
        - currency
        - createdAt
    BookingsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        kind:
          type: string
          enum: *a768
        referenceId:
          type: integer
        checkInAt:
          type: string
          format: date-time
        checkOutAt:
          type: string
          format: date-time
        status:
          type: string
          enum: *a769
        totalAmount:
          type: number
        currency:
          type: string
      required:
        - userId
        - kind
        - referenceId
        - checkInAt
        - checkOutAt
        - status
        - totalAmount
        - currency
    BookingsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        kind:
          type: string
          enum: *a768
        referenceId:
          type: integer
        checkInAt:
          type: string
          format: date-time
        checkOutAt:
          type: string
          format: date-time
        status:
          type: string
          enum: *a769
        totalAmount:
          type: number
        currency:
          type: string
    ItinerariesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        startDate:
          type: string
        endDate:
          type: string
        destinationSlugs:
          type: array
          items: &a770
            type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - title
        - slug
        - description
        - startDate
        - endDate
        - destinationSlugs
        - createdAt
        - updatedAt
    ItinerariesRecordInput:
      type: object
      properties:
        userId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        startDate:
          type: string
        endDate:
          type: string
        destinationSlugs:
          type: array
          items: *a770
      required:
        - userId
        - title
        - slug
        - description
        - startDate
        - endDate
        - destinationSlugs
    ItinerariesRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        startDate:
          type: string
        endDate:
          type: string
        destinationSlugs:
          type: array
          items: *a770
    FoodCategoriesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        parentId:
          type: integer
          nullable: true
        sortOrder:
          type: integer
      required:
        - id
        - name
        - slug
        - description
        - parentId
        - sortOrder
    FoodCategoriesRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        parentId:
          type: integer
          nullable: true
        sortOrder:
          type: integer
      required:
        - name
        - slug
        - description
        - parentId
        - sortOrder
    FoodCategoriesRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        parentId:
          type: integer
          nullable: true
        sortOrder:
          type: integer
    IngredientsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        foodCategoryId:
          type: integer
          nullable: true
        unit:
          type: string
          enum: &a771
            - g
            - kg
            - ml
            - l
            - cup
            - tbsp
            - tsp
            - oz
            - lb
            - piece
        defaultPricePerUnit:
          type: number
        currency:
          type: string
      required:
        - id
        - name
        - slug
        - foodCategoryId
        - unit
        - defaultPricePerUnit
        - currency
    IngredientsRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        foodCategoryId:
          type: integer
          nullable: true
        unit:
          type: string
          enum: *a771
        defaultPricePerUnit:
          type: number
        currency:
          type: string
      required:
        - name
        - slug
        - foodCategoryId
        - unit
        - defaultPricePerUnit
        - currency
    IngredientsRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        foodCategoryId:
          type: integer
          nullable: true
        unit:
          type: string
          enum: *a771
        defaultPricePerUnit:
          type: number
        currency:
          type: string
    MenusRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        restaurantId:
          type: integer
        name:
          type: string
        description:
          type: string
        isActive:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - restaurantId
        - name
        - description
        - isActive
        - createdAt
        - updatedAt
    MenusRecordInput:
      type: object
      properties:
        restaurantId:
          type: integer
        name:
          type: string
        description:
          type: string
        isActive:
          type: boolean
      required:
        - restaurantId
        - name
        - description
        - isActive
    MenusRecordPatch:
      type: object
      properties:
        restaurantId:
          type: integer
        name:
          type: string
        description:
          type: string
        isActive:
          type: boolean
    MenuItemsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        menuId:
          type: integer
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        price:
          type: number
        currency:
          type: string
        foodCategoryId:
          type: integer
          nullable: true
        spicyLevel:
          type: integer
        isVegetarian:
          type: boolean
        isVegan:
          type: boolean
        isGlutenFree:
          type: boolean
        imageUrl:
          type: string
          format: uri
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - menuId
        - name
        - slug
        - description
        - price
        - currency
        - foodCategoryId
        - spicyLevel
        - isVegetarian
        - isVegan
        - isGlutenFree
        - imageUrl
        - createdAt
    MenuItemsRecordInput:
      type: object
      properties:
        menuId:
          type: integer
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        price:
          type: number
        currency:
          type: string
        foodCategoryId:
          type: integer
          nullable: true
        spicyLevel:
          type: integer
        isVegetarian:
          type: boolean
        isVegan:
          type: boolean
        isGlutenFree:
          type: boolean
        imageUrl:
          type: string
          format: uri
      required:
        - menuId
        - name
        - slug
        - description
        - price
        - currency
        - foodCategoryId
        - spicyLevel
        - isVegetarian
        - isVegan
        - isGlutenFree
        - imageUrl
    MenuItemsRecordPatch:
      type: object
      properties:
        menuId:
          type: integer
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        price:
          type: number
        currency:
          type: string
        foodCategoryId:
          type: integer
          nullable: true
        spicyLevel:
          type: integer
        isVegetarian:
          type: boolean
        isVegan:
          type: boolean
        isGlutenFree:
          type: boolean
        imageUrl:
          type: string
          format: uri
    FoodOrdersRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        restaurantId:
          type: integer
        items:
          type: array
          items: &a772
            type: object
            properties:
              menuItemId:
                type: integer
              quantity:
                type: integer
              unitPrice:
                type: number
              lineTotal:
                type: number
            required:
              - menuItemId
              - quantity
              - unitPrice
              - lineTotal
        subtotal:
          type: number
        deliveryFee:
          type: number
        tip:
          type: number
        total:
          type: number
        currency:
          type: string
        status:
          type: string
          enum: &a773
            - placed
            - preparing
            - out_for_delivery
            - delivered
            - cancelled
        placedAt:
          type: string
          format: date-time
        deliveredAt:
          type: string
          format: date-time
          nullable: true
      required:
        - id
        - userId
        - restaurantId
        - items
        - subtotal
        - deliveryFee
        - tip
        - total
        - currency
        - status
        - placedAt
        - deliveredAt
    FoodOrdersRecordInput:
      type: object
      properties:
        userId:
          type: integer
        restaurantId:
          type: integer
        items:
          type: array
          items: *a772
        subtotal:
          type: number
        deliveryFee:
          type: number
        tip:
          type: number
        total:
          type: number
        currency:
          type: string
        status:
          type: string
          enum: *a773
        placedAt:
          type: string
          format: date-time
        deliveredAt:
          type: string
          format: date-time
          nullable: true
      required:
        - userId
        - restaurantId
        - items
        - subtotal
        - deliveryFee
        - tip
        - total
        - currency
        - status
        - placedAt
        - deliveredAt
    FoodOrdersRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        restaurantId:
          type: integer
        items:
          type: array
          items: *a772
        subtotal:
          type: number
        deliveryFee:
          type: number
        tip:
          type: number
        total:
          type: number
        currency:
          type: string
        status:
          type: string
          enum: *a773
        placedAt:
          type: string
          format: date-time
        deliveredAt:
          type: string
          format: date-time
          nullable: true
    OrgsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        industryId:
          type: integer
          nullable: true
        size:
          type: string
          enum: &a774
            - 1-10
            - 11-50
            - 51-200
            - 201-1000
            - 1000+
        foundedYear:
          type: integer
        websiteUrl:
          type: string
          format: uri
          nullable: true
        logoUrl:
          type: string
          format: uri
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - name
        - slug
        - description
        - industryId
        - size
        - foundedYear
        - websiteUrl
        - logoUrl
        - createdAt
        - updatedAt
    OrgsRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        industryId:
          type: integer
          nullable: true
        size:
          type: string
          enum: *a774
        foundedYear:
          type: integer
        websiteUrl:
          type: string
          format: uri
          nullable: true
        logoUrl:
          type: string
          format: uri
      required:
        - name
        - slug
        - description
        - industryId
        - size
        - foundedYear
        - websiteUrl
        - logoUrl
    OrgsRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        industryId:
          type: integer
          nullable: true
        size:
          type: string
          enum: *a774
        foundedYear:
          type: integer
        websiteUrl:
          type: string
          format: uri
          nullable: true
        logoUrl:
          type: string
          format: uri
    TeamsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        orgId:
          type: integer
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        memberCount:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - orgId
        - name
        - slug
        - description
        - memberCount
        - createdAt
        - updatedAt
    TeamsRecordInput:
      type: object
      properties:
        orgId:
          type: integer
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        memberCount:
          type: integer
      required:
        - orgId
        - name
        - slug
        - description
        - memberCount
    TeamsRecordPatch:
      type: object
      properties:
        orgId:
          type: integer
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        memberCount:
          type: integer
    ProjectsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        orgId:
          type: integer
        teamId:
          type: integer
          nullable: true
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        status:
          type: string
          enum: &a775
            - planning
            - active
            - on_hold
            - completed
            - archived
        startDate:
          type: string
        dueDate:
          type: string
          nullable: true
        ownerUserId:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - orgId
        - teamId
        - name
        - slug
        - description
        - status
        - startDate
        - dueDate
        - ownerUserId
        - createdAt
        - updatedAt
    ProjectsRecordInput:
      type: object
      properties:
        orgId:
          type: integer
        teamId:
          type: integer
          nullable: true
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        status:
          type: string
          enum: *a775
        startDate:
          type: string
        dueDate:
          type: string
          nullable: true
        ownerUserId:
          type: integer
      required:
        - orgId
        - teamId
        - name
        - slug
        - description
        - status
        - startDate
        - dueDate
        - ownerUserId
    ProjectsRecordPatch:
      type: object
      properties:
        orgId:
          type: integer
        teamId:
          type: integer
          nullable: true
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        status:
          type: string
          enum: *a775
        startDate:
          type: string
        dueDate:
          type: string
          nullable: true
        ownerUserId:
          type: integer
    TasksRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        projectId:
          type: integer
        assigneeUserId:
          type: integer
          nullable: true
        title:
          type: string
        description:
          type: string
        status:
          type: string
          enum: &a776
            - todo
            - in_progress
            - blocked
            - in_review
            - done
        priority:
          type: string
          enum: &a777
            - low
            - normal
            - high
            - urgent
        dueDate:
          type: string
          nullable: true
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - projectId
        - assigneeUserId
        - title
        - description
        - status
        - priority
        - dueDate
        - createdAt
        - updatedAt
    TasksRecordInput:
      type: object
      properties:
        projectId:
          type: integer
        assigneeUserId:
          type: integer
          nullable: true
        title:
          type: string
        description:
          type: string
        status:
          type: string
          enum: *a776
        priority:
          type: string
          enum: *a777
        dueDate:
          type: string
          nullable: true
      required:
        - projectId
        - assigneeUserId
        - title
        - description
        - status
        - priority
        - dueDate
    TasksRecordPatch:
      type: object
      properties:
        projectId:
          type: integer
        assigneeUserId:
          type: integer
          nullable: true
        title:
          type: string
        description:
          type: string
        status:
          type: string
          enum: *a776
        priority:
          type: string
          enum: *a777
        dueDate:
          type: string
          nullable: true
    TodoListsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        name:
          type: string
        isArchived:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - name
        - isArchived
        - createdAt
        - updatedAt
    TodoListsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        name:
          type: string
        isArchived:
          type: boolean
      required:
        - userId
        - name
        - isArchived
    TodoListsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        name:
          type: string
        isArchived:
          type: boolean
    TodosRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        todoListId:
          type: integer
        title:
          type: string
        isDone:
          type: boolean
        dueDate:
          type: string
          nullable: true
        completedAt:
          type: string
          format: date-time
          nullable: true
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - todoListId
        - title
        - isDone
        - dueDate
        - completedAt
        - createdAt
        - updatedAt
    TodosRecordInput:
      type: object
      properties:
        todoListId:
          type: integer
        title:
          type: string
        isDone:
          type: boolean
        dueDate:
          type: string
          nullable: true
        completedAt:
          type: string
          format: date-time
          nullable: true
      required:
        - todoListId
        - title
        - isDone
        - dueDate
        - completedAt
    TodosRecordPatch:
      type: object
      properties:
        todoListId:
          type: integer
        title:
          type: string
        isDone:
          type: boolean
        dueDate:
          type: string
          nullable: true
        completedAt:
          type: string
          format: date-time
          nullable: true
    DocumentsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        ownerUserId:
          type: integer
        orgId:
          type: integer
          nullable: true
        title:
          type: string
        slug:
          type: string
        content:
          type: string
        isPublic:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - ownerUserId
        - orgId
        - title
        - slug
        - content
        - isPublic
        - createdAt
        - updatedAt
    DocumentsRecordInput:
      type: object
      properties:
        ownerUserId:
          type: integer
        orgId:
          type: integer
          nullable: true
        title:
          type: string
        slug:
          type: string
        content:
          type: string
        isPublic:
          type: boolean
      required:
        - ownerUserId
        - orgId
        - title
        - slug
        - content
        - isPublic
    DocumentsRecordPatch:
      type: object
      properties:
        ownerUserId:
          type: integer
        orgId:
          type: integer
          nullable: true
        title:
          type: string
        slug:
          type: string
        content:
          type: string
        isPublic:
          type: boolean
    CalendarEventsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        ownerUserId:
          type: integer
        title:
          type: string
        description:
          type: string
        startAt:
          type: string
          format: date-time
        endAt:
          type: string
          format: date-time
        isAllDay:
          type: boolean
        location:
          type: string
          nullable: true
        attendeeUserIds:
          type: array
          items: &a778
            type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - ownerUserId
        - title
        - description
        - startAt
        - endAt
        - isAllDay
        - location
        - attendeeUserIds
        - createdAt
        - updatedAt
    CalendarEventsRecordInput:
      type: object
      properties:
        ownerUserId:
          type: integer
        title:
          type: string
        description:
          type: string
        startAt:
          type: string
          format: date-time
        endAt:
          type: string
          format: date-time
        isAllDay:
          type: boolean
        location:
          type: string
          nullable: true
        attendeeUserIds:
          type: array
          items: *a778
      required:
        - ownerUserId
        - title
        - description
        - startAt
        - endAt
        - isAllDay
        - location
        - attendeeUserIds
    CalendarEventsRecordPatch:
      type: object
      properties:
        ownerUserId:
          type: integer
        title:
          type: string
        description:
          type: string
        startAt:
          type: string
          format: date-time
        endAt:
          type: string
          format: date-time
        isAllDay:
          type: boolean
        location:
          type: string
          nullable: true
        attendeeUserIds:
          type: array
          items: *a778
    TimeEntriesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        taskId:
          type: integer
          nullable: true
        projectId:
          type: integer
          nullable: true
        description:
          type: string
        startedAt:
          type: string
          format: date-time
        endedAt:
          type: string
          format: date-time
        durationMinutes:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - taskId
        - projectId
        - description
        - startedAt
        - endedAt
        - durationMinutes
        - createdAt
    TimeEntriesRecordInput:
      type: object
      properties:
        userId:
          type: integer
        taskId:
          type: integer
          nullable: true
        projectId:
          type: integer
          nullable: true
        description:
          type: string
        startedAt:
          type: string
          format: date-time
        endedAt:
          type: string
          format: date-time
        durationMinutes:
          type: integer
      required:
        - userId
        - taskId
        - projectId
        - description
        - startedAt
        - endedAt
        - durationMinutes
    TimeEntriesRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        taskId:
          type: integer
          nullable: true
        projectId:
          type: integer
          nullable: true
        description:
          type: string
        startedAt:
          type: string
          format: date-time
        endedAt:
          type: string
          format: date-time
        durationMinutes:
          type: integer
    KanbanBoardsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        projectId:
          type: integer
        name:
          type: string
        slug:
          type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - projectId
        - name
        - slug
        - createdAt
        - updatedAt
    KanbanBoardsRecordInput:
      type: object
      properties:
        projectId:
          type: integer
        name:
          type: string
        slug:
          type: string
      required:
        - projectId
        - name
        - slug
    KanbanBoardsRecordPatch:
      type: object
      properties:
        projectId:
          type: integer
        name:
          type: string
        slug:
          type: string
    KanbanColumnsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        boardId:
          type: integer
        name:
          type: string
        sortOrder:
          type: integer
        color:
          type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - boardId
        - name
        - sortOrder
        - color
        - createdAt
    KanbanColumnsRecordInput:
      type: object
      properties:
        boardId:
          type: integer
        name:
          type: string
        sortOrder:
          type: integer
        color:
          type: string
      required:
        - boardId
        - name
        - sortOrder
        - color
    KanbanColumnsRecordPatch:
      type: object
      properties:
        boardId:
          type: integer
        name:
          type: string
        sortOrder:
          type: integer
        color:
          type: string
    FilesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        ownerUserId:
          type: integer
        name:
          type: string
        mimeType:
          type: string
        sizeBytes:
          type: integer
        url:
          type: string
          format: uri
        parentFolderId:
          type: integer
          nullable: true
        isFolder:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - ownerUserId
        - name
        - mimeType
        - sizeBytes
        - url
        - parentFolderId
        - isFolder
        - createdAt
        - updatedAt
    FilesRecordInput:
      type: object
      properties:
        ownerUserId:
          type: integer
        name:
          type: string
        mimeType:
          type: string
        sizeBytes:
          type: integer
        url:
          type: string
          format: uri
        parentFolderId:
          type: integer
          nullable: true
        isFolder:
          type: boolean
      required:
        - ownerUserId
        - name
        - mimeType
        - sizeBytes
        - url
        - parentFolderId
        - isFolder
    FilesRecordPatch:
      type: object
      properties:
        ownerUserId:
          type: integer
        name:
          type: string
        mimeType:
          type: string
        sizeBytes:
          type: integer
        url:
          type: string
          format: uri
        parentFolderId:
          type: integer
          nullable: true
        isFolder:
          type: boolean
    StocksRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        symbol:
          type: string
        name:
          type: string
        exchange:
          type: string
          enum: &a779
            - NYSE
            - NASDAQ
            - LSE
            - TSX
            - HKEX
        sector:
          type: string
        marketCap:
          type: number
        price:
          type: number
        priceChangePercent24h:
          type: number
        volume24h:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - symbol
        - name
        - exchange
        - sector
        - marketCap
        - price
        - priceChangePercent24h
        - volume24h
        - createdAt
    StocksRecordInput:
      type: object
      properties:
        symbol:
          type: string
        name:
          type: string
        exchange:
          type: string
          enum: *a779
        sector:
          type: string
        marketCap:
          type: number
        price:
          type: number
        priceChangePercent24h:
          type: number
        volume24h:
          type: integer
      required:
        - symbol
        - name
        - exchange
        - sector
        - marketCap
        - price
        - priceChangePercent24h
        - volume24h
    StocksRecordPatch:
      type: object
      properties:
        symbol:
          type: string
        name:
          type: string
        exchange:
          type: string
          enum: *a779
        sector:
          type: string
        marketCap:
          type: number
        price:
          type: number
        priceChangePercent24h:
          type: number
        volume24h:
          type: integer
    CryptoRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        symbol:
          type: string
        name:
          type: string
        slug:
          type: string
        marketCap:
          type: number
        price:
          type: number
        priceChangePercent24h:
          type: number
        volume24h:
          type: integer
        circulatingSupply:
          type: number
        totalSupply:
          type: number
          nullable: true
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - symbol
        - name
        - slug
        - marketCap
        - price
        - priceChangePercent24h
        - volume24h
        - circulatingSupply
        - totalSupply
        - createdAt
    CryptoRecordInput:
      type: object
      properties:
        symbol:
          type: string
        name:
          type: string
        slug:
          type: string
        marketCap:
          type: number
        price:
          type: number
        priceChangePercent24h:
          type: number
        volume24h:
          type: integer
        circulatingSupply:
          type: number
        totalSupply:
          type: number
          nullable: true
      required:
        - symbol
        - name
        - slug
        - marketCap
        - price
        - priceChangePercent24h
        - volume24h
        - circulatingSupply
        - totalSupply
    CryptoRecordPatch:
      type: object
      properties:
        symbol:
          type: string
        name:
          type: string
        slug:
          type: string
        marketCap:
          type: number
        price:
          type: number
        priceChangePercent24h:
          type: number
        volume24h:
          type: integer
        circulatingSupply:
          type: number
        totalSupply:
          type: number
          nullable: true
    StockHoldingsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        stockId:
          type: integer
        quantity:
          type: number
        costBasis:
          type: number
        purchasedAt:
          type: string
          format: date-time
      required:
        - id
        - userId
        - stockId
        - quantity
        - costBasis
        - purchasedAt
    StockHoldingsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        stockId:
          type: integer
        quantity:
          type: number
        costBasis:
          type: number
        purchasedAt:
          type: string
          format: date-time
      required:
        - userId
        - stockId
        - quantity
        - costBasis
        - purchasedAt
    StockHoldingsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        stockId:
          type: integer
        quantity:
          type: number
        costBasis:
          type: number
        purchasedAt:
          type: string
          format: date-time
    CryptoHoldingsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        cryptoId:
          type: integer
        quantity:
          type: number
        costBasis:
          type: number
        purchasedAt:
          type: string
          format: date-time
      required:
        - id
        - userId
        - cryptoId
        - quantity
        - costBasis
        - purchasedAt
    CryptoHoldingsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        cryptoId:
          type: integer
        quantity:
          type: number
        costBasis:
          type: number
        purchasedAt:
          type: string
          format: date-time
      required:
        - userId
        - cryptoId
        - quantity
        - costBasis
        - purchasedAt
    CryptoHoldingsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        cryptoId:
          type: integer
        quantity:
          type: number
        costBasis:
          type: number
        purchasedAt:
          type: string
          format: date-time
    AccountsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        name:
          type: string
        type:
          type: string
          enum: &a780
            - checking
            - savings
            - credit_card
            - investment
            - loan
            - other
        balance:
          type: number
        currency:
          type: string
        isActive:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - name
        - type
        - balance
        - currency
        - isActive
        - createdAt
    AccountsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        name:
          type: string
        type:
          type: string
          enum: *a780
        balance:
          type: number
        currency:
          type: string
        isActive:
          type: boolean
      required:
        - userId
        - name
        - type
        - balance
        - currency
        - isActive
    AccountsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        name:
          type: string
        type:
          type: string
          enum: *a780
        balance:
          type: number
        currency:
          type: string
        isActive:
          type: boolean
    TransactionsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        accountId:
          type: integer
        kind:
          type: string
          enum: &a781
            - deposit
            - withdrawal
            - transfer
            - payment
            - fee
            - interest
            - refund
        amount:
          type: number
        currency:
          type: string
        description:
          type: string
        status:
          type: string
          enum: &a782
            - pending
            - completed
            - failed
            - cancelled
        occurredAt:
          type: string
          format: date-time
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - accountId
        - kind
        - amount
        - currency
        - description
        - status
        - occurredAt
        - createdAt
    TransactionsRecordInput:
      type: object
      properties:
        accountId:
          type: integer
        kind:
          type: string
          enum: *a781
        amount:
          type: number
        currency:
          type: string
        description:
          type: string
        status:
          type: string
          enum: *a782
        occurredAt:
          type: string
          format: date-time
      required:
        - accountId
        - kind
        - amount
        - currency
        - description
        - status
        - occurredAt
    TransactionsRecordPatch:
      type: object
      properties:
        accountId:
          type: integer
        kind:
          type: string
          enum: *a781
        amount:
          type: number
        currency:
          type: string
        description:
          type: string
        status:
          type: string
          enum: *a782
        occurredAt:
          type: string
          format: date-time
    BudgetsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        name:
          type: string
        categoryId:
          type: integer
          nullable: true
        amount:
          type: number
        period:
          type: string
          enum: &a783
            - weekly
            - monthly
            - quarterly
            - yearly
        spent:
          type: number
        currency:
          type: string
        startsAt:
          type: string
        endsAt:
          type: string
          nullable: true
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - name
        - categoryId
        - amount
        - period
        - spent
        - currency
        - startsAt
        - endsAt
        - createdAt
    BudgetsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        name:
          type: string
        categoryId:
          type: integer
          nullable: true
        amount:
          type: number
        period:
          type: string
          enum: *a783
        spent:
          type: number
        currency:
          type: string
        startsAt:
          type: string
        endsAt:
          type: string
          nullable: true
      required:
        - userId
        - name
        - categoryId
        - amount
        - period
        - spent
        - currency
        - startsAt
        - endsAt
    BudgetsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        name:
          type: string
        categoryId:
          type: integer
          nullable: true
        amount:
          type: number
        period:
          type: string
          enum: *a783
        spent:
          type: number
        currency:
          type: string
        startsAt:
          type: string
        endsAt:
          type: string
          nullable: true
    InvoicesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        fromUserId:
          type: integer
        toUserId:
          type: integer
        invoiceNumber:
          type: string
        status:
          type: string
          enum: &a784
            - draft
            - sent
            - viewed
            - paid
            - overdue
            - cancelled
        issuedAt:
          type: string
          format: date-time
        dueAt:
          type: string
          format: date-time
        paidAt:
          type: string
          format: date-time
          nullable: true
        subtotal:
          type: number
        tax:
          type: number
        total:
          type: number
        currency:
          type: string
        lineItems:
          type: array
          items: &a785
            type: object
            properties:
              description:
                type: string
              quantity:
                type: integer
              unitPrice:
                type: number
              lineTotal:
                type: number
            required:
              - description
              - quantity
              - unitPrice
              - lineTotal
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - fromUserId
        - toUserId
        - invoiceNumber
        - status
        - issuedAt
        - dueAt
        - paidAt
        - subtotal
        - tax
        - total
        - currency
        - lineItems
        - createdAt
    InvoicesRecordInput:
      type: object
      properties:
        fromUserId:
          type: integer
        toUserId:
          type: integer
        invoiceNumber:
          type: string
        status:
          type: string
          enum: *a784
        issuedAt:
          type: string
          format: date-time
        dueAt:
          type: string
          format: date-time
        paidAt:
          type: string
          format: date-time
          nullable: true
        subtotal:
          type: number
        tax:
          type: number
        total:
          type: number
        currency:
          type: string
        lineItems:
          type: array
          items: *a785
      required:
        - fromUserId
        - toUserId
        - invoiceNumber
        - status
        - issuedAt
        - dueAt
        - paidAt
        - subtotal
        - tax
        - total
        - currency
        - lineItems
    InvoicesRecordPatch:
      type: object
      properties:
        fromUserId:
          type: integer
        toUserId:
          type: integer
        invoiceNumber:
          type: string
        status:
          type: string
          enum: *a784
        issuedAt:
          type: string
          format: date-time
        dueAt:
          type: string
          format: date-time
        paidAt:
          type: string
          format: date-time
          nullable: true
        subtotal:
          type: number
        tax:
          type: number
        total:
          type: number
        currency:
          type: string
        lineItems:
          type: array
          items: *a785
    ArticlesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        title:
          type: string
        slug:
          type: string
        excerpt:
          type: string
        content:
          type: string
        category:
          type: string
        tags:
          type: array
          items: &a786
            type: string
        readMinutes:
          type: integer
        imageUrl:
          type: string
          format: uri
        isPublished:
          type: boolean
        publishedAt:
          type: string
          format: date-time
          nullable: true
        viewCount:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - title
        - slug
        - excerpt
        - content
        - category
        - tags
        - readMinutes
        - imageUrl
        - isPublished
        - publishedAt
        - viewCount
        - createdAt
        - updatedAt
    ArticlesRecordInput:
      type: object
      properties:
        userId:
          type: integer
        title:
          type: string
        slug:
          type: string
        excerpt:
          type: string
        content:
          type: string
        category:
          type: string
        tags:
          type: array
          items: *a786
        readMinutes:
          type: integer
        imageUrl:
          type: string
          format: uri
        isPublished:
          type: boolean
        publishedAt:
          type: string
          format: date-time
          nullable: true
        viewCount:
          type: integer
      required:
        - userId
        - title
        - slug
        - excerpt
        - content
        - category
        - tags
        - readMinutes
        - imageUrl
        - isPublished
        - publishedAt
        - viewCount
    ArticlesRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        title:
          type: string
        slug:
          type: string
        excerpt:
          type: string
        content:
          type: string
        category:
          type: string
        tags:
          type: array
          items: *a786
        readMinutes:
          type: integer
        imageUrl:
          type: string
          format: uri
        isPublished:
          type: boolean
        publishedAt:
          type: string
          format: date-time
          nullable: true
        viewCount:
          type: integer
    VideosRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        videoUrl:
          type: string
          format: uri
        thumbnailUrl:
          type: string
          format: uri
        durationSeconds:
          type: integer
        viewCount:
          type: integer
        likeCount:
          type: integer
        isPublic:
          type: boolean
        publishedAt:
          type: string
          format: date-time
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - title
        - slug
        - description
        - videoUrl
        - thumbnailUrl
        - durationSeconds
        - viewCount
        - likeCount
        - isPublic
        - publishedAt
        - createdAt
    VideosRecordInput:
      type: object
      properties:
        userId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        videoUrl:
          type: string
          format: uri
        thumbnailUrl:
          type: string
          format: uri
        durationSeconds:
          type: integer
        viewCount:
          type: integer
        likeCount:
          type: integer
        isPublic:
          type: boolean
        publishedAt:
          type: string
          format: date-time
      required:
        - userId
        - title
        - slug
        - description
        - videoUrl
        - thumbnailUrl
        - durationSeconds
        - viewCount
        - likeCount
        - isPublic
        - publishedAt
    VideosRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        videoUrl:
          type: string
          format: uri
        thumbnailUrl:
          type: string
          format: uri
        durationSeconds:
          type: integer
        viewCount:
          type: integer
        likeCount:
          type: integer
        isPublic:
          type: boolean
        publishedAt:
          type: string
          format: date-time
    PodcastsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        hostName:
          type: string
        category:
          type: string
          enum: &a787
            - tech
            - comedy
            - news
            - business
            - education
            - science
            - health
            - sports
            - true-crime
            - arts
        language:
          type: string
        coverUrl:
          type: string
          format: uri
        episodeCount:
          type: integer
        isExplicit:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - name
        - slug
        - description
        - hostName
        - category
        - language
        - coverUrl
        - episodeCount
        - isExplicit
        - createdAt
        - updatedAt
    PodcastsRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        hostName:
          type: string
        category:
          type: string
          enum: *a787
        language:
          type: string
        coverUrl:
          type: string
          format: uri
        episodeCount:
          type: integer
        isExplicit:
          type: boolean
      required:
        - name
        - slug
        - description
        - hostName
        - category
        - language
        - coverUrl
        - episodeCount
        - isExplicit
    PodcastsRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        hostName:
          type: string
        category:
          type: string
          enum: *a787
        language:
          type: string
        coverUrl:
          type: string
          format: uri
        episodeCount:
          type: integer
        isExplicit:
          type: boolean
    PodcastEpisodesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        podcastId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        audioUrl:
          type: string
          format: uri
        durationSeconds:
          type: integer
        episodeNumber:
          type: integer
        seasonNumber:
          type: integer
          nullable: true
        publishedAt:
          type: string
          format: date-time
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - podcastId
        - title
        - slug
        - description
        - audioUrl
        - durationSeconds
        - episodeNumber
        - seasonNumber
        - publishedAt
        - createdAt
    PodcastEpisodesRecordInput:
      type: object
      properties:
        podcastId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        audioUrl:
          type: string
          format: uri
        durationSeconds:
          type: integer
        episodeNumber:
          type: integer
        seasonNumber:
          type: integer
          nullable: true
        publishedAt:
          type: string
          format: date-time
      required:
        - podcastId
        - title
        - slug
        - description
        - audioUrl
        - durationSeconds
        - episodeNumber
        - seasonNumber
        - publishedAt
    PodcastEpisodesRecordPatch:
      type: object
      properties:
        podcastId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        audioUrl:
          type: string
          format: uri
        durationSeconds:
          type: integer
        episodeNumber:
          type: integer
        seasonNumber:
          type: integer
          nullable: true
        publishedAt:
          type: string
          format: date-time
    BooksRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        title:
          type: string
        slug:
          type: string
        authors:
          type: array
          items: &a788
            type: string
        isbn:
          type: string
        publisher:
          type: string
        publishedYear:
          type: integer
        pages:
          type: integer
        language:
          type: string
        description:
          type: string
        coverUrl:
          type: string
          format: uri
        genres:
          type: array
          items: &a789
            type: string
        rating:
          type: number
        ratingCount:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - title
        - slug
        - authors
        - isbn
        - publisher
        - publishedYear
        - pages
        - language
        - description
        - coverUrl
        - genres
        - rating
        - ratingCount
        - createdAt
    BooksRecordInput:
      type: object
      properties:
        title:
          type: string
        slug:
          type: string
        authors:
          type: array
          items: *a788
        isbn:
          type: string
        publisher:
          type: string
        publishedYear:
          type: integer
        pages:
          type: integer
        language:
          type: string
        description:
          type: string
        coverUrl:
          type: string
          format: uri
        genres:
          type: array
          items: *a789
        rating:
          type: number
        ratingCount:
          type: integer
      required:
        - title
        - slug
        - authors
        - isbn
        - publisher
        - publishedYear
        - pages
        - language
        - description
        - coverUrl
        - genres
        - rating
        - ratingCount
    BooksRecordPatch:
      type: object
      properties:
        title:
          type: string
        slug:
          type: string
        authors:
          type: array
          items: *a788
        isbn:
          type: string
        publisher:
          type: string
        publishedYear:
          type: integer
        pages:
          type: integer
        language:
          type: string
        description:
          type: string
        coverUrl:
          type: string
          format: uri
        genres:
          type: array
          items: *a789
        rating:
          type: number
        ratingCount:
          type: integer
    BookFavsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        bookId:
          type: integer
        savedAt:
          type: string
          format: date-time
      required:
        - id
        - userId
        - bookId
        - savedAt
    BookFavsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        bookId:
          type: integer
        savedAt:
          type: string
          format: date-time
      required:
        - userId
        - bookId
        - savedAt
    BookFavsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        bookId:
          type: integer
        savedAt:
          type: string
          format: date-time
    MoviesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        title:
          type: string
        slug:
          type: string
        year:
          type: integer
        runtimeMinutes:
          type: integer
        director:
          type: string
        cast:
          type: array
          items: &a790
            type: string
        genres:
          type: array
          items: &a791
            type: string
        language:
          type: string
        plot:
          type: string
        posterUrl:
          type: string
          format: uri
        rating:
          type: number
        ratingCount:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - title
        - slug
        - year
        - runtimeMinutes
        - director
        - cast
        - genres
        - language
        - plot
        - posterUrl
        - rating
        - ratingCount
        - createdAt
    MoviesRecordInput:
      type: object
      properties:
        title:
          type: string
        slug:
          type: string
        year:
          type: integer
        runtimeMinutes:
          type: integer
        director:
          type: string
        cast:
          type: array
          items: *a790
        genres:
          type: array
          items: *a791
        language:
          type: string
        plot:
          type: string
        posterUrl:
          type: string
          format: uri
        rating:
          type: number
        ratingCount:
          type: integer
      required:
        - title
        - slug
        - year
        - runtimeMinutes
        - director
        - cast
        - genres
        - language
        - plot
        - posterUrl
        - rating
        - ratingCount
    MoviesRecordPatch:
      type: object
      properties:
        title:
          type: string
        slug:
          type: string
        year:
          type: integer
        runtimeMinutes:
          type: integer
        director:
          type: string
        cast:
          type: array
          items: *a790
        genres:
          type: array
          items: *a791
        language:
          type: string
        plot:
          type: string
        posterUrl:
          type: string
          format: uri
        rating:
          type: number
        ratingCount:
          type: integer
    TvShowsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        title:
          type: string
        slug:
          type: string
        firstAired:
          type: string
        lastAired:
          type: string
          nullable: true
        seasonCount:
          type: integer
        episodeCount:
          type: integer
        genres:
          type: array
          items: &a792
            type: string
        language:
          type: string
        posterUrl:
          type: string
          format: uri
        rating:
          type: number
        ratingCount:
          type: integer
        status:
          type: string
          enum: &a793
            - running
            - ended
            - cancelled
            - upcoming
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - title
        - slug
        - firstAired
        - lastAired
        - seasonCount
        - episodeCount
        - genres
        - language
        - posterUrl
        - rating
        - ratingCount
        - status
        - createdAt
    TvShowsRecordInput:
      type: object
      properties:
        title:
          type: string
        slug:
          type: string
        firstAired:
          type: string
        lastAired:
          type: string
          nullable: true
        seasonCount:
          type: integer
        episodeCount:
          type: integer
        genres:
          type: array
          items: *a792
        language:
          type: string
        posterUrl:
          type: string
          format: uri
        rating:
          type: number
        ratingCount:
          type: integer
        status:
          type: string
          enum: *a793
      required:
        - title
        - slug
        - firstAired
        - lastAired
        - seasonCount
        - episodeCount
        - genres
        - language
        - posterUrl
        - rating
        - ratingCount
        - status
    TvShowsRecordPatch:
      type: object
      properties:
        title:
          type: string
        slug:
          type: string
        firstAired:
          type: string
        lastAired:
          type: string
          nullable: true
        seasonCount:
          type: integer
        episodeCount:
          type: integer
        genres:
          type: array
          items: *a792
        language:
          type: string
        posterUrl:
          type: string
          format: uri
        rating:
          type: number
        ratingCount:
          type: integer
        status:
          type: string
          enum: *a793
    TvEpisodesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        tvShowId:
          type: integer
        title:
          type: string
        slug:
          type: string
        seasonNumber:
          type: integer
        episodeNumber:
          type: integer
        airDate:
          type: string
        runtimeMinutes:
          type: integer
        description:
          type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - tvShowId
        - title
        - slug
        - seasonNumber
        - episodeNumber
        - airDate
        - runtimeMinutes
        - description
        - createdAt
    TvEpisodesRecordInput:
      type: object
      properties:
        tvShowId:
          type: integer
        title:
          type: string
        slug:
          type: string
        seasonNumber:
          type: integer
        episodeNumber:
          type: integer
        airDate:
          type: string
        runtimeMinutes:
          type: integer
        description:
          type: string
      required:
        - tvShowId
        - title
        - slug
        - seasonNumber
        - episodeNumber
        - airDate
        - runtimeMinutes
        - description
    TvEpisodesRecordPatch:
      type: object
      properties:
        tvShowId:
          type: integer
        title:
          type: string
        slug:
          type: string
        seasonNumber:
          type: integer
        episodeNumber:
          type: integer
        airDate:
          type: string
        runtimeMinutes:
          type: integer
        description:
          type: string
    ArtistsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        bio:
          type: string
        genres:
          type: array
          items: &a794
            type: string
        imageUrl:
          type: string
          format: uri
        monthlyListeners:
          type: integer
        formedYear:
          type: integer
        isVerified:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - name
        - slug
        - bio
        - genres
        - imageUrl
        - monthlyListeners
        - formedYear
        - isVerified
        - createdAt
    ArtistsRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        bio:
          type: string
        genres:
          type: array
          items: *a794
        imageUrl:
          type: string
          format: uri
        monthlyListeners:
          type: integer
        formedYear:
          type: integer
        isVerified:
          type: boolean
      required:
        - name
        - slug
        - bio
        - genres
        - imageUrl
        - monthlyListeners
        - formedYear
        - isVerified
    ArtistsRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        bio:
          type: string
        genres:
          type: array
          items: *a794
        imageUrl:
          type: string
          format: uri
        monthlyListeners:
          type: integer
        formedYear:
          type: integer
        isVerified:
          type: boolean
    AlbumsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        artistId:
          type: integer
        title:
          type: string
        slug:
          type: string
        releaseDate:
          type: string
        trackCount:
          type: integer
        durationSeconds:
          type: integer
        genres:
          type: array
          items: &a795
            type: string
        coverUrl:
          type: string
          format: uri
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - artistId
        - title
        - slug
        - releaseDate
        - trackCount
        - durationSeconds
        - genres
        - coverUrl
        - createdAt
    AlbumsRecordInput:
      type: object
      properties:
        artistId:
          type: integer
        title:
          type: string
        slug:
          type: string
        releaseDate:
          type: string
        trackCount:
          type: integer
        durationSeconds:
          type: integer
        genres:
          type: array
          items: *a795
        coverUrl:
          type: string
          format: uri
      required:
        - artistId
        - title
        - slug
        - releaseDate
        - trackCount
        - durationSeconds
        - genres
        - coverUrl
    AlbumsRecordPatch:
      type: object
      properties:
        artistId:
          type: integer
        title:
          type: string
        slug:
          type: string
        releaseDate:
          type: string
        trackCount:
          type: integer
        durationSeconds:
          type: integer
        genres:
          type: array
          items: *a795
        coverUrl:
          type: string
          format: uri
    SongsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        albumId:
          type: integer
        artistId:
          type: integer
        title:
          type: string
        slug:
          type: string
        trackNumber:
          type: integer
        durationSeconds:
          type: integer
        isExplicit:
          type: boolean
        playCount:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - albumId
        - artistId
        - title
        - slug
        - trackNumber
        - durationSeconds
        - isExplicit
        - playCount
        - createdAt
    SongsRecordInput:
      type: object
      properties:
        albumId:
          type: integer
        artistId:
          type: integer
        title:
          type: string
        slug:
          type: string
        trackNumber:
          type: integer
        durationSeconds:
          type: integer
        isExplicit:
          type: boolean
        playCount:
          type: integer
      required:
        - albumId
        - artistId
        - title
        - slug
        - trackNumber
        - durationSeconds
        - isExplicit
        - playCount
    SongsRecordPatch:
      type: object
      properties:
        albumId:
          type: integer
        artistId:
          type: integer
        title:
          type: string
        slug:
          type: string
        trackNumber:
          type: integer
        durationSeconds:
          type: integer
        isExplicit:
          type: boolean
        playCount:
          type: integer
    PlaylistsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        songIds:
          type: array
          items: &a796
            type: integer
        isPublic:
          type: boolean
        coverUrl:
          type: string
          format: uri
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - name
        - slug
        - description
        - songIds
        - isPublic
        - coverUrl
        - createdAt
        - updatedAt
    PlaylistsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        songIds:
          type: array
          items: *a796
        isPublic:
          type: boolean
        coverUrl:
          type: string
          format: uri
      required:
        - userId
        - name
        - slug
        - description
        - songIds
        - isPublic
        - coverUrl
    PlaylistsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        songIds:
          type: array
          items: *a796
        isPublic:
          type: boolean
        coverUrl:
          type: string
          format: uri
    ExercisesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        muscleGroup:
          type: string
          enum: &a797
            - chest
            - back
            - legs
            - shoulders
            - arms
            - core
            - full_body
            - cardio
        equipment:
          type: array
          items: &a798
            type: string
        description:
          type: string
        instructions:
          type: array
          items: &a799
            type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - name
        - slug
        - muscleGroup
        - equipment
        - description
        - instructions
        - createdAt
    ExercisesRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        muscleGroup:
          type: string
          enum: *a797
        equipment:
          type: array
          items: *a798
        description:
          type: string
        instructions:
          type: array
          items: *a799
      required:
        - name
        - slug
        - muscleGroup
        - equipment
        - description
        - instructions
    ExercisesRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        muscleGroup:
          type: string
          enum: *a797
        equipment:
          type: array
          items: *a798
        description:
          type: string
        instructions:
          type: array
          items: *a799
    WorkoutsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        kind:
          type: string
          enum: &a800
            - cardio
            - strength
            - flexibility
            - sports
            - mixed
        name:
          type: string
        durationMinutes:
          type: integer
        caloriesBurned:
          type: integer
        intensity:
          type: string
          enum: &a801
            - low
            - medium
            - high
            - very_high
        notes:
          type: string
        performedAt:
          type: string
          format: date-time
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - kind
        - name
        - durationMinutes
        - caloriesBurned
        - intensity
        - notes
        - performedAt
        - createdAt
    WorkoutsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        kind:
          type: string
          enum: *a800
        name:
          type: string
        durationMinutes:
          type: integer
        caloriesBurned:
          type: integer
        intensity:
          type: string
          enum: *a801
        notes:
          type: string
        performedAt:
          type: string
          format: date-time
      required:
        - userId
        - kind
        - name
        - durationMinutes
        - caloriesBurned
        - intensity
        - notes
        - performedAt
    WorkoutsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        kind:
          type: string
          enum: *a800
        name:
          type: string
        durationMinutes:
          type: integer
        caloriesBurned:
          type: integer
        intensity:
          type: string
          enum: *a801
        notes:
          type: string
        performedAt:
          type: string
          format: date-time
    MealsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        name:
          type: string
        kind:
          type: string
          enum: &a802
            - breakfast
            - lunch
            - dinner
            - snack
        calories:
          type: integer
        proteinGrams:
          type: number
        carbsGrams:
          type: number
        fatGrams:
          type: number
        eatenAt:
          type: string
          format: date-time
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - name
        - kind
        - calories
        - proteinGrams
        - carbsGrams
        - fatGrams
        - eatenAt
        - createdAt
    MealsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        name:
          type: string
        kind:
          type: string
          enum: *a802
        calories:
          type: integer
        proteinGrams:
          type: number
        carbsGrams:
          type: number
        fatGrams:
          type: number
        eatenAt:
          type: string
          format: date-time
      required:
        - userId
        - name
        - kind
        - calories
        - proteinGrams
        - carbsGrams
        - fatGrams
        - eatenAt
    MealsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        name:
          type: string
        kind:
          type: string
          enum: *a802
        calories:
          type: integer
        proteinGrams:
          type: number
        carbsGrams:
          type: number
        fatGrams:
          type: number
        eatenAt:
          type: string
          format: date-time
    NutritionLogsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        date:
          type: string
        totalCalories:
          type: integer
        totalProteinGrams:
          type: number
        totalCarbsGrams:
          type: number
        totalFatGrams:
          type: number
        waterMl:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - date
        - totalCalories
        - totalProteinGrams
        - totalCarbsGrams
        - totalFatGrams
        - waterMl
        - createdAt
    NutritionLogsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        date:
          type: string
        totalCalories:
          type: integer
        totalProteinGrams:
          type: number
        totalCarbsGrams:
          type: number
        totalFatGrams:
          type: number
        waterMl:
          type: integer
      required:
        - userId
        - date
        - totalCalories
        - totalProteinGrams
        - totalCarbsGrams
        - totalFatGrams
        - waterMl
    NutritionLogsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        date:
          type: string
        totalCalories:
          type: integer
        totalProteinGrams:
          type: number
        totalCarbsGrams:
          type: number
        totalFatGrams:
          type: number
        waterMl:
          type: integer
    GoalsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        name:
          type: string
        category:
          type: string
          enum: &a803
            - fitness
            - nutrition
            - sleep
            - weight
            - habit
            - other
        targetValue:
          type: number
        currentValue:
          type: number
        unit:
          type: string
        deadline:
          type: string
          nullable: true
        isCompleted:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - name
        - category
        - targetValue
        - currentValue
        - unit
        - deadline
        - isCompleted
        - createdAt
    GoalsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        name:
          type: string
        category:
          type: string
          enum: *a803
        targetValue:
          type: number
        currentValue:
          type: number
        unit:
          type: string
        deadline:
          type: string
          nullable: true
        isCompleted:
          type: boolean
      required:
        - userId
        - name
        - category
        - targetValue
        - currentValue
        - unit
        - deadline
        - isCompleted
    GoalsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        name:
          type: string
        category:
          type: string
          enum: *a803
        targetValue:
          type: number
        currentValue:
          type: number
        unit:
          type: string
        deadline:
          type: string
          nullable: true
        isCompleted:
          type: boolean
    MeasurementsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        kind:
          type: string
          enum: &a804
            - weight
            - height
            - body_fat_pct
            - waist
            - chest
            - hip
            - arm
            - thigh
            - resting_hr
        value:
          type: number
        unit:
          type: string
        measuredAt:
          type: string
          format: date-time
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - kind
        - value
        - unit
        - measuredAt
        - createdAt
    MeasurementsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        kind:
          type: string
          enum: *a804
        value:
          type: number
        unit:
          type: string
        measuredAt:
          type: string
          format: date-time
      required:
        - userId
        - kind
        - value
        - unit
        - measuredAt
    MeasurementsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        kind:
          type: string
          enum: *a804
        value:
          type: number
        unit:
          type: string
        measuredAt:
          type: string
          format: date-time
    SleepEntriesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        date:
          type: string
        sleepAt:
          type: string
          format: date-time
        wakeAt:
          type: string
          format: date-time
        durationMinutes:
          type: integer
        quality:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - date
        - sleepAt
        - wakeAt
        - durationMinutes
        - quality
        - createdAt
    SleepEntriesRecordInput:
      type: object
      properties:
        userId:
          type: integer
        date:
          type: string
        sleepAt:
          type: string
          format: date-time
        wakeAt:
          type: string
          format: date-time
        durationMinutes:
          type: integer
        quality:
          type: integer
      required:
        - userId
        - date
        - sleepAt
        - wakeAt
        - durationMinutes
        - quality
    SleepEntriesRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        date:
          type: string
        sleepAt:
          type: string
          format: date-time
        wakeAt:
          type: string
          format: date-time
        durationMinutes:
          type: integer
        quality:
          type: integer
    CoursesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        instructorUserId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        category:
          type: string
          enum: &a805
            - programming
            - design
            - business
            - marketing
            - data
            - music
            - photography
            - writing
        difficulty:
          type: string
          enum: &a806
            - beginner
            - intermediate
            - advanced
        language:
          type: string
        durationHours:
          type: number
        priceFrom:
          type: number
        currency:
          type: string
        thumbnailUrl:
          type: string
          format: uri
        rating:
          type: number
        ratingCount:
          type: integer
        enrollmentCount:
          type: integer
        isPublished:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - instructorUserId
        - title
        - slug
        - description
        - category
        - difficulty
        - language
        - durationHours
        - priceFrom
        - currency
        - thumbnailUrl
        - rating
        - ratingCount
        - enrollmentCount
        - isPublished
        - createdAt
        - updatedAt
    CoursesRecordInput:
      type: object
      properties:
        instructorUserId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        category:
          type: string
          enum: *a805
        difficulty:
          type: string
          enum: *a806
        language:
          type: string
        durationHours:
          type: number
        priceFrom:
          type: number
        currency:
          type: string
        thumbnailUrl:
          type: string
          format: uri
        rating:
          type: number
        ratingCount:
          type: integer
        enrollmentCount:
          type: integer
        isPublished:
          type: boolean
      required:
        - instructorUserId
        - title
        - slug
        - description
        - category
        - difficulty
        - language
        - durationHours
        - priceFrom
        - currency
        - thumbnailUrl
        - rating
        - ratingCount
        - enrollmentCount
        - isPublished
    CoursesRecordPatch:
      type: object
      properties:
        instructorUserId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        category:
          type: string
          enum: *a805
        difficulty:
          type: string
          enum: *a806
        language:
          type: string
        durationHours:
          type: number
        priceFrom:
          type: number
        currency:
          type: string
        thumbnailUrl:
          type: string
          format: uri
        rating:
          type: number
        ratingCount:
          type: integer
        enrollmentCount:
          type: integer
        isPublished:
          type: boolean
    LessonsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        courseId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        content:
          type: string
        sortOrder:
          type: integer
        durationMinutes:
          type: integer
        videoUrl:
          type: string
          format: uri
          nullable: true
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - courseId
        - title
        - slug
        - description
        - content
        - sortOrder
        - durationMinutes
        - videoUrl
        - createdAt
        - updatedAt
    LessonsRecordInput:
      type: object
      properties:
        courseId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        content:
          type: string
        sortOrder:
          type: integer
        durationMinutes:
          type: integer
        videoUrl:
          type: string
          format: uri
          nullable: true
      required:
        - courseId
        - title
        - slug
        - description
        - content
        - sortOrder
        - durationMinutes
        - videoUrl
    LessonsRecordPatch:
      type: object
      properties:
        courseId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        content:
          type: string
        sortOrder:
          type: integer
        durationMinutes:
          type: integer
        videoUrl:
          type: string
          format: uri
          nullable: true
    EnrollmentsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        courseId:
          type: integer
        enrolledAt:
          type: string
          format: date-time
        completedAt:
          type: string
          format: date-time
          nullable: true
        progressPercent:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - courseId
        - enrolledAt
        - completedAt
        - progressPercent
        - createdAt
    EnrollmentsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        courseId:
          type: integer
        enrolledAt:
          type: string
          format: date-time
        completedAt:
          type: string
          format: date-time
          nullable: true
        progressPercent:
          type: integer
      required:
        - userId
        - courseId
        - enrolledAt
        - completedAt
        - progressPercent
    EnrollmentsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        courseId:
          type: integer
        enrolledAt:
          type: string
          format: date-time
        completedAt:
          type: string
          format: date-time
          nullable: true
        progressPercent:
          type: integer
    QuizzesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        courseId:
          type: integer
        lessonId:
          type: integer
          nullable: true
        title:
          type: string
        description:
          type: string
        passingScorePercent:
          type: integer
        timeLimitMinutes:
          type: integer
          nullable: true
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - courseId
        - lessonId
        - title
        - description
        - passingScorePercent
        - timeLimitMinutes
        - createdAt
        - updatedAt
    QuizzesRecordInput:
      type: object
      properties:
        courseId:
          type: integer
        lessonId:
          type: integer
          nullable: true
        title:
          type: string
        description:
          type: string
        passingScorePercent:
          type: integer
        timeLimitMinutes:
          type: integer
          nullable: true
      required:
        - courseId
        - lessonId
        - title
        - description
        - passingScorePercent
        - timeLimitMinutes
    QuizzesRecordPatch:
      type: object
      properties:
        courseId:
          type: integer
        lessonId:
          type: integer
          nullable: true
        title:
          type: string
        description:
          type: string
        passingScorePercent:
          type: integer
        timeLimitMinutes:
          type: integer
          nullable: true
    QuizQuestionsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        quizId:
          type: integer
        text:
          type: string
        kind:
          type: string
          enum: &a807
            - multiple_choice
            - true_false
            - short_answer
        options:
          type: array
          items: &a808
            type: string
        correctAnswer:
          type: string
        sortOrder:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - quizId
        - text
        - kind
        - options
        - correctAnswer
        - sortOrder
        - createdAt
    QuizQuestionsRecordInput:
      type: object
      properties:
        quizId:
          type: integer
        text:
          type: string
        kind:
          type: string
          enum: *a807
        options:
          type: array
          items: *a808
        correctAnswer:
          type: string
        sortOrder:
          type: integer
      required:
        - quizId
        - text
        - kind
        - options
        - correctAnswer
        - sortOrder
    QuizQuestionsRecordPatch:
      type: object
      properties:
        quizId:
          type: integer
        text:
          type: string
        kind:
          type: string
          enum: *a807
        options:
          type: array
          items: *a808
        correctAnswer:
          type: string
        sortOrder:
          type: integer
    FlashcardsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        deckName:
          type: string
        front:
          type: string
        back:
          type: string
        difficulty:
          type: string
          enum: &a809
            - easy
            - medium
            - hard
        lastReviewedAt:
          type: string
          format: date-time
          nullable: true
        nextReviewAt:
          type: string
          format: date-time
          nullable: true
        reviewCount:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - deckName
        - front
        - back
        - difficulty
        - lastReviewedAt
        - nextReviewAt
        - reviewCount
        - createdAt
    FlashcardsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        deckName:
          type: string
        front:
          type: string
        back:
          type: string
        difficulty:
          type: string
          enum: *a809
        lastReviewedAt:
          type: string
          format: date-time
          nullable: true
        nextReviewAt:
          type: string
          format: date-time
          nullable: true
        reviewCount:
          type: integer
      required:
        - userId
        - deckName
        - front
        - back
        - difficulty
        - lastReviewedAt
        - nextReviewAt
        - reviewCount
    FlashcardsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        deckName:
          type: string
        front:
          type: string
        back:
          type: string
        difficulty:
          type: string
          enum: *a809
        lastReviewedAt:
          type: string
          format: date-time
          nullable: true
        nextReviewAt:
          type: string
          format: date-time
          nullable: true
        reviewCount:
          type: integer
    ProgressRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        courseId:
          type: integer
        lessonId:
          type: integer
          nullable: true
        state:
          type: string
          enum: &a810
            - not_started
            - in_progress
            - completed
        completedAt:
          type: string
          format: date-time
          nullable: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - courseId
        - lessonId
        - state
        - completedAt
        - updatedAt
        - createdAt
    ProgressRecordInput:
      type: object
      properties:
        userId:
          type: integer
        courseId:
          type: integer
        lessonId:
          type: integer
          nullable: true
        state:
          type: string
          enum: *a810
        completedAt:
          type: string
          format: date-time
          nullable: true
      required:
        - userId
        - courseId
        - lessonId
        - state
        - completedAt
    ProgressRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        courseId:
          type: integer
        lessonId:
          type: integer
          nullable: true
        state:
          type: string
          enum: *a810
        completedAt:
          type: string
          format: date-time
          nullable: true
    CompaniesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        industryId:
          type: integer
          nullable: true
        headquartersCountryAlpha2:
          type: string
        employeeCount:
          type: integer
        foundedYear:
          type: integer
        websiteUrl:
          type: string
          format: uri
          nullable: true
        logoUrl:
          type: string
          format: uri
        isHiring:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - name
        - slug
        - description
        - industryId
        - headquartersCountryAlpha2
        - employeeCount
        - foundedYear
        - websiteUrl
        - logoUrl
        - isHiring
        - createdAt
    CompaniesRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        industryId:
          type: integer
          nullable: true
        headquartersCountryAlpha2:
          type: string
        employeeCount:
          type: integer
        foundedYear:
          type: integer
        websiteUrl:
          type: string
          format: uri
          nullable: true
        logoUrl:
          type: string
          format: uri
        isHiring:
          type: boolean
      required:
        - name
        - slug
        - description
        - industryId
        - headquartersCountryAlpha2
        - employeeCount
        - foundedYear
        - websiteUrl
        - logoUrl
        - isHiring
    CompaniesRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        description:
          type: string
        industryId:
          type: integer
          nullable: true
        headquartersCountryAlpha2:
          type: string
        employeeCount:
          type: integer
        foundedYear:
          type: integer
        websiteUrl:
          type: string
          format: uri
          nullable: true
        logoUrl:
          type: string
          format: uri
        isHiring:
          type: boolean
    JobsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        companyId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        employmentType:
          type: string
          enum: &a811
            - full_time
            - part_time
            - contract
            - internship
            - temporary
        locationType:
          type: string
          enum: &a812
            - remote
            - hybrid
            - onsite
        location:
          type: string
        salaryMin:
          type: number
        salaryMax:
          type: number
        currency:
          type: string
        isPublished:
          type: boolean
        postedAt:
          type: string
          format: date-time
        expiresAt:
          type: string
          format: date-time
          nullable: true
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - companyId
        - title
        - slug
        - description
        - employmentType
        - locationType
        - location
        - salaryMin
        - salaryMax
        - currency
        - isPublished
        - postedAt
        - expiresAt
        - createdAt
        - updatedAt
    JobsRecordInput:
      type: object
      properties:
        companyId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        employmentType:
          type: string
          enum: *a811
        locationType:
          type: string
          enum: *a812
        location:
          type: string
        salaryMin:
          type: number
        salaryMax:
          type: number
        currency:
          type: string
        isPublished:
          type: boolean
        postedAt:
          type: string
          format: date-time
        expiresAt:
          type: string
          format: date-time
          nullable: true
      required:
        - companyId
        - title
        - slug
        - description
        - employmentType
        - locationType
        - location
        - salaryMin
        - salaryMax
        - currency
        - isPublished
        - postedAt
        - expiresAt
    JobsRecordPatch:
      type: object
      properties:
        companyId:
          type: integer
        title:
          type: string
        slug:
          type: string
        description:
          type: string
        employmentType:
          type: string
          enum: *a811
        locationType:
          type: string
          enum: *a812
        location:
          type: string
        salaryMin:
          type: number
        salaryMax:
          type: number
        currency:
          type: string
        isPublished:
          type: boolean
        postedAt:
          type: string
          format: date-time
        expiresAt:
          type: string
          format: date-time
          nullable: true
    ApplicationsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        jobId:
          type: integer
        status:
          type: string
          enum: &a813
            - applied
            - screening
            - interview
            - offer
            - accepted
            - rejected
            - withdrawn
        coverLetter:
          type: string
        appliedAt:
          type: string
          format: date-time
        lastUpdatedAt:
          type: string
          format: date-time
      required:
        - id
        - userId
        - jobId
        - status
        - coverLetter
        - appliedAt
        - lastUpdatedAt
    ApplicationsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        jobId:
          type: integer
        status:
          type: string
          enum: *a813
        coverLetter:
          type: string
        appliedAt:
          type: string
          format: date-time
        lastUpdatedAt:
          type: string
          format: date-time
      required:
        - userId
        - jobId
        - status
        - coverLetter
        - appliedAt
        - lastUpdatedAt
    ApplicationsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        jobId:
          type: integer
        status:
          type: string
          enum: *a813
        coverLetter:
          type: string
        appliedAt:
          type: string
          format: date-time
        lastUpdatedAt:
          type: string
          format: date-time
    ResumesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        title:
          type: string
        summary:
          type: string
        isDefault:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - title
        - summary
        - isDefault
        - createdAt
        - updatedAt
    ResumesRecordInput:
      type: object
      properties:
        userId:
          type: integer
        title:
          type: string
        summary:
          type: string
        isDefault:
          type: boolean
      required:
        - userId
        - title
        - summary
        - isDefault
    ResumesRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        title:
          type: string
        summary:
          type: string
        isDefault:
          type: boolean
    AgentsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        brokerage:
          type: string
        licenseNumber:
          type: string
        specialty:
          type: string
          enum: &a814
            - residential
            - commercial
            - luxury
            - rental
            - land
        yearsExperience:
          type: integer
        rating:
          type: number
        ratingCount:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - brokerage
        - licenseNumber
        - specialty
        - yearsExperience
        - rating
        - ratingCount
        - createdAt
    AgentsRecordInput:
      type: object
      properties:
        userId:
          type: integer
        brokerage:
          type: string
        licenseNumber:
          type: string
        specialty:
          type: string
          enum: *a814
        yearsExperience:
          type: integer
        rating:
          type: number
        ratingCount:
          type: integer
      required:
        - userId
        - brokerage
        - licenseNumber
        - specialty
        - yearsExperience
        - rating
        - ratingCount
    AgentsRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        brokerage:
          type: string
        licenseNumber:
          type: string
        specialty:
          type: string
          enum: *a814
        yearsExperience:
          type: integer
        rating:
          type: number
        ratingCount:
          type: integer
    ListingsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        agentUserId:
          type: integer
        propertyType:
          type: string
          enum: &a815
            - house
            - condo
            - townhouse
            - apartment
            - land
            - commercial
        title:
          type: string
        description:
          type: string
        price:
          type: number
        currency:
          type: string
        bedrooms:
          type: integer
        bathrooms:
          type: number
        squareFeet:
          type: integer
        address:
          type: string
        city:
          type: string
        region:
          type: string
        countryAlpha2:
          type: string
        latitude:
          type: number
        longitude:
          type: number
        status:
          type: string
          enum: &a816
            - active
            - pending
            - sold
            - withdrawn
            - off_market
        listedAt:
          type: string
          format: date-time
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - agentUserId
        - propertyType
        - title
        - description
        - price
        - currency
        - bedrooms
        - bathrooms
        - squareFeet
        - address
        - city
        - region
        - countryAlpha2
        - latitude
        - longitude
        - status
        - listedAt
        - createdAt
        - updatedAt
    ListingsRecordInput:
      type: object
      properties:
        agentUserId:
          type: integer
        propertyType:
          type: string
          enum: *a815
        title:
          type: string
        description:
          type: string
        price:
          type: number
        currency:
          type: string
        bedrooms:
          type: integer
        bathrooms:
          type: number
        squareFeet:
          type: integer
        address:
          type: string
        city:
          type: string
        region:
          type: string
        countryAlpha2:
          type: string
        latitude:
          type: number
        longitude:
          type: number
        status:
          type: string
          enum: *a816
        listedAt:
          type: string
          format: date-time
      required:
        - agentUserId
        - propertyType
        - title
        - description
        - price
        - currency
        - bedrooms
        - bathrooms
        - squareFeet
        - address
        - city
        - region
        - countryAlpha2
        - latitude
        - longitude
        - status
        - listedAt
    ListingsRecordPatch:
      type: object
      properties:
        agentUserId:
          type: integer
        propertyType:
          type: string
          enum: *a815
        title:
          type: string
        description:
          type: string
        price:
          type: number
        currency:
          type: string
        bedrooms:
          type: integer
        bathrooms:
          type: number
        squareFeet:
          type: integer
        address:
          type: string
        city:
          type: string
        region:
          type: string
        countryAlpha2:
          type: string
        latitude:
          type: number
        longitude:
          type: number
        status:
          type: string
          enum: *a816
        listedAt:
          type: string
          format: date-time
    ShowingsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        listingId:
          type: integer
        prospectUserId:
          type: integer
        scheduledAt:
          type: string
          format: date-time
        status:
          type: string
          enum: &a817
            - scheduled
            - completed
            - cancelled
            - no_show
        notes:
          type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - listingId
        - prospectUserId
        - scheduledAt
        - status
        - notes
        - createdAt
    ShowingsRecordInput:
      type: object
      properties:
        listingId:
          type: integer
        prospectUserId:
          type: integer
        scheduledAt:
          type: string
          format: date-time
        status:
          type: string
          enum: *a817
        notes:
          type: string
      required:
        - listingId
        - prospectUserId
        - scheduledAt
        - status
        - notes
    ShowingsRecordPatch:
      type: object
      properties:
        listingId:
          type: integer
        prospectUserId:
          type: integer
        scheduledAt:
          type: string
          format: date-time
        status:
          type: string
          enum: *a817
        notes:
          type: string
    PetBreedsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        species:
          type: string
          enum: &a818
            - dog
            - cat
            - bird
            - fish
            - reptile
            - rabbit
            - other
        origin:
          type: string
        temperament:
          type: array
          items: &a819
            type: string
        lifeExpectancyYears:
          type: integer
        isHypoallergenic:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - name
        - slug
        - species
        - origin
        - temperament
        - lifeExpectancyYears
        - isHypoallergenic
        - createdAt
    PetBreedsRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        species:
          type: string
          enum: *a818
        origin:
          type: string
        temperament:
          type: array
          items: *a819
        lifeExpectancyYears:
          type: integer
        isHypoallergenic:
          type: boolean
      required:
        - name
        - slug
        - species
        - origin
        - temperament
        - lifeExpectancyYears
        - isHypoallergenic
    PetBreedsRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        species:
          type: string
          enum: *a818
        origin:
          type: string
        temperament:
          type: array
          items: *a819
        lifeExpectancyYears:
          type: integer
        isHypoallergenic:
          type: boolean
    PetsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        ownerUserId:
          type: integer
        name:
          type: string
        species:
          type: string
          enum: &a820
            - dog
            - cat
            - bird
            - fish
            - reptile
            - rabbit
            - other
        breedId:
          type: integer
          nullable: true
        gender:
          type: string
          enum: &a821
            - male
            - female
            - unknown
        birthDate:
          type: string
          nullable: true
        weightKg:
          type: number
        color:
          type: string
        imageUrl:
          type: string
          format: uri
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - ownerUserId
        - name
        - species
        - breedId
        - gender
        - birthDate
        - weightKg
        - color
        - imageUrl
        - createdAt
        - updatedAt
    PetsRecordInput:
      type: object
      properties:
        ownerUserId:
          type: integer
        name:
          type: string
        species:
          type: string
          enum: *a820
        breedId:
          type: integer
          nullable: true
        gender:
          type: string
          enum: *a821
        birthDate:
          type: string
          nullable: true
        weightKg:
          type: number
        color:
          type: string
        imageUrl:
          type: string
          format: uri
      required:
        - ownerUserId
        - name
        - species
        - breedId
        - gender
        - birthDate
        - weightKg
        - color
        - imageUrl
    PetsRecordPatch:
      type: object
      properties:
        ownerUserId:
          type: integer
        name:
          type: string
        species:
          type: string
          enum: *a820
        breedId:
          type: integer
          nullable: true
        gender:
          type: string
          enum: *a821
        birthDate:
          type: string
          nullable: true
        weightKg:
          type: number
        color:
          type: string
        imageUrl:
          type: string
          format: uri
    CarsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        make:
          type: string
        model:
          type: string
        year:
          type: integer
        trim:
          type: string
          nullable: true
        vin:
          type: string
        color:
          type: string
        mileage:
          type: integer
        price:
          type: number
        currency:
          type: string
        transmission:
          type: string
          enum: &a822
            - automatic
            - manual
            - cvt
        fuelType:
          type: string
          enum: &a823
            - gas
            - diesel
            - electric
            - hybrid
            - plugin_hybrid
        bodyType:
          type: string
          enum: &a824
            - sedan
            - suv
            - truck
            - coupe
            - hatchback
            - van
            - convertible
            - wagon
        listingType:
          type: string
          enum: &a825
            - sale
            - rent
        city:
          type: string
        region:
          type: string
        countryAlpha2:
          type: string
        sellerUserId:
          type: integer
        isSold:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - make
        - model
        - year
        - trim
        - vin
        - color
        - mileage
        - price
        - currency
        - transmission
        - fuelType
        - bodyType
        - listingType
        - city
        - region
        - countryAlpha2
        - sellerUserId
        - isSold
        - createdAt
        - updatedAt
    CarsRecordInput:
      type: object
      properties:
        make:
          type: string
        model:
          type: string
        year:
          type: integer
        trim:
          type: string
          nullable: true
        vin:
          type: string
        color:
          type: string
        mileage:
          type: integer
        price:
          type: number
        currency:
          type: string
        transmission:
          type: string
          enum: *a822
        fuelType:
          type: string
          enum: *a823
        bodyType:
          type: string
          enum: *a824
        listingType:
          type: string
          enum: *a825
        city:
          type: string
        region:
          type: string
        countryAlpha2:
          type: string
        sellerUserId:
          type: integer
        isSold:
          type: boolean
      required:
        - make
        - model
        - year
        - trim
        - vin
        - color
        - mileage
        - price
        - currency
        - transmission
        - fuelType
        - bodyType
        - listingType
        - city
        - region
        - countryAlpha2
        - sellerUserId
        - isSold
    CarsRecordPatch:
      type: object
      properties:
        make:
          type: string
        model:
          type: string
        year:
          type: integer
        trim:
          type: string
          nullable: true
        vin:
          type: string
        color:
          type: string
        mileage:
          type: integer
        price:
          type: number
        currency:
          type: string
        transmission:
          type: string
          enum: *a822
        fuelType:
          type: string
          enum: *a823
        bodyType:
          type: string
          enum: *a824
        listingType:
          type: string
          enum: *a825
        city:
          type: string
        region:
          type: string
        countryAlpha2:
          type: string
        sellerUserId:
          type: integer
        isSold:
          type: boolean
    CarsSavedRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        carId:
          type: integer
        savedAt:
          type: string
          format: date-time
      required:
        - id
        - userId
        - carId
        - savedAt
    CarsSavedRecordInput:
      type: object
      properties:
        userId:
          type: integer
        carId:
          type: integer
        savedAt:
          type: string
          format: date-time
      required:
        - userId
        - carId
        - savedAt
    CarsSavedRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        carId:
          type: integer
        savedAt:
          type: string
          format: date-time
    SneakersRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        brand:
          type: string
        model:
          type: string
        colorway:
          type: string
        style:
          type: string
        releaseDate:
          type: string
        retailPrice:
          type: number
        currency:
          type: string
        imageUrl:
          type: string
          format: uri
        sizesAvailable:
          type: array
          items: &a826
            type: string
        gender:
          type: string
          enum: &a827
            - men
            - women
            - unisex
            - youth
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - brand
        - model
        - colorway
        - style
        - releaseDate
        - retailPrice
        - currency
        - imageUrl
        - sizesAvailable
        - gender
        - createdAt
    SneakersRecordInput:
      type: object
      properties:
        brand:
          type: string
        model:
          type: string
        colorway:
          type: string
        style:
          type: string
        releaseDate:
          type: string
        retailPrice:
          type: number
        currency:
          type: string
        imageUrl:
          type: string
          format: uri
        sizesAvailable:
          type: array
          items: *a826
        gender:
          type: string
          enum: *a827
      required:
        - brand
        - model
        - colorway
        - style
        - releaseDate
        - retailPrice
        - currency
        - imageUrl
        - sizesAvailable
        - gender
    SneakersRecordPatch:
      type: object
      properties:
        brand:
          type: string
        model:
          type: string
        colorway:
          type: string
        style:
          type: string
        releaseDate:
          type: string
        retailPrice:
          type: number
        currency:
          type: string
        imageUrl:
          type: string
          format: uri
        sizesAvailable:
          type: array
          items: *a826
        gender:
          type: string
          enum: *a827
    PlacesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        kind:
          type: string
          enum: &a828
            - park
            - beach
            - landmark
            - museum
            - cafe
            - restaurant
            - shopping
            - viewpoint
            - hiking
            - other
        city:
          type: string
        countryAlpha2:
          type: string
        latitude:
          type: number
        longitude:
          type: number
        rating:
          type: number
        ratingCount:
          type: integer
        description:
          type: string
        imageUrl:
          type: string
          format: uri
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - name
        - slug
        - kind
        - city
        - countryAlpha2
        - latitude
        - longitude
        - rating
        - ratingCount
        - description
        - imageUrl
        - createdAt
    PlacesRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        kind:
          type: string
          enum: *a828
        city:
          type: string
        countryAlpha2:
          type: string
        latitude:
          type: number
        longitude:
          type: number
        rating:
          type: number
        ratingCount:
          type: integer
        description:
          type: string
        imageUrl:
          type: string
          format: uri
      required:
        - name
        - slug
        - kind
        - city
        - countryAlpha2
        - latitude
        - longitude
        - rating
        - ratingCount
        - description
        - imageUrl
    PlacesRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        kind:
          type: string
          enum: *a828
        city:
          type: string
        countryAlpha2:
          type: string
        latitude:
          type: number
        longitude:
          type: number
        rating:
          type: number
        ratingCount:
          type: integer
        description:
          type: string
        imageUrl:
          type: string
          format: uri
    PeopleRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        fullName:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        email:
          type: string
          format: email
        phone:
          type: string
        occupation:
          type: string
        city:
          type: string
        countryAlpha2:
          type: string
        bio:
          type: string
        avatarUrl:
          type: string
          format: uri
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - fullName
        - firstName
        - lastName
        - email
        - phone
        - occupation
        - city
        - countryAlpha2
        - bio
        - avatarUrl
        - createdAt
    PeopleRecordInput:
      type: object
      properties:
        fullName:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        email:
          type: string
          format: email
        phone:
          type: string
        occupation:
          type: string
        city:
          type: string
        countryAlpha2:
          type: string
        bio:
          type: string
        avatarUrl:
          type: string
          format: uri
      required:
        - fullName
        - firstName
        - lastName
        - email
        - phone
        - occupation
        - city
        - countryAlpha2
        - bio
        - avatarUrl
    PeopleRecordPatch:
      type: object
      properties:
        fullName:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        email:
          type: string
          format: email
        phone:
          type: string
        occupation:
          type: string
        city:
          type: string
        countryAlpha2:
          type: string
        bio:
          type: string
        avatarUrl:
          type: string
          format: uri
    MatchmakingRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        candidateUserId:
          type: integer
        matchScorePercent:
          type: integer
        commonInterests:
          type: array
          items: &a829
            type: string
        status:
          type: string
          enum: &a830
            - pending
            - liked
            - passed
            - matched
            - blocked
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - candidateUserId
        - matchScorePercent
        - commonInterests
        - status
        - createdAt
    MatchmakingRecordInput:
      type: object
      properties:
        userId:
          type: integer
        candidateUserId:
          type: integer
        matchScorePercent:
          type: integer
        commonInterests:
          type: array
          items: *a829
        status:
          type: string
          enum: *a830
      required:
        - userId
        - candidateUserId
        - matchScorePercent
        - commonInterests
        - status
    MatchmakingRecordPatch:
      type: object
      properties:
        userId:
          type: integer
        candidateUserId:
          type: integer
        matchScorePercent:
          type: integer
        commonInterests:
          type: array
          items: *a829
        status:
          type: string
          enum: *a830
    StemFiguresRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        field:
          type: string
          enum: &a831
            - science
            - technology
            - engineering
            - mathematics
        bio:
          type: string
        bornYear:
          type: integer
        diedYear:
          type: integer
          nullable: true
        country:
          type: string
        imageUrl:
          type: string
          format: uri
        accomplishments:
          type: array
          items: &a832
            type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - name
        - slug
        - field
        - bio
        - bornYear
        - diedYear
        - country
        - imageUrl
        - accomplishments
        - createdAt
    StemFiguresRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        field:
          type: string
          enum: *a831
        bio:
          type: string
        bornYear:
          type: integer
        diedYear:
          type: integer
          nullable: true
        country:
          type: string
        imageUrl:
          type: string
          format: uri
        accomplishments:
          type: array
          items: *a832
      required:
        - name
        - slug
        - field
        - bio
        - bornYear
        - diedYear
        - country
        - imageUrl
        - accomplishments
    StemFiguresRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        field:
          type: string
          enum: *a831
        bio:
          type: string
        bornYear:
          type: integer
        diedYear:
          type: integer
          nullable: true
        country:
          type: string
        imageUrl:
          type: string
          format: uri
        accomplishments:
          type: array
          items: *a832
    AuthorsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        bio:
          type: string
        bornYear:
          type: integer
        diedYear:
          type: integer
          nullable: true
        nationality:
          type: string
        genres:
          type: array
          items: &a833
            type: string
        notableWorks:
          type: array
          items: &a834
            type: string
        imageUrl:
          type: string
          format: uri
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - name
        - slug
        - bio
        - bornYear
        - diedYear
        - nationality
        - genres
        - notableWorks
        - imageUrl
        - createdAt
    AuthorsRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        bio:
          type: string
        bornYear:
          type: integer
        diedYear:
          type: integer
          nullable: true
        nationality:
          type: string
        genres:
          type: array
          items: *a833
        notableWorks:
          type: array
          items: *a834
        imageUrl:
          type: string
          format: uri
      required:
        - name
        - slug
        - bio
        - bornYear
        - diedYear
        - nationality
        - genres
        - notableWorks
        - imageUrl
    AuthorsRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        bio:
          type: string
        bornYear:
          type: integer
        diedYear:
          type: integer
          nullable: true
        nationality:
          type: string
        genres:
          type: array
          items: *a833
        notableWorks:
          type: array
          items: *a834
        imageUrl:
          type: string
          format: uri
    ActivistsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        bio:
          type: string
        bornYear:
          type: integer
        diedYear:
          type: integer
          nullable: true
        causes:
          type: array
          items: &a835
            type: string
        country:
          type: string
        imageUrl:
          type: string
          format: uri
        accomplishments:
          type: array
          items: &a836
            type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - name
        - slug
        - bio
        - bornYear
        - diedYear
        - causes
        - country
        - imageUrl
        - accomplishments
        - createdAt
    ActivistsRecordInput:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        bio:
          type: string
        bornYear:
          type: integer
        diedYear:
          type: integer
          nullable: true
        causes:
          type: array
          items: *a835
        country:
          type: string
        imageUrl:
          type: string
          format: uri
        accomplishments:
          type: array
          items: *a836
      required:
        - name
        - slug
        - bio
        - bornYear
        - diedYear
        - causes
        - country
        - imageUrl
        - accomplishments
    ActivistsRecordPatch:
      type: object
      properties:
        name:
          type: string
        slug:
          type: string
        bio:
          type: string
        bornYear:
          type: integer
        diedYear:
          type: integer
          nullable: true
        causes:
          type: array
          items: *a835
        country:
          type: string
        imageUrl:
          type: string
          format: uri
        accomplishments:
          type: array
          items: *a836
    QuotesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        text:
          type: string
        authorName:
          type: string
        source:
          type: string
          nullable: true
        category:
          type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - text
        - authorName
        - source
        - category
        - createdAt
    QuotesRecordInput:
      type: object
      properties:
        text:
          type: string
        authorName:
          type: string
        source:
          type: string
          nullable: true
        category:
          type: string
      required:
        - text
        - authorName
        - source
        - category
    QuotesRecordPatch:
      type: object
      properties:
        text:
          type: string
        authorName:
          type: string
        source:
          type: string
          nullable: true
        category:
          type: string
    JokesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        setup:
          type: string
        punchline:
          type: string
        category:
          type: string
          enum: &a837
            - pun
            - dad
            - observational
            - one_liner
            - knock_knock
            - other
        rating:
          type: number
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - setup
        - punchline
        - category
        - rating
        - createdAt
    JokesRecordInput:
      type: object
      properties:
        setup:
          type: string
        punchline:
          type: string
        category:
          type: string
          enum: *a837
        rating:
          type: number
      required:
        - setup
        - punchline
        - category
        - rating
    JokesRecordPatch:
      type: object
      properties:
        setup:
          type: string
        punchline:
          type: string
        category:
          type: string
          enum: *a837
        rating:
          type: number
