openapi: 3.0.3
info:
  title: example-data.com REST API
  version: 1.0.0
  description: Free, public mock JSON API across 122 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:
        - 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: &a1
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a2
                    id: 1
                    firstName: Charlene
                    lastName: Roberts
                    fullName: Charlene Roberts
                    username: charlene_roberts
                    email: charlene_roberts@example.com
                    phone: (234) 666-5232
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/users?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a users record (fake — not persisted)
      operationId: create-users
      tags:
        - users
      requestBody:
        required: true
        content:
          application/json:
            schema: *a1
            example: *a2
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a1
              example: *a2
        "422":
          description: Validation failed
          content:
            application/json:
              schema: &a3
                $ref: "#/components/schemas/ProblemDetails"
  /api/v1/users/{id}:
    get:
      summary: Get one users record by id
      operationId: get-users-by-id
      tags:
        - users
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a1
              example: *a2
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a users record (fake — not persisted)
      operationId: replace-users
      tags:
        - users
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a1
            example: *a2
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a1
              example: *a2
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a1
              example: *a2
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a users record (fake — not persisted)
      operationId: delete-users
      tags:
        - users
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/countries:
    get:
      summary: List countries
      operationId: list-countries
      tags:
        - countries
      parameters:
        - 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: &a4
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a5
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/countries?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a countries record (fake — not persisted)
      operationId: create-countries
      tags:
        - countries
      requestBody:
        required: true
        content:
          application/json:
            schema: *a4
            example: *a5
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a4
              example: *a5
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/countries/{id}:
    get:
      summary: Get one countries record by id
      operationId: get-countries-by-id
      tags:
        - countries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a4
              example: *a5
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a countries record (fake — not persisted)
      operationId: replace-countries
      tags:
        - countries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a4
            example: *a5
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a4
              example: *a5
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a4
              example: *a5
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a countries record (fake — not persisted)
      operationId: delete-countries
      tags:
        - countries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/posts:
    get:
      summary: List posts
      operationId: list-posts
      tags:
        - posts
      parameters:
        - 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: &a6
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a7
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/posts?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a posts record (fake — not persisted)
      operationId: create-posts
      tags:
        - posts
      requestBody:
        required: true
        content:
          application/json:
            schema: *a6
            example: *a7
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a6
              example: *a7
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/posts/{id}:
    get:
      summary: Get one posts record by id
      operationId: get-posts-by-id
      tags:
        - posts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a6
              example: *a7
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a posts record (fake — not persisted)
      operationId: replace-posts
      tags:
        - posts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a6
            example: *a7
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a6
              example: *a7
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a6
              example: *a7
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a posts record (fake — not persisted)
      operationId: delete-posts
      tags:
        - posts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/products:
    get:
      summary: List products
      operationId: list-products
      tags:
        - products
      parameters:
        - 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: &a8
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a9
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/products?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a products record (fake — not persisted)
      operationId: create-products
      tags:
        - products
      requestBody:
        required: true
        content:
          application/json:
            schema: *a8
            example: *a9
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a8
              example: *a9
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/products/{id}:
    get:
      summary: Get one products record by id
      operationId: get-products-by-id
      tags:
        - products
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a8
              example: *a9
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a products record (fake — not persisted)
      operationId: replace-products
      tags:
        - products
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a8
            example: *a9
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a8
              example: *a9
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a8
              example: *a9
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a products record (fake — not persisted)
      operationId: delete-products
      tags:
        - products
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/orders:
    get:
      summary: List orders
      operationId: list-orders
      tags:
        - orders
      parameters:
        - 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: &a10
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a11
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/orders?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a orders record (fake — not persisted)
      operationId: create-orders
      tags:
        - orders
      requestBody:
        required: true
        content:
          application/json:
            schema: *a10
            example: *a11
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a10
              example: *a11
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/orders/{id}:
    get:
      summary: Get one orders record by id
      operationId: get-orders-by-id
      tags:
        - orders
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a10
              example: *a11
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a orders record (fake — not persisted)
      operationId: replace-orders
      tags:
        - orders
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a10
            example: *a11
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a10
              example: *a11
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a10
              example: *a11
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a orders record (fake — not persisted)
      operationId: delete-orders
      tags:
        - orders
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/order-items:
    get:
      summary: List order-items
      operationId: list-order-items
      tags:
        - order-items
      parameters:
        - 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: &a12
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a13
                    id: 1
                    orderId: 1
                    productId: 33
                    quantity: 4
                    unitPrice: 60.49
                    lineTotal: 241.96
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/order-items?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a order-items record (fake — not persisted)
      operationId: create-order-items
      tags:
        - order-items
      requestBody:
        required: true
        content:
          application/json:
            schema: *a12
            example: *a13
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a12
              example: *a13
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/order-items/{id}:
    get:
      summary: Get one order-items record by id
      operationId: get-order-items-by-id
      tags:
        - order-items
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a12
              example: *a13
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a12
            example: *a13
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a12
              example: *a13
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a12
              example: *a13
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/restaurants:
    get:
      summary: List restaurants
      operationId: list-restaurants
      tags:
        - restaurants
      parameters:
        - 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: &a14
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a15
                    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: (668) 959-4852
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/restaurants?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a restaurants record (fake — not persisted)
      operationId: create-restaurants
      tags:
        - restaurants
      requestBody:
        required: true
        content:
          application/json:
            schema: *a14
            example: *a15
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a14
              example: *a15
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/restaurants/{id}:
    get:
      summary: Get one restaurants record by id
      operationId: get-restaurants-by-id
      tags:
        - restaurants
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a14
              example: *a15
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a restaurants record (fake — not persisted)
      operationId: replace-restaurants
      tags:
        - restaurants
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a14
            example: *a15
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a14
              example: *a15
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a14
              example: *a15
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a restaurants record (fake — not persisted)
      operationId: delete-restaurants
      tags:
        - restaurants
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/restaurant-photos:
    get:
      summary: List restaurant-photos
      operationId: list-restaurant-photos
      tags:
        - restaurant-photos
      parameters:
        - 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: &a16
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a17
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/restaurant-photos?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a restaurant-photos record (fake — not persisted)
      operationId: create-restaurant-photos
      tags:
        - restaurant-photos
      requestBody:
        required: true
        content:
          application/json:
            schema: *a16
            example: *a17
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a16
              example: *a17
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/restaurant-photos/{id}:
    get:
      summary: Get one restaurant-photos record by id
      operationId: get-restaurant-photos-by-id
      tags:
        - restaurant-photos
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a16
              example: *a17
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a16
            example: *a17
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a16
              example: *a17
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a16
              example: *a17
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/recipes:
    get:
      summary: List recipes
      operationId: list-recipes
      tags:
        - recipes
      parameters:
        - 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: &a18
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a19
                    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:
                      - 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:
                      - "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:
                      - 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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/recipes?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a recipes record (fake — not persisted)
      operationId: create-recipes
      tags:
        - recipes
      requestBody:
        required: true
        content:
          application/json:
            schema: *a18
            example: *a19
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a18
              example: *a19
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/recipes/{id}:
    get:
      summary: Get one recipes record by id
      operationId: get-recipes-by-id
      tags:
        - recipes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a18
              example: *a19
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a recipes record (fake — not persisted)
      operationId: replace-recipes
      tags:
        - recipes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a18
            example: *a19
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a18
              example: *a19
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a18
              example: *a19
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a recipes record (fake — not persisted)
      operationId: delete-recipes
      tags:
        - recipes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/comments:
    get:
      summary: List comments
      operationId: list-comments
      tags:
        - comments
      parameters:
        - 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: &a20
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a21
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/comments?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a comments record (fake — not persisted)
      operationId: create-comments
      tags:
        - comments
      requestBody:
        required: true
        content:
          application/json:
            schema: *a20
            example: *a21
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a20
              example: *a21
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/comments/{id}:
    get:
      summary: Get one comments record by id
      operationId: get-comments-by-id
      tags:
        - comments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a20
              example: *a21
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a comments record (fake — not persisted)
      operationId: replace-comments
      tags:
        - comments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a20
            example: *a21
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a20
              example: *a21
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a20
              example: *a21
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a comments record (fake — not persisted)
      operationId: delete-comments
      tags:
        - comments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/reactions:
    get:
      summary: List reactions
      operationId: list-reactions
      tags:
        - reactions
      parameters:
        - 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: &a22
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a23
                    id: 1
                    userId: 81
                    targetType: post
                    targetId: 388
                    type: laugh
                    createdAt: 2026-02-07T18:39:10.082Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/reactions?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a reactions record (fake — not persisted)
      operationId: create-reactions
      tags:
        - reactions
      requestBody:
        required: true
        content:
          application/json:
            schema: *a22
            example: *a23
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a22
              example: *a23
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/reactions/{id}:
    get:
      summary: Get one reactions record by id
      operationId: get-reactions-by-id
      tags:
        - reactions
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a22
              example: *a23
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a reactions record (fake — not persisted)
      operationId: replace-reactions
      tags:
        - reactions
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a22
            example: *a23
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a22
              example: *a23
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a22
              example: *a23
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a reactions record (fake — not persisted)
      operationId: delete-reactions
      tags:
        - reactions
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/currencies:
    get:
      summary: List currencies
      operationId: list-currencies
      tags:
        - currencies
      parameters:
        - 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: &a24
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a25
                    id: 1
                    code: USD
                    name: United States Dollar
                    symbol: $
                    decimalDigits: 2
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/currencies?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a currencies record (fake — not persisted)
      operationId: create-currencies
      tags:
        - currencies
      requestBody:
        required: true
        content:
          application/json:
            schema: *a24
            example: *a25
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a24
              example: *a25
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/currencies/{id}:
    get:
      summary: Get one currencies record by id
      operationId: get-currencies-by-id
      tags:
        - currencies
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a24
              example: *a25
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a currencies record (fake — not persisted)
      operationId: replace-currencies
      tags:
        - currencies
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a24
            example: *a25
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a24
              example: *a25
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a24
              example: *a25
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a currencies record (fake — not persisted)
      operationId: delete-currencies
      tags:
        - currencies
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/languages:
    get:
      summary: List languages
      operationId: list-languages
      tags:
        - languages
      parameters:
        - 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: &a26
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a27
                    id: 1
                    code: en
                    name: English
                    nativeName: English
                    direction: ltr
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/languages?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a languages record (fake — not persisted)
      operationId: create-languages
      tags:
        - languages
      requestBody:
        required: true
        content:
          application/json:
            schema: *a26
            example: *a27
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a26
              example: *a27
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/languages/{id}:
    get:
      summary: Get one languages record by id
      operationId: get-languages-by-id
      tags:
        - languages
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a26
              example: *a27
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a languages record (fake — not persisted)
      operationId: replace-languages
      tags:
        - languages
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a26
            example: *a27
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a26
              example: *a27
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a26
              example: *a27
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a languages record (fake — not persisted)
      operationId: delete-languages
      tags:
        - languages
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/time-zones:
    get:
      summary: List time-zones
      operationId: list-time-zones
      tags:
        - time-zones
      parameters:
        - 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: &a28
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a29
                    id: 1
                    name: America/New_York
                    offsetMinutes: -300
                    abbreviation: EST
                    countryAlpha2: US
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/time-zones?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a time-zones record (fake — not persisted)
      operationId: create-time-zones
      tags:
        - time-zones
      requestBody:
        required: true
        content:
          application/json:
            schema: *a28
            example: *a29
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a28
              example: *a29
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/time-zones/{id}:
    get:
      summary: Get one time-zones record by id
      operationId: get-time-zones-by-id
      tags:
        - time-zones
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a28
              example: *a29
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a28
            example: *a29
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a28
              example: *a29
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a28
              example: *a29
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/industries:
    get:
      summary: List industries
      operationId: list-industries
      tags:
        - industries
      parameters:
        - 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: &a30
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a31
                    id: 1
                    name: Commercial Banking
                    slug: commercial-banking
                    sector: Financial Services
                    description: Institutions accepting deposits and making loans to businesses and
                      individuals.
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/industries?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a industries record (fake — not persisted)
      operationId: create-industries
      tags:
        - industries
      requestBody:
        required: true
        content:
          application/json:
            schema: *a30
            example: *a31
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a30
              example: *a31
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/industries/{id}:
    get:
      summary: Get one industries record by id
      operationId: get-industries-by-id
      tags:
        - industries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a30
              example: *a31
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a industries record (fake — not persisted)
      operationId: replace-industries
      tags:
        - industries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a30
            example: *a31
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a30
              example: *a31
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a30
              example: *a31
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a industries record (fake — not persisted)
      operationId: delete-industries
      tags:
        - industries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/categories:
    get:
      summary: List categories
      operationId: list-categories
      tags:
        - categories
      parameters:
        - 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: &a32
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a33
                    id: 1
                    name: Electronics
                    slug: electronics
                    description: Consumer electronics, gadgets, and technology hardware.
                    parentId: null
                    sortOrder: 1
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/categories?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a categories record (fake — not persisted)
      operationId: create-categories
      tags:
        - categories
      requestBody:
        required: true
        content:
          application/json:
            schema: *a32
            example: *a33
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a32
              example: *a33
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/categories/{id}:
    get:
      summary: Get one categories record by id
      operationId: get-categories-by-id
      tags:
        - categories
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a32
              example: *a33
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a categories record (fake — not persisted)
      operationId: replace-categories
      tags:
        - categories
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a32
            example: *a33
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a32
              example: *a33
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a32
              example: *a33
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a categories record (fake — not persisted)
      operationId: delete-categories
      tags:
        - categories
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/tags:
    get:
      summary: List tags
      operationId: list-tags
      tags:
        - tags
      parameters:
        - 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: &a34
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a35
                    id: 1
                    name: tutorial
                    slug: tutorial
                    color: "#d636ab"
                    useCount: 458
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/tags?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a tags record (fake — not persisted)
      operationId: create-tags
      tags:
        - tags
      requestBody:
        required: true
        content:
          application/json:
            schema: *a34
            example: *a35
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a34
              example: *a35
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/tags/{id}:
    get:
      summary: Get one tags record by id
      operationId: get-tags-by-id
      tags:
        - tags
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a34
              example: *a35
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a tags record (fake — not persisted)
      operationId: replace-tags
      tags:
        - tags
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a34
            example: *a35
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a34
              example: *a35
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a34
              example: *a35
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a tags record (fake — not persisted)
      operationId: delete-tags
      tags:
        - tags
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/followers:
    get:
      summary: List followers
      operationId: list-followers
      tags:
        - followers
      parameters:
        - 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: &a36
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a37
                    id: 1
                    userId: 194
                    followsUserId: 136
                    createdAt: 2024-08-15T01:35:05.437Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/followers?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a followers record (fake — not persisted)
      operationId: create-followers
      tags:
        - followers
      requestBody:
        required: true
        content:
          application/json:
            schema: *a36
            example: *a37
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a36
              example: *a37
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/followers/{id}:
    get:
      summary: Get one followers record by id
      operationId: get-followers-by-id
      tags:
        - followers
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a36
              example: *a37
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a followers record (fake — not persisted)
      operationId: replace-followers
      tags:
        - followers
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a36
            example: *a37
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a36
              example: *a37
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a36
              example: *a37
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a followers record (fake — not persisted)
      operationId: delete-followers
      tags:
        - followers
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/notifications:
    get:
      summary: List notifications
      operationId: list-notifications
      tags:
        - notifications
      parameters:
        - 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: &a38
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a39
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/notifications?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a notifications record (fake — not persisted)
      operationId: create-notifications
      tags:
        - notifications
      requestBody:
        required: true
        content:
          application/json:
            schema: *a38
            example: *a39
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a38
              example: *a39
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/notifications/{id}:
    get:
      summary: Get one notifications record by id
      operationId: get-notifications-by-id
      tags:
        - notifications
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a38
              example: *a39
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a notifications record (fake — not persisted)
      operationId: replace-notifications
      tags:
        - notifications
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a38
            example: *a39
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a38
              example: *a39
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a38
              example: *a39
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a notifications record (fake — not persisted)
      operationId: delete-notifications
      tags:
        - notifications
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/conversations:
    get:
      summary: List conversations
      operationId: list-conversations
      tags:
        - conversations
      parameters:
        - 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: &a40
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a41
                    id: 1
                    title: Music Lovers 91
                    isGroup: true
                    createdAt: 2025-07-24T08:14:40.405Z
                    updatedAt: 2026-03-09T06:13:46.627Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/conversations?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a conversations record (fake — not persisted)
      operationId: create-conversations
      tags:
        - conversations
      requestBody:
        required: true
        content:
          application/json:
            schema: *a40
            example: *a41
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a40
              example: *a41
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/conversations/{id}:
    get:
      summary: Get one conversations record by id
      operationId: get-conversations-by-id
      tags:
        - conversations
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a40
              example: *a41
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a conversations record (fake — not persisted)
      operationId: replace-conversations
      tags:
        - conversations
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a40
            example: *a41
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a40
              example: *a41
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a40
              example: *a41
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a conversations record (fake — not persisted)
      operationId: delete-conversations
      tags:
        - conversations
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/messages:
    get:
      summary: List messages
      operationId: list-messages
      tags:
        - messages
      parameters:
        - 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: &a42
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a43
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/messages?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a messages record (fake — not persisted)
      operationId: create-messages
      tags:
        - messages
      requestBody:
        required: true
        content:
          application/json:
            schema: *a42
            example: *a43
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a42
              example: *a43
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/messages/{id}:
    get:
      summary: Get one messages record by id
      operationId: get-messages-by-id
      tags:
        - messages
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a42
              example: *a43
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a messages record (fake — not persisted)
      operationId: replace-messages
      tags:
        - messages
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a42
            example: *a43
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a42
              example: *a43
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a42
              example: *a43
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a messages record (fake — not persisted)
      operationId: delete-messages
      tags:
        - messages
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/activities:
    get:
      summary: List activities
      operationId: list-activities
      tags:
        - activities
      parameters:
        - 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: &a44
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a45
                    id: 1
                    userId: 15
                    verb: shared
                    targetType: restaurant
                    targetId: 9
                    createdAt: 2026-02-03T09:24:31.539Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/activities?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a activities record (fake — not persisted)
      operationId: create-activities
      tags:
        - activities
      requestBody:
        required: true
        content:
          application/json:
            schema: *a44
            example: *a45
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a44
              example: *a45
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/activities/{id}:
    get:
      summary: Get one activities record by id
      operationId: get-activities-by-id
      tags:
        - activities
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a44
              example: *a45
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a activities record (fake — not persisted)
      operationId: replace-activities
      tags:
        - activities
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a44
            example: *a45
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a44
              example: *a45
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a44
              example: *a45
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a activities record (fake — not persisted)
      operationId: delete-activities
      tags:
        - activities
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/attachments:
    get:
      summary: List attachments
      operationId: list-attachments
      tags:
        - attachments
      parameters:
        - 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: &a46
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a47
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/attachments?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a attachments record (fake — not persisted)
      operationId: create-attachments
      tags:
        - attachments
      requestBody:
        required: true
        content:
          application/json:
            schema: *a46
            example: *a47
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a46
              example: *a47
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/attachments/{id}:
    get:
      summary: Get one attachments record by id
      operationId: get-attachments-by-id
      tags:
        - attachments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a46
              example: *a47
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a attachments record (fake — not persisted)
      operationId: replace-attachments
      tags:
        - attachments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a46
            example: *a47
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a46
              example: *a47
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a46
              example: *a47
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a attachments record (fake — not persisted)
      operationId: delete-attachments
      tags:
        - attachments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/hashtags:
    get:
      summary: List hashtags
      operationId: list-hashtags
      tags:
        - hashtags
      parameters:
        - 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: &a48
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a49
                    id: 1
                    tag: design
                    useCount: 4906
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/hashtags?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a hashtags record (fake — not persisted)
      operationId: create-hashtags
      tags:
        - hashtags
      requestBody:
        required: true
        content:
          application/json:
            schema: *a48
            example: *a49
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a48
              example: *a49
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/hashtags/{id}:
    get:
      summary: Get one hashtags record by id
      operationId: get-hashtags-by-id
      tags:
        - hashtags
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a48
              example: *a49
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a hashtags record (fake — not persisted)
      operationId: replace-hashtags
      tags:
        - hashtags
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a48
            example: *a49
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a48
              example: *a49
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a48
              example: *a49
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a hashtags record (fake — not persisted)
      operationId: delete-hashtags
      tags:
        - hashtags
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/groups:
    get:
      summary: List groups
      operationId: list-groups
      tags:
        - groups
      parameters:
        - 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: &a50
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a51
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/groups?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a groups record (fake — not persisted)
      operationId: create-groups
      tags:
        - groups
      requestBody:
        required: true
        content:
          application/json:
            schema: *a50
            example: *a51
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a50
              example: *a51
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/groups/{id}:
    get:
      summary: Get one groups record by id
      operationId: get-groups-by-id
      tags:
        - groups
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a50
              example: *a51
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a groups record (fake — not persisted)
      operationId: replace-groups
      tags:
        - groups
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a50
            example: *a51
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a50
              example: *a51
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a50
              example: *a51
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a groups record (fake — not persisted)
      operationId: delete-groups
      tags:
        - groups
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/group-members:
    get:
      summary: List group-members
      operationId: list-group-members
      tags:
        - group-members
      parameters:
        - 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: &a52
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a53
                    id: 1
                    groupId: 1
                    userId: 153
                    role: owner
                    joinedAt: 2025-01-06T10:31:34.951Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/group-members?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a group-members record (fake — not persisted)
      operationId: create-group-members
      tags:
        - group-members
      requestBody:
        required: true
        content:
          application/json:
            schema: *a52
            example: *a53
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a52
              example: *a53
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/group-members/{id}:
    get:
      summary: Get one group-members record by id
      operationId: get-group-members-by-id
      tags:
        - group-members
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a52
              example: *a53
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a52
            example: *a53
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a52
              example: *a53
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a52
              example: *a53
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/stories:
    get:
      summary: List stories
      operationId: list-stories
      tags:
        - stories
      parameters:
        - 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/StoriesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a55
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/stories?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a stories record (fake — not persisted)
      operationId: create-stories
      tags:
        - stories
      requestBody:
        required: true
        content:
          application/json:
            schema: *a54
            example: *a55
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a54
              example: *a55
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/stories/{id}:
    get:
      summary: Get one stories record by id
      operationId: get-stories-by-id
      tags:
        - stories
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a54
              example: *a55
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a stories record (fake — not persisted)
      operationId: replace-stories
      tags:
        - stories
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a54
            example: *a55
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a54
              example: *a55
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a54
              example: *a55
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a stories record (fake — not persisted)
      operationId: delete-stories
      tags:
        - stories
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/events:
    get:
      summary: List events
      operationId: list-events
      tags:
        - events
      parameters:
        - 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: &a56
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a57
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/events?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a events record (fake — not persisted)
      operationId: create-events
      tags:
        - events
      requestBody:
        required: true
        content:
          application/json:
            schema: *a56
            example: *a57
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a56
              example: *a57
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/events/{id}:
    get:
      summary: Get one events record by id
      operationId: get-events-by-id
      tags:
        - events
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a56
              example: *a57
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a events record (fake — not persisted)
      operationId: replace-events
      tags:
        - events
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a56
            example: *a57
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a56
              example: *a57
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a56
              example: *a57
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a events record (fake — not persisted)
      operationId: delete-events
      tags:
        - events
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/event-rsvps:
    get:
      summary: List event-rsvps
      operationId: list-event-rsvps
      tags:
        - event-rsvps
      parameters:
        - 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: &a58
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a59
                    id: 1
                    eventId: 1
                    userId: 244
                    status: maybe
                    respondedAt: 2026-03-28T15:00:52.726Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/event-rsvps?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a event-rsvps record (fake — not persisted)
      operationId: create-event-rsvps
      tags:
        - event-rsvps
      requestBody:
        required: true
        content:
          application/json:
            schema: *a58
            example: *a59
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a58
              example: *a59
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/event-rsvps/{id}:
    get:
      summary: Get one event-rsvps record by id
      operationId: get-event-rsvps-by-id
      tags:
        - event-rsvps
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a58
              example: *a59
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a58
            example: *a59
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a58
              example: *a59
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a58
              example: *a59
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/brands:
    get:
      summary: List brands
      operationId: list-brands
      tags:
        - brands
      parameters:
        - 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/BrandsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a61
                    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://www.beahan-and-sons.com
                    foundedYear: 2023
                    headquartersCountryAlpha2: PE
                    createdAt: 2023-02-04T09:57:54.220Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/brands?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a brands record (fake — not persisted)
      operationId: create-brands
      tags:
        - brands
      requestBody:
        required: true
        content:
          application/json:
            schema: *a60
            example: *a61
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a60
              example: *a61
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/brands/{id}:
    get:
      summary: Get one brands record by id
      operationId: get-brands-by-id
      tags:
        - brands
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a60
              example: *a61
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a brands record (fake — not persisted)
      operationId: replace-brands
      tags:
        - brands
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a60
            example: *a61
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a60
              example: *a61
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a60
              example: *a61
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a brands record (fake — not persisted)
      operationId: delete-brands
      tags:
        - brands
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/stores:
    get:
      summary: List stores
      operationId: list-stores
      tags:
        - stores
      parameters:
        - 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: &a62
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a63
                    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: 632-725-1297
                    website: https://www.gleason-lehner-and-bradtke.com
                    hours: Mon-Sat 8am-8pm, Sun 10am-6pm
                    createdAt: 2022-08-06T06:51:30.132Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/stores?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a stores record (fake — not persisted)
      operationId: create-stores
      tags:
        - stores
      requestBody:
        required: true
        content:
          application/json:
            schema: *a62
            example: *a63
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a62
              example: *a63
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/stores/{id}:
    get:
      summary: Get one stores record by id
      operationId: get-stores-by-id
      tags:
        - stores
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a62
              example: *a63
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a stores record (fake — not persisted)
      operationId: replace-stores
      tags:
        - stores
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a62
            example: *a63
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a62
              example: *a63
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a62
              example: *a63
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a stores record (fake — not persisted)
      operationId: delete-stores
      tags:
        - stores
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/addresses:
    get:
      summary: List addresses
      operationId: list-addresses
      tags:
        - addresses
      parameters:
        - 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: &a64
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a65
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/addresses?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a addresses record (fake — not persisted)
      operationId: create-addresses
      tags:
        - addresses
      requestBody:
        required: true
        content:
          application/json:
            schema: *a64
            example: *a65
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a64
              example: *a65
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/addresses/{id}:
    get:
      summary: Get one addresses record by id
      operationId: get-addresses-by-id
      tags:
        - addresses
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a64
              example: *a65
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a addresses record (fake — not persisted)
      operationId: replace-addresses
      tags:
        - addresses
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a64
            example: *a65
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a64
              example: *a65
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a64
              example: *a65
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a addresses record (fake — not persisted)
      operationId: delete-addresses
      tags:
        - addresses
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/coupons:
    get:
      summary: List coupons
      operationId: list-coupons
      tags:
        - coupons
      parameters:
        - 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/CouponsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a67
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/coupons?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a coupons record (fake — not persisted)
      operationId: create-coupons
      tags:
        - coupons
      requestBody:
        required: true
        content:
          application/json:
            schema: *a66
            example: *a67
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a66
              example: *a67
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/coupons/{id}:
    get:
      summary: Get one coupons record by id
      operationId: get-coupons-by-id
      tags:
        - coupons
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a66
              example: *a67
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a coupons record (fake — not persisted)
      operationId: replace-coupons
      tags:
        - coupons
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a66
            example: *a67
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a66
              example: *a67
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a66
              example: *a67
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a coupons record (fake — not persisted)
      operationId: delete-coupons
      tags:
        - coupons
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/product-reviews:
    get:
      summary: List product-reviews
      operationId: list-product-reviews
      tags:
        - product-reviews
      parameters:
        - 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: &a68
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a69
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/product-reviews?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a product-reviews record (fake — not persisted)
      operationId: create-product-reviews
      tags:
        - product-reviews
      requestBody:
        required: true
        content:
          application/json:
            schema: *a68
            example: *a69
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a68
              example: *a69
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/product-reviews/{id}:
    get:
      summary: Get one product-reviews record by id
      operationId: get-product-reviews-by-id
      tags:
        - product-reviews
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a68
              example: *a69
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a68
            example: *a69
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a68
              example: *a69
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a68
              example: *a69
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/wishlists:
    get:
      summary: List wishlists
      operationId: list-wishlists
      tags:
        - wishlists
      parameters:
        - 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: &a70
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a71
                    id: 1
                    userId: 1
                    name: Summer Picks
                    isPublic: true
                    productIds:
                      - 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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/wishlists?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a wishlists record (fake — not persisted)
      operationId: create-wishlists
      tags:
        - wishlists
      requestBody:
        required: true
        content:
          application/json:
            schema: *a70
            example: *a71
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a70
              example: *a71
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/wishlists/{id}:
    get:
      summary: Get one wishlists record by id
      operationId: get-wishlists-by-id
      tags:
        - wishlists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a70
              example: *a71
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a wishlists record (fake — not persisted)
      operationId: replace-wishlists
      tags:
        - wishlists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a70
            example: *a71
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a70
              example: *a71
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a70
              example: *a71
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a wishlists record (fake — not persisted)
      operationId: delete-wishlists
      tags:
        - wishlists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/carts:
    get:
      summary: List carts
      operationId: list-carts
      tags:
        - carts
      parameters:
        - 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/CartsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a73
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/carts?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a carts record (fake — not persisted)
      operationId: create-carts
      tags:
        - carts
      requestBody:
        required: true
        content:
          application/json:
            schema: *a72
            example: *a73
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a72
              example: *a73
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/carts/{id}:
    get:
      summary: Get one carts record by id
      operationId: get-carts-by-id
      tags:
        - carts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a72
              example: *a73
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a carts record (fake — not persisted)
      operationId: replace-carts
      tags:
        - carts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a72
            example: *a73
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a72
              example: *a73
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a72
              example: *a73
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a carts record (fake — not persisted)
      operationId: delete-carts
      tags:
        - carts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/cart-items:
    get:
      summary: List cart-items
      operationId: list-cart-items
      tags:
        - cart-items
      parameters:
        - 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: &a74
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a75
                    id: 1
                    cartId: 1
                    productId: 177
                    quantity: 2
                    unitPrice: 47.15
                    addedAt: 2026-03-07T06:07:41.991Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/cart-items?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a cart-items record (fake — not persisted)
      operationId: create-cart-items
      tags:
        - cart-items
      requestBody:
        required: true
        content:
          application/json:
            schema: *a74
            example: *a75
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a74
              example: *a75
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/cart-items/{id}:
    get:
      summary: Get one cart-items record by id
      operationId: get-cart-items-by-id
      tags:
        - cart-items
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a74
              example: *a75
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a74
            example: *a75
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a74
              example: *a75
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a74
              example: *a75
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/shipments:
    get:
      summary: List shipments
      operationId: list-shipments
      tags:
        - shipments
      parameters:
        - 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: &a76
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a77
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/shipments?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a shipments record (fake — not persisted)
      operationId: create-shipments
      tags:
        - shipments
      requestBody:
        required: true
        content:
          application/json:
            schema: *a76
            example: *a77
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a76
              example: *a77
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/shipments/{id}:
    get:
      summary: Get one shipments record by id
      operationId: get-shipments-by-id
      tags:
        - shipments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a76
              example: *a77
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a shipments record (fake — not persisted)
      operationId: replace-shipments
      tags:
        - shipments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a76
            example: *a77
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a76
              example: *a77
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a76
              example: *a77
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a shipments record (fake — not persisted)
      operationId: delete-shipments
      tags:
        - shipments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/destinations:
    get:
      summary: List destinations
      operationId: list-destinations
      tags:
        - destinations
      parameters:
        - 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/DestinationsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a79
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/destinations?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a destinations record (fake — not persisted)
      operationId: create-destinations
      tags:
        - destinations
      requestBody:
        required: true
        content:
          application/json:
            schema: *a78
            example: *a79
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a78
              example: *a79
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/destinations/{id}:
    get:
      summary: Get one destinations record by id
      operationId: get-destinations-by-id
      tags:
        - destinations
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a78
              example: *a79
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a destinations record (fake — not persisted)
      operationId: replace-destinations
      tags:
        - destinations
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a78
            example: *a79
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a78
              example: *a79
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a78
              example: *a79
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a destinations record (fake — not persisted)
      operationId: delete-destinations
      tags:
        - destinations
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/flights:
    get:
      summary: List flights
      operationId: list-flights
      tags:
        - flights
      parameters:
        - 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: &a80
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a81
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/flights?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a flights record (fake — not persisted)
      operationId: create-flights
      tags:
        - flights
      requestBody:
        required: true
        content:
          application/json:
            schema: *a80
            example: *a81
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a80
              example: *a81
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/flights/{id}:
    get:
      summary: Get one flights record by id
      operationId: get-flights-by-id
      tags:
        - flights
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a80
              example: *a81
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a flights record (fake — not persisted)
      operationId: replace-flights
      tags:
        - flights
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a80
            example: *a81
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a80
              example: *a81
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a80
              example: *a81
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a flights record (fake — not persisted)
      operationId: delete-flights
      tags:
        - flights
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/hotels:
    get:
      summary: List hotels
      operationId: list-hotels
      tags:
        - hotels
      parameters:
        - 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: &a82
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a83
                    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:
                      - pet-friendly
                      - parking
                      - airport-shuttle
                      - bar
                    createdAt: 2025-03-21T01:28:31.055Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/hotels?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a hotels record (fake — not persisted)
      operationId: create-hotels
      tags:
        - hotels
      requestBody:
        required: true
        content:
          application/json:
            schema: *a82
            example: *a83
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a82
              example: *a83
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/hotels/{id}:
    get:
      summary: Get one hotels record by id
      operationId: get-hotels-by-id
      tags:
        - hotels
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a82
              example: *a83
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a hotels record (fake — not persisted)
      operationId: replace-hotels
      tags:
        - hotels
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a82
            example: *a83
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a82
              example: *a83
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a82
              example: *a83
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a hotels record (fake — not persisted)
      operationId: delete-hotels
      tags:
        - hotels
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/properties:
    get:
      summary: List properties
      operationId: list-properties
      tags:
        - properties
      parameters:
        - 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/PropertiesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a85
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/properties?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a properties record (fake — not persisted)
      operationId: create-properties
      tags:
        - properties
      requestBody:
        required: true
        content:
          application/json:
            schema: *a84
            example: *a85
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a84
              example: *a85
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/properties/{id}:
    get:
      summary: Get one properties record by id
      operationId: get-properties-by-id
      tags:
        - properties
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a84
              example: *a85
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a properties record (fake — not persisted)
      operationId: replace-properties
      tags:
        - properties
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a84
            example: *a85
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a84
              example: *a85
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a84
              example: *a85
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a properties record (fake — not persisted)
      operationId: delete-properties
      tags:
        - properties
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/properties-saved:
    get:
      summary: List properties-saved
      operationId: list-properties-saved
      tags:
        - properties-saved
      parameters:
        - 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: &a86
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a87
                    id: 1
                    userId: 2
                    propertyId: 112
                    savedAt: 2025-10-15T16:32:11.870Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/properties-saved?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a properties-saved record (fake — not persisted)
      operationId: create-properties-saved
      tags:
        - properties-saved
      requestBody:
        required: true
        content:
          application/json:
            schema: *a86
            example: *a87
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a86
              example: *a87
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/properties-saved/{id}:
    get:
      summary: Get one properties-saved record by id
      operationId: get-properties-saved-by-id
      tags:
        - properties-saved
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a86
              example: *a87
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a86
            example: *a87
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a86
              example: *a87
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a86
              example: *a87
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/tickets:
    get:
      summary: List tickets
      operationId: list-tickets
      tags:
        - tickets
      parameters:
        - 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: &a88
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a89
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/tickets?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a tickets record (fake — not persisted)
      operationId: create-tickets
      tags:
        - tickets
      requestBody:
        required: true
        content:
          application/json:
            schema: *a88
            example: *a89
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a88
              example: *a89
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/tickets/{id}:
    get:
      summary: Get one tickets record by id
      operationId: get-tickets-by-id
      tags:
        - tickets
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a88
              example: *a89
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a tickets record (fake — not persisted)
      operationId: replace-tickets
      tags:
        - tickets
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a88
            example: *a89
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a88
              example: *a89
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a88
              example: *a89
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a tickets record (fake — not persisted)
      operationId: delete-tickets
      tags:
        - tickets
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/bookings:
    get:
      summary: List bookings
      operationId: list-bookings
      tags:
        - bookings
      parameters:
        - 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/BookingsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a91
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/bookings?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a bookings record (fake — not persisted)
      operationId: create-bookings
      tags:
        - bookings
      requestBody:
        required: true
        content:
          application/json:
            schema: *a90
            example: *a91
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a90
              example: *a91
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/bookings/{id}:
    get:
      summary: Get one bookings record by id
      operationId: get-bookings-by-id
      tags:
        - bookings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a90
              example: *a91
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a bookings record (fake — not persisted)
      operationId: replace-bookings
      tags:
        - bookings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a90
            example: *a91
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a90
              example: *a91
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a90
              example: *a91
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a bookings record (fake — not persisted)
      operationId: delete-bookings
      tags:
        - bookings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/itineraries:
    get:
      summary: List itineraries
      operationId: list-itineraries
      tags:
        - itineraries
      parameters:
        - 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: &a92
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a93
                    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:
                      - 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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/itineraries?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a itineraries record (fake — not persisted)
      operationId: create-itineraries
      tags:
        - itineraries
      requestBody:
        required: true
        content:
          application/json:
            schema: *a92
            example: *a93
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a92
              example: *a93
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/itineraries/{id}:
    get:
      summary: Get one itineraries record by id
      operationId: get-itineraries-by-id
      tags:
        - itineraries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a92
              example: *a93
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a itineraries record (fake — not persisted)
      operationId: replace-itineraries
      tags:
        - itineraries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a92
            example: *a93
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a92
              example: *a93
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a92
              example: *a93
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a itineraries record (fake — not persisted)
      operationId: delete-itineraries
      tags:
        - itineraries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/food-categories:
    get:
      summary: List food-categories
      operationId: list-food-categories
      tags:
        - food-categories
      parameters:
        - 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: &a94
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a95
                    id: 1
                    name: Appetizers
                    slug: appetizers
                    description: Starters, snacks, and small bites to begin a meal.
                    parentId: null
                    sortOrder: 1
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/food-categories?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a food-categories record (fake — not persisted)
      operationId: create-food-categories
      tags:
        - food-categories
      requestBody:
        required: true
        content:
          application/json:
            schema: *a94
            example: *a95
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a94
              example: *a95
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/food-categories/{id}:
    get:
      summary: Get one food-categories record by id
      operationId: get-food-categories-by-id
      tags:
        - food-categories
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a94
              example: *a95
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a94
            example: *a95
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a94
              example: *a95
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a94
              example: *a95
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/ingredients:
    get:
      summary: List ingredients
      operationId: list-ingredients
      tags:
        - ingredients
      parameters:
        - 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/IngredientsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a97
                    id: 1
                    name: All-Purpose Flour
                    slug: all-purpose-flour-1
                    foodCategoryId: 15
                    unit: g
                    defaultPricePerUnit: 11.39
                    currency: USD
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/ingredients?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a ingredients record (fake — not persisted)
      operationId: create-ingredients
      tags:
        - ingredients
      requestBody:
        required: true
        content:
          application/json:
            schema: *a96
            example: *a97
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a96
              example: *a97
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/ingredients/{id}:
    get:
      summary: Get one ingredients record by id
      operationId: get-ingredients-by-id
      tags:
        - ingredients
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a96
              example: *a97
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a ingredients record (fake — not persisted)
      operationId: replace-ingredients
      tags:
        - ingredients
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a96
            example: *a97
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a96
              example: *a97
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a96
              example: *a97
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a ingredients record (fake — not persisted)
      operationId: delete-ingredients
      tags:
        - ingredients
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/menus:
    get:
      summary: List menus
      operationId: list-menus
      tags:
        - menus
      parameters:
        - 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: &a98
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a99
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/menus?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a menus record (fake — not persisted)
      operationId: create-menus
      tags:
        - menus
      requestBody:
        required: true
        content:
          application/json:
            schema: *a98
            example: *a99
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a98
              example: *a99
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/menus/{id}:
    get:
      summary: Get one menus record by id
      operationId: get-menus-by-id
      tags:
        - menus
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a98
              example: *a99
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a menus record (fake — not persisted)
      operationId: replace-menus
      tags:
        - menus
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a98
            example: *a99
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a98
              example: *a99
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a98
              example: *a99
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a menus record (fake — not persisted)
      operationId: delete-menus
      tags:
        - menus
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/menu-items:
    get:
      summary: List menu-items
      operationId: list-menu-items
      tags:
        - menu-items
      parameters:
        - 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: &a100
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a101
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/menu-items?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a menu-items record (fake — not persisted)
      operationId: create-menu-items
      tags:
        - menu-items
      requestBody:
        required: true
        content:
          application/json:
            schema: *a100
            example: *a101
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a100
              example: *a101
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/menu-items/{id}:
    get:
      summary: Get one menu-items record by id
      operationId: get-menu-items-by-id
      tags:
        - menu-items
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a100
              example: *a101
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a100
            example: *a101
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a100
              example: *a101
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a100
              example: *a101
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/food-orders:
    get:
      summary: List food-orders
      operationId: list-food-orders
      tags:
        - food-orders
      parameters:
        - 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/FoodOrdersRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a103
                    id: 1
                    userId: 162
                    restaurantId: 78
                    items:
                      - 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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/food-orders?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a food-orders record (fake — not persisted)
      operationId: create-food-orders
      tags:
        - food-orders
      requestBody:
        required: true
        content:
          application/json:
            schema: *a102
            example: *a103
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a102
              example: *a103
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/food-orders/{id}:
    get:
      summary: Get one food-orders record by id
      operationId: get-food-orders-by-id
      tags:
        - food-orders
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a102
              example: *a103
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a102
            example: *a103
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a102
              example: *a103
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a102
              example: *a103
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/orgs:
    get:
      summary: List orgs
      operationId: list-orgs
      tags:
        - orgs
      parameters:
        - 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: &a104
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a105
                    id: 1
                    name: Lakin Group
                    slug: lakin-group
                    description: Devolved 24 hour adapter
                    industryId: 26
                    size: 11-50
                    foundedYear: 2023
                    websiteUrl: https://www.lakin-group.com
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/orgs?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a orgs record (fake — not persisted)
      operationId: create-orgs
      tags:
        - orgs
      requestBody:
        required: true
        content:
          application/json:
            schema: *a104
            example: *a105
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a104
              example: *a105
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/orgs/{id}:
    get:
      summary: Get one orgs record by id
      operationId: get-orgs-by-id
      tags:
        - orgs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a104
              example: *a105
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a orgs record (fake — not persisted)
      operationId: replace-orgs
      tags:
        - orgs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a104
            example: *a105
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a104
              example: *a105
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a104
              example: *a105
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a orgs record (fake — not persisted)
      operationId: delete-orgs
      tags:
        - orgs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/teams:
    get:
      summary: List teams
      operationId: list-teams
      tags:
        - teams
      parameters:
        - 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: &a106
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a107
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/teams?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a teams record (fake — not persisted)
      operationId: create-teams
      tags:
        - teams
      requestBody:
        required: true
        content:
          application/json:
            schema: *a106
            example: *a107
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a106
              example: *a107
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/teams/{id}:
    get:
      summary: Get one teams record by id
      operationId: get-teams-by-id
      tags:
        - teams
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a106
              example: *a107
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a teams record (fake — not persisted)
      operationId: replace-teams
      tags:
        - teams
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a106
            example: *a107
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a106
              example: *a107
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a106
              example: *a107
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a teams record (fake — not persisted)
      operationId: delete-teams
      tags:
        - teams
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/projects:
    get:
      summary: List projects
      operationId: list-projects
      tags:
        - projects
      parameters:
        - 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/ProjectsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a109
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/projects?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a projects record (fake — not persisted)
      operationId: create-projects
      tags:
        - projects
      requestBody:
        required: true
        content:
          application/json:
            schema: *a108
            example: *a109
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a108
              example: *a109
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/projects/{id}:
    get:
      summary: Get one projects record by id
      operationId: get-projects-by-id
      tags:
        - projects
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a108
              example: *a109
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a projects record (fake — not persisted)
      operationId: replace-projects
      tags:
        - projects
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a108
            example: *a109
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a108
              example: *a109
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a108
              example: *a109
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a projects record (fake — not persisted)
      operationId: delete-projects
      tags:
        - projects
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/tasks:
    get:
      summary: List tasks
      operationId: list-tasks
      tags:
        - tasks
      parameters:
        - 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: &a110
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a111
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/tasks?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a tasks record (fake — not persisted)
      operationId: create-tasks
      tags:
        - tasks
      requestBody:
        required: true
        content:
          application/json:
            schema: *a110
            example: *a111
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a110
              example: *a111
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/tasks/{id}:
    get:
      summary: Get one tasks record by id
      operationId: get-tasks-by-id
      tags:
        - tasks
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a110
              example: *a111
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a tasks record (fake — not persisted)
      operationId: replace-tasks
      tags:
        - tasks
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a110
            example: *a111
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a110
              example: *a111
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a110
              example: *a111
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a tasks record (fake — not persisted)
      operationId: delete-tasks
      tags:
        - tasks
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/todo-lists:
    get:
      summary: List todo-lists
      operationId: list-todo-lists
      tags:
        - todo-lists
      parameters:
        - 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: &a112
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a113
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/todo-lists?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a todo-lists record (fake — not persisted)
      operationId: create-todo-lists
      tags:
        - todo-lists
      requestBody:
        required: true
        content:
          application/json:
            schema: *a112
            example: *a113
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a112
              example: *a113
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/todo-lists/{id}:
    get:
      summary: Get one todo-lists record by id
      operationId: get-todo-lists-by-id
      tags:
        - todo-lists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a112
              example: *a113
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a112
            example: *a113
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a112
              example: *a113
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a112
              example: *a113
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/todos:
    get:
      summary: List todos
      operationId: list-todos
      tags:
        - todos
      parameters:
        - 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/TodosRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a115
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/todos?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a todos record (fake — not persisted)
      operationId: create-todos
      tags:
        - todos
      requestBody:
        required: true
        content:
          application/json:
            schema: *a114
            example: *a115
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a114
              example: *a115
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/todos/{id}:
    get:
      summary: Get one todos record by id
      operationId: get-todos-by-id
      tags:
        - todos
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a114
              example: *a115
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a todos record (fake — not persisted)
      operationId: replace-todos
      tags:
        - todos
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a114
            example: *a115
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a114
              example: *a115
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a114
              example: *a115
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a todos record (fake — not persisted)
      operationId: delete-todos
      tags:
        - todos
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/documents:
    get:
      summary: List documents
      operationId: list-documents
      tags:
        - documents
      parameters:
        - 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: &a116
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a117
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/documents?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a documents record (fake — not persisted)
      operationId: create-documents
      tags:
        - documents
      requestBody:
        required: true
        content:
          application/json:
            schema: *a116
            example: *a117
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a116
              example: *a117
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/documents/{id}:
    get:
      summary: Get one documents record by id
      operationId: get-documents-by-id
      tags:
        - documents
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a116
              example: *a117
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a documents record (fake — not persisted)
      operationId: replace-documents
      tags:
        - documents
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a116
            example: *a117
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a116
              example: *a117
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a116
              example: *a117
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a documents record (fake — not persisted)
      operationId: delete-documents
      tags:
        - documents
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/calendar-events:
    get:
      summary: List calendar-events
      operationId: list-calendar-events
      tags:
        - calendar-events
      parameters:
        - 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: &a118
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a119
                    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:
                      - 198
                      - 211
                    createdAt: 2026-05-20T07:31:54.772Z
                    updatedAt: 2026-05-20T21:45:34.752Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/calendar-events?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a calendar-events record (fake — not persisted)
      operationId: create-calendar-events
      tags:
        - calendar-events
      requestBody:
        required: true
        content:
          application/json:
            schema: *a118
            example: *a119
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a118
              example: *a119
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/calendar-events/{id}:
    get:
      summary: Get one calendar-events record by id
      operationId: get-calendar-events-by-id
      tags:
        - calendar-events
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a118
              example: *a119
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a118
            example: *a119
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a118
              example: *a119
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a118
              example: *a119
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/time-entries:
    get:
      summary: List time-entries
      operationId: list-time-entries
      tags:
        - time-entries
      parameters:
        - 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/TimeEntriesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a121
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/time-entries?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a time-entries record (fake — not persisted)
      operationId: create-time-entries
      tags:
        - time-entries
      requestBody:
        required: true
        content:
          application/json:
            schema: *a120
            example: *a121
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a120
              example: *a121
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/time-entries/{id}:
    get:
      summary: Get one time-entries record by id
      operationId: get-time-entries-by-id
      tags:
        - time-entries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a120
              example: *a121
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a120
            example: *a121
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a120
              example: *a121
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a120
              example: *a121
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/kanban-boards:
    get:
      summary: List kanban-boards
      operationId: list-kanban-boards
      tags:
        - kanban-boards
      parameters:
        - 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: &a122
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a123
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/kanban-boards?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a kanban-boards record (fake — not persisted)
      operationId: create-kanban-boards
      tags:
        - kanban-boards
      requestBody:
        required: true
        content:
          application/json:
            schema: *a122
            example: *a123
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a122
              example: *a123
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/kanban-boards/{id}:
    get:
      summary: Get one kanban-boards record by id
      operationId: get-kanban-boards-by-id
      tags:
        - kanban-boards
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a122
              example: *a123
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a122
            example: *a123
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a122
              example: *a123
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a122
              example: *a123
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/kanban-columns:
    get:
      summary: List kanban-columns
      operationId: list-kanban-columns
      tags:
        - kanban-columns
      parameters:
        - 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: &a124
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a125
                    id: 1
                    boardId: 1
                    name: Backlog
                    sortOrder: 0
                    color: "#94a3b8"
                    createdAt: 2025-07-31T11:30:54.074Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/kanban-columns?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a kanban-columns record (fake — not persisted)
      operationId: create-kanban-columns
      tags:
        - kanban-columns
      requestBody:
        required: true
        content:
          application/json:
            schema: *a124
            example: *a125
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a124
              example: *a125
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/kanban-columns/{id}:
    get:
      summary: Get one kanban-columns record by id
      operationId: get-kanban-columns-by-id
      tags:
        - kanban-columns
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a124
              example: *a125
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a124
            example: *a125
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a124
              example: *a125
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a124
              example: *a125
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/files:
    get:
      summary: List files
      operationId: list-files
      tags:
        - files
      parameters:
        - 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/FilesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a127
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/files?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a files record (fake — not persisted)
      operationId: create-files
      tags:
        - files
      requestBody:
        required: true
        content:
          application/json:
            schema: *a126
            example: *a127
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a126
              example: *a127
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/files/{id}:
    get:
      summary: Get one files record by id
      operationId: get-files-by-id
      tags:
        - files
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a126
              example: *a127
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a files record (fake — not persisted)
      operationId: replace-files
      tags:
        - files
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a126
            example: *a127
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a126
              example: *a127
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a126
              example: *a127
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a files record (fake — not persisted)
      operationId: delete-files
      tags:
        - files
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/stocks:
    get:
      summary: List stocks
      operationId: list-stocks
      tags:
        - stocks
      parameters:
        - 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: &a128
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a129
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/stocks?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a stocks record (fake — not persisted)
      operationId: create-stocks
      tags:
        - stocks
      requestBody:
        required: true
        content:
          application/json:
            schema: *a128
            example: *a129
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a128
              example: *a129
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/stocks/{id}:
    get:
      summary: Get one stocks record by id
      operationId: get-stocks-by-id
      tags:
        - stocks
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a128
              example: *a129
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a stocks record (fake — not persisted)
      operationId: replace-stocks
      tags:
        - stocks
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a128
            example: *a129
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a128
              example: *a129
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a128
              example: *a129
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a stocks record (fake — not persisted)
      operationId: delete-stocks
      tags:
        - stocks
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/crypto:
    get:
      summary: List crypto
      operationId: list-crypto
      tags:
        - crypto
      parameters:
        - 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: &a130
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a131
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/crypto?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a crypto record (fake — not persisted)
      operationId: create-crypto
      tags:
        - crypto
      requestBody:
        required: true
        content:
          application/json:
            schema: *a130
            example: *a131
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a130
              example: *a131
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/crypto/{id}:
    get:
      summary: Get one crypto record by id
      operationId: get-crypto-by-id
      tags:
        - crypto
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a130
              example: *a131
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a crypto record (fake — not persisted)
      operationId: replace-crypto
      tags:
        - crypto
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a130
            example: *a131
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a130
              example: *a131
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a130
              example: *a131
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a crypto record (fake — not persisted)
      operationId: delete-crypto
      tags:
        - crypto
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/stock-holdings:
    get:
      summary: List stock-holdings
      operationId: list-stock-holdings
      tags:
        - stock-holdings
      parameters:
        - 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/StockHoldingsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a133
                    id: 1
                    userId: 2
                    stockId: 5
                    quantity: 117.999
                    costBasis: 1627.48
                    purchasedAt: 2024-09-27T02:42:34.677Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/stock-holdings?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a stock-holdings record (fake — not persisted)
      operationId: create-stock-holdings
      tags:
        - stock-holdings
      requestBody:
        required: true
        content:
          application/json:
            schema: *a132
            example: *a133
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a132
              example: *a133
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/stock-holdings/{id}:
    get:
      summary: Get one stock-holdings record by id
      operationId: get-stock-holdings-by-id
      tags:
        - stock-holdings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a132
              example: *a133
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a132
            example: *a133
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a132
              example: *a133
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a132
              example: *a133
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/crypto-holdings:
    get:
      summary: List crypto-holdings
      operationId: list-crypto-holdings
      tags:
        - crypto-holdings
      parameters:
        - 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: &a134
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a135
                    id: 1
                    userId: 1
                    cryptoId: 13
                    quantity: 85.07869486
                    costBasis: 0.00000492
                    purchasedAt: 2025-03-11T09:55:17.870Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/crypto-holdings?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a crypto-holdings record (fake — not persisted)
      operationId: create-crypto-holdings
      tags:
        - crypto-holdings
      requestBody:
        required: true
        content:
          application/json:
            schema: *a134
            example: *a135
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a134
              example: *a135
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/crypto-holdings/{id}:
    get:
      summary: Get one crypto-holdings record by id
      operationId: get-crypto-holdings-by-id
      tags:
        - crypto-holdings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a134
              example: *a135
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a134
            example: *a135
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a134
              example: *a135
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a134
              example: *a135
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/accounts:
    get:
      summary: List accounts
      operationId: list-accounts
      tags:
        - accounts
      parameters:
        - 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: &a136
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a137
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/accounts?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a accounts record (fake — not persisted)
      operationId: create-accounts
      tags:
        - accounts
      requestBody:
        required: true
        content:
          application/json:
            schema: *a136
            example: *a137
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a136
              example: *a137
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/accounts/{id}:
    get:
      summary: Get one accounts record by id
      operationId: get-accounts-by-id
      tags:
        - accounts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a136
              example: *a137
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a accounts record (fake — not persisted)
      operationId: replace-accounts
      tags:
        - accounts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a136
            example: *a137
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a136
              example: *a137
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a136
              example: *a137
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a accounts record (fake — not persisted)
      operationId: delete-accounts
      tags:
        - accounts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/transactions:
    get:
      summary: List transactions
      operationId: list-transactions
      tags:
        - transactions
      parameters:
        - 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/TransactionsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a139
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/transactions?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a transactions record (fake — not persisted)
      operationId: create-transactions
      tags:
        - transactions
      requestBody:
        required: true
        content:
          application/json:
            schema: *a138
            example: *a139
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a138
              example: *a139
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/transactions/{id}:
    get:
      summary: Get one transactions record by id
      operationId: get-transactions-by-id
      tags:
        - transactions
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a138
              example: *a139
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a transactions record (fake — not persisted)
      operationId: replace-transactions
      tags:
        - transactions
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a138
            example: *a139
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a138
              example: *a139
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a138
              example: *a139
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a transactions record (fake — not persisted)
      operationId: delete-transactions
      tags:
        - transactions
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/budgets:
    get:
      summary: List budgets
      operationId: list-budgets
      tags:
        - budgets
      parameters:
        - 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: &a140
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a141
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/budgets?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a budgets record (fake — not persisted)
      operationId: create-budgets
      tags:
        - budgets
      requestBody:
        required: true
        content:
          application/json:
            schema: *a140
            example: *a141
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a140
              example: *a141
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/budgets/{id}:
    get:
      summary: Get one budgets record by id
      operationId: get-budgets-by-id
      tags:
        - budgets
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a140
              example: *a141
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a budgets record (fake — not persisted)
      operationId: replace-budgets
      tags:
        - budgets
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a140
            example: *a141
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a140
              example: *a141
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a140
              example: *a141
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a budgets record (fake — not persisted)
      operationId: delete-budgets
      tags:
        - budgets
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/invoices:
    get:
      summary: List invoices
      operationId: list-invoices
      tags:
        - invoices
      parameters:
        - 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: &a142
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a143
                    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:
                      - 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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/invoices?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a invoices record (fake — not persisted)
      operationId: create-invoices
      tags:
        - invoices
      requestBody:
        required: true
        content:
          application/json:
            schema: *a142
            example: *a143
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a142
              example: *a143
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/invoices/{id}:
    get:
      summary: Get one invoices record by id
      operationId: get-invoices-by-id
      tags:
        - invoices
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a142
              example: *a143
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a invoices record (fake — not persisted)
      operationId: replace-invoices
      tags:
        - invoices
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a142
            example: *a143
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a142
              example: *a143
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a142
              example: *a143
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a invoices record (fake — not persisted)
      operationId: delete-invoices
      tags:
        - invoices
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/articles:
    get:
      summary: List articles
      operationId: list-articles
      tags:
        - articles
      parameters:
        - 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/ArticlesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a145
                    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:
                      - 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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/articles?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a articles record (fake — not persisted)
      operationId: create-articles
      tags:
        - articles
      requestBody:
        required: true
        content:
          application/json:
            schema: *a144
            example: *a145
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a144
              example: *a145
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/articles/{id}:
    get:
      summary: Get one articles record by id
      operationId: get-articles-by-id
      tags:
        - articles
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a144
              example: *a145
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a articles record (fake — not persisted)
      operationId: replace-articles
      tags:
        - articles
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a144
            example: *a145
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a144
              example: *a145
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a144
              example: *a145
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a articles record (fake — not persisted)
      operationId: delete-articles
      tags:
        - articles
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/videos:
    get:
      summary: List videos
      operationId: list-videos
      tags:
        - videos
      parameters:
        - 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: &a146
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a147
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/videos?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a videos record (fake — not persisted)
      operationId: create-videos
      tags:
        - videos
      requestBody:
        required: true
        content:
          application/json:
            schema: *a146
            example: *a147
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a146
              example: *a147
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/videos/{id}:
    get:
      summary: Get one videos record by id
      operationId: get-videos-by-id
      tags:
        - videos
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a146
              example: *a147
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a videos record (fake — not persisted)
      operationId: replace-videos
      tags:
        - videos
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a146
            example: *a147
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a146
              example: *a147
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a146
              example: *a147
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a videos record (fake — not persisted)
      operationId: delete-videos
      tags:
        - videos
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/podcasts:
    get:
      summary: List podcasts
      operationId: list-podcasts
      tags:
        - podcasts
      parameters:
        - 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: &a148
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a149
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/podcasts?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a podcasts record (fake — not persisted)
      operationId: create-podcasts
      tags:
        - podcasts
      requestBody:
        required: true
        content:
          application/json:
            schema: *a148
            example: *a149
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a148
              example: *a149
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/podcasts/{id}:
    get:
      summary: Get one podcasts record by id
      operationId: get-podcasts-by-id
      tags:
        - podcasts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a148
              example: *a149
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a podcasts record (fake — not persisted)
      operationId: replace-podcasts
      tags:
        - podcasts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a148
            example: *a149
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a148
              example: *a149
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a148
              example: *a149
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a podcasts record (fake — not persisted)
      operationId: delete-podcasts
      tags:
        - podcasts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/podcast-episodes:
    get:
      summary: List podcast-episodes
      operationId: list-podcast-episodes
      tags:
        - podcast-episodes
      parameters:
        - 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/PodcastEpisodesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a151
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/podcast-episodes?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a podcast-episodes record (fake — not persisted)
      operationId: create-podcast-episodes
      tags:
        - podcast-episodes
      requestBody:
        required: true
        content:
          application/json:
            schema: *a150
            example: *a151
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a150
              example: *a151
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/podcast-episodes/{id}:
    get:
      summary: Get one podcast-episodes record by id
      operationId: get-podcast-episodes-by-id
      tags:
        - podcast-episodes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a150
              example: *a151
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a150
            example: *a151
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a150
              example: *a151
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a150
              example: *a151
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/books:
    get:
      summary: List books
      operationId: list-books
      tags:
        - books
      parameters:
        - 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: &a152
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a153
                    id: 1
                    title: Coniecto caput taceo
                    slug: coniecto-caput-taceo-1
                    authors:
                      - 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:
                      - fantasy
                    rating: 2.2
                    ratingCount: 24096
                    createdAt: 2024-08-05T01:33:54.486Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/books?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a books record (fake — not persisted)
      operationId: create-books
      tags:
        - books
      requestBody:
        required: true
        content:
          application/json:
            schema: *a152
            example: *a153
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a152
              example: *a153
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/books/{id}:
    get:
      summary: Get one books record by id
      operationId: get-books-by-id
      tags:
        - books
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a152
              example: *a153
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a books record (fake — not persisted)
      operationId: replace-books
      tags:
        - books
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a152
            example: *a153
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a152
              example: *a153
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a152
              example: *a153
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a books record (fake — not persisted)
      operationId: delete-books
      tags:
        - books
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/book-favs:
    get:
      summary: List book-favs
      operationId: list-book-favs
      tags:
        - book-favs
      parameters:
        - 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: &a154
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a155
                    id: 1
                    userId: 1
                    bookId: 207
                    savedAt: 2025-05-18T16:37:52.930Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/book-favs?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a book-favs record (fake — not persisted)
      operationId: create-book-favs
      tags:
        - book-favs
      requestBody:
        required: true
        content:
          application/json:
            schema: *a154
            example: *a155
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a154
              example: *a155
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/book-favs/{id}:
    get:
      summary: Get one book-favs record by id
      operationId: get-book-favs-by-id
      tags:
        - book-favs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a154
              example: *a155
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a154
            example: *a155
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a154
              example: *a155
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a154
              example: *a155
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/movies:
    get:
      summary: List movies
      operationId: list-movies
      tags:
        - movies
      parameters:
        - 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/MoviesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a157
                    id: 1
                    title: Cunae crebro
                    slug: cunae-crebro-1
                    year: 1976
                    runtimeMinutes: 79
                    director: Kate Kovacek
                    cast:
                      - Ruben Lang III
                      - Wayne Wehner IV
                      - Nicolas Schimmel
                      - Rita Friesen
                      - Salvatore Wuckert
                      - Kimberly Roob
                      - Victoria Littel
                    genres:
                      - 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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/movies?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a movies record (fake — not persisted)
      operationId: create-movies
      tags:
        - movies
      requestBody:
        required: true
        content:
          application/json:
            schema: *a156
            example: *a157
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a156
              example: *a157
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/movies/{id}:
    get:
      summary: Get one movies record by id
      operationId: get-movies-by-id
      tags:
        - movies
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a156
              example: *a157
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a movies record (fake — not persisted)
      operationId: replace-movies
      tags:
        - movies
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a156
            example: *a157
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a156
              example: *a157
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a156
              example: *a157
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a movies record (fake — not persisted)
      operationId: delete-movies
      tags:
        - movies
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/tv-shows:
    get:
      summary: List tv-shows
      operationId: list-tv-shows
      tags:
        - tv-shows
      parameters:
        - 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: &a158
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a159
                    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:
                      - 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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/tv-shows?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a tv-shows record (fake — not persisted)
      operationId: create-tv-shows
      tags:
        - tv-shows
      requestBody:
        required: true
        content:
          application/json:
            schema: *a158
            example: *a159
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a158
              example: *a159
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/tv-shows/{id}:
    get:
      summary: Get one tv-shows record by id
      operationId: get-tv-shows-by-id
      tags:
        - tv-shows
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a158
              example: *a159
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a158
            example: *a159
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a158
              example: *a159
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a158
              example: *a159
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/tv-episodes:
    get:
      summary: List tv-episodes
      operationId: list-tv-episodes
      tags:
        - tv-episodes
      parameters:
        - 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: &a160
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a161
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/tv-episodes?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a tv-episodes record (fake — not persisted)
      operationId: create-tv-episodes
      tags:
        - tv-episodes
      requestBody:
        required: true
        content:
          application/json:
            schema: *a160
            example: *a161
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a160
              example: *a161
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/tv-episodes/{id}:
    get:
      summary: Get one tv-episodes record by id
      operationId: get-tv-episodes-by-id
      tags:
        - tv-episodes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a160
              example: *a161
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a160
            example: *a161
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a160
              example: *a161
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a160
              example: *a161
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/artists:
    get:
      summary: List artists
      operationId: list-artists
      tags:
        - artists
      parameters:
        - 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/ArtistsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a163
                    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:
                      - 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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/artists?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a artists record (fake — not persisted)
      operationId: create-artists
      tags:
        - artists
      requestBody:
        required: true
        content:
          application/json:
            schema: *a162
            example: *a163
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a162
              example: *a163
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/artists/{id}:
    get:
      summary: Get one artists record by id
      operationId: get-artists-by-id
      tags:
        - artists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a162
              example: *a163
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a artists record (fake — not persisted)
      operationId: replace-artists
      tags:
        - artists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a162
            example: *a163
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a162
              example: *a163
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a162
              example: *a163
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a artists record (fake — not persisted)
      operationId: delete-artists
      tags:
        - artists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/albums:
    get:
      summary: List albums
      operationId: list-albums
      tags:
        - albums
      parameters:
        - 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: &a164
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a165
                    id: 1
                    artistId: 1
                    title: Addo
                    slug: addo-1
                    releaseDate: 2004-09-07
                    trackCount: 9
                    durationSeconds: 3365
                    genres:
                      - soul
                      - electronic
                      - folk
                    coverUrl: https://picsum.photos/seed/album-1/500/500
                    createdAt: 2025-10-18T04:51:02.326Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/albums?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a albums record (fake — not persisted)
      operationId: create-albums
      tags:
        - albums
      requestBody:
        required: true
        content:
          application/json:
            schema: *a164
            example: *a165
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a164
              example: *a165
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/albums/{id}:
    get:
      summary: Get one albums record by id
      operationId: get-albums-by-id
      tags:
        - albums
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a164
              example: *a165
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a albums record (fake — not persisted)
      operationId: replace-albums
      tags:
        - albums
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a164
            example: *a165
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a164
              example: *a165
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a164
              example: *a165
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a albums record (fake — not persisted)
      operationId: delete-albums
      tags:
        - albums
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/songs:
    get:
      summary: List songs
      operationId: list-songs
      tags:
        - songs
      parameters:
        - 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: &a166
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a167
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/songs?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a songs record (fake — not persisted)
      operationId: create-songs
      tags:
        - songs
      requestBody:
        required: true
        content:
          application/json:
            schema: *a166
            example: *a167
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a166
              example: *a167
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/songs/{id}:
    get:
      summary: Get one songs record by id
      operationId: get-songs-by-id
      tags:
        - songs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a166
              example: *a167
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a songs record (fake — not persisted)
      operationId: replace-songs
      tags:
        - songs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a166
            example: *a167
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a166
              example: *a167
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a166
              example: *a167
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a songs record (fake — not persisted)
      operationId: delete-songs
      tags:
        - songs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/playlists:
    get:
      summary: List playlists
      operationId: list-playlists
      tags:
        - playlists
      parameters:
        - 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/PlaylistsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a169
                    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:
                      - 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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/playlists?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a playlists record (fake — not persisted)
      operationId: create-playlists
      tags:
        - playlists
      requestBody:
        required: true
        content:
          application/json:
            schema: *a168
            example: *a169
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a168
              example: *a169
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/playlists/{id}:
    get:
      summary: Get one playlists record by id
      operationId: get-playlists-by-id
      tags:
        - playlists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a168
              example: *a169
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a playlists record (fake — not persisted)
      operationId: replace-playlists
      tags:
        - playlists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a168
            example: *a169
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a168
              example: *a169
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a168
              example: *a169
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a playlists record (fake — not persisted)
      operationId: delete-playlists
      tags:
        - playlists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/exercises:
    get:
      summary: List exercises
      operationId: list-exercises
      tags:
        - exercises
      parameters:
        - 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: &a170
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a171
                    id: 1
                    name: Bench Press
                    slug: bench-press-1
                    muscleGroup: chest
                    equipment:
                      - resistance band
                    description: Astrum aliquid defaeco assentator deinde vester doloremque
                      stillicidium stabilis abeo desipio acervus tergeo voveo
                      ancilla amplexus amissio ago auctus.
                    instructions:
                      - 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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/exercises?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a exercises record (fake — not persisted)
      operationId: create-exercises
      tags:
        - exercises
      requestBody:
        required: true
        content:
          application/json:
            schema: *a170
            example: *a171
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a170
              example: *a171
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/exercises/{id}:
    get:
      summary: Get one exercises record by id
      operationId: get-exercises-by-id
      tags:
        - exercises
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a170
              example: *a171
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a exercises record (fake — not persisted)
      operationId: replace-exercises
      tags:
        - exercises
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a170
            example: *a171
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a170
              example: *a171
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a170
              example: *a171
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a exercises record (fake — not persisted)
      operationId: delete-exercises
      tags:
        - exercises
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/workouts:
    get:
      summary: List workouts
      operationId: list-workouts
      tags:
        - workouts
      parameters:
        - 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: &a172
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a173
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/workouts?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a workouts record (fake — not persisted)
      operationId: create-workouts
      tags:
        - workouts
      requestBody:
        required: true
        content:
          application/json:
            schema: *a172
            example: *a173
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a172
              example: *a173
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/workouts/{id}:
    get:
      summary: Get one workouts record by id
      operationId: get-workouts-by-id
      tags:
        - workouts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a172
              example: *a173
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a workouts record (fake — not persisted)
      operationId: replace-workouts
      tags:
        - workouts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a172
            example: *a173
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a172
              example: *a173
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a172
              example: *a173
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a workouts record (fake — not persisted)
      operationId: delete-workouts
      tags:
        - workouts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/meals:
    get:
      summary: List meals
      operationId: list-meals
      tags:
        - meals
      parameters:
        - 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/MealsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a175
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/meals?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a meals record (fake — not persisted)
      operationId: create-meals
      tags:
        - meals
      requestBody:
        required: true
        content:
          application/json:
            schema: *a174
            example: *a175
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a174
              example: *a175
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/meals/{id}:
    get:
      summary: Get one meals record by id
      operationId: get-meals-by-id
      tags:
        - meals
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a174
              example: *a175
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a meals record (fake — not persisted)
      operationId: replace-meals
      tags:
        - meals
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a174
            example: *a175
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a174
              example: *a175
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a174
              example: *a175
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a meals record (fake — not persisted)
      operationId: delete-meals
      tags:
        - meals
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/nutrition-logs:
    get:
      summary: List nutrition-logs
      operationId: list-nutrition-logs
      tags:
        - nutrition-logs
      parameters:
        - 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: &a176
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a177
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/nutrition-logs?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a nutrition-logs record (fake — not persisted)
      operationId: create-nutrition-logs
      tags:
        - nutrition-logs
      requestBody:
        required: true
        content:
          application/json:
            schema: *a176
            example: *a177
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a176
              example: *a177
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/nutrition-logs/{id}:
    get:
      summary: Get one nutrition-logs record by id
      operationId: get-nutrition-logs-by-id
      tags:
        - nutrition-logs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a176
              example: *a177
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a176
            example: *a177
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a176
              example: *a177
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a176
              example: *a177
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/goals:
    get:
      summary: List goals
      operationId: list-goals
      tags:
        - goals
      parameters:
        - 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: &a178
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a179
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/goals?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a goals record (fake — not persisted)
      operationId: create-goals
      tags:
        - goals
      requestBody:
        required: true
        content:
          application/json:
            schema: *a178
            example: *a179
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a178
              example: *a179
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/goals/{id}:
    get:
      summary: Get one goals record by id
      operationId: get-goals-by-id
      tags:
        - goals
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a178
              example: *a179
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a goals record (fake — not persisted)
      operationId: replace-goals
      tags:
        - goals
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a178
            example: *a179
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a178
              example: *a179
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a178
              example: *a179
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a goals record (fake — not persisted)
      operationId: delete-goals
      tags:
        - goals
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/measurements:
    get:
      summary: List measurements
      operationId: list-measurements
      tags:
        - measurements
      parameters:
        - 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/MeasurementsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a181
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/measurements?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a measurements record (fake — not persisted)
      operationId: create-measurements
      tags:
        - measurements
      requestBody:
        required: true
        content:
          application/json:
            schema: *a180
            example: *a181
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a180
              example: *a181
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/measurements/{id}:
    get:
      summary: Get one measurements record by id
      operationId: get-measurements-by-id
      tags:
        - measurements
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a180
              example: *a181
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a measurements record (fake — not persisted)
      operationId: replace-measurements
      tags:
        - measurements
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a180
            example: *a181
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a180
              example: *a181
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a180
              example: *a181
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a measurements record (fake — not persisted)
      operationId: delete-measurements
      tags:
        - measurements
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/sleep-entries:
    get:
      summary: List sleep-entries
      operationId: list-sleep-entries
      tags:
        - sleep-entries
      parameters:
        - 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: &a182
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a183
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/sleep-entries?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a sleep-entries record (fake — not persisted)
      operationId: create-sleep-entries
      tags:
        - sleep-entries
      requestBody:
        required: true
        content:
          application/json:
            schema: *a182
            example: *a183
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a182
              example: *a183
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/sleep-entries/{id}:
    get:
      summary: Get one sleep-entries record by id
      operationId: get-sleep-entries-by-id
      tags:
        - sleep-entries
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a182
              example: *a183
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a182
            example: *a183
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a182
              example: *a183
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a182
              example: *a183
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/courses:
    get:
      summary: List courses
      operationId: list-courses
      tags:
        - courses
      parameters:
        - 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: &a184
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a185
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/courses?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a courses record (fake — not persisted)
      operationId: create-courses
      tags:
        - courses
      requestBody:
        required: true
        content:
          application/json:
            schema: *a184
            example: *a185
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a184
              example: *a185
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/courses/{id}:
    get:
      summary: Get one courses record by id
      operationId: get-courses-by-id
      tags:
        - courses
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a184
              example: *a185
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a courses record (fake — not persisted)
      operationId: replace-courses
      tags:
        - courses
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a184
            example: *a185
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a184
              example: *a185
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a184
              example: *a185
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a courses record (fake — not persisted)
      operationId: delete-courses
      tags:
        - courses
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/lessons:
    get:
      summary: List lessons
      operationId: list-lessons
      tags:
        - lessons
      parameters:
        - 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/LessonsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a187
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/lessons?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a lessons record (fake — not persisted)
      operationId: create-lessons
      tags:
        - lessons
      requestBody:
        required: true
        content:
          application/json:
            schema: *a186
            example: *a187
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a186
              example: *a187
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/lessons/{id}:
    get:
      summary: Get one lessons record by id
      operationId: get-lessons-by-id
      tags:
        - lessons
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a186
              example: *a187
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a lessons record (fake — not persisted)
      operationId: replace-lessons
      tags:
        - lessons
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a186
            example: *a187
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a186
              example: *a187
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a186
              example: *a187
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a lessons record (fake — not persisted)
      operationId: delete-lessons
      tags:
        - lessons
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/enrollments:
    get:
      summary: List enrollments
      operationId: list-enrollments
      tags:
        - enrollments
      parameters:
        - 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: &a188
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a189
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/enrollments?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a enrollments record (fake — not persisted)
      operationId: create-enrollments
      tags:
        - enrollments
      requestBody:
        required: true
        content:
          application/json:
            schema: *a188
            example: *a189
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a188
              example: *a189
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/enrollments/{id}:
    get:
      summary: Get one enrollments record by id
      operationId: get-enrollments-by-id
      tags:
        - enrollments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a188
              example: *a189
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a enrollments record (fake — not persisted)
      operationId: replace-enrollments
      tags:
        - enrollments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a188
            example: *a189
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a188
              example: *a189
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a188
              example: *a189
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a enrollments record (fake — not persisted)
      operationId: delete-enrollments
      tags:
        - enrollments
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/quizzes:
    get:
      summary: List quizzes
      operationId: list-quizzes
      tags:
        - quizzes
      parameters:
        - 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: &a190
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a191
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/quizzes?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a quizzes record (fake — not persisted)
      operationId: create-quizzes
      tags:
        - quizzes
      requestBody:
        required: true
        content:
          application/json:
            schema: *a190
            example: *a191
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a190
              example: *a191
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/quizzes/{id}:
    get:
      summary: Get one quizzes record by id
      operationId: get-quizzes-by-id
      tags:
        - quizzes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a190
              example: *a191
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a quizzes record (fake — not persisted)
      operationId: replace-quizzes
      tags:
        - quizzes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a190
            example: *a191
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a190
              example: *a191
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a190
              example: *a191
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a quizzes record (fake — not persisted)
      operationId: delete-quizzes
      tags:
        - quizzes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/quiz-questions:
    get:
      summary: List quiz-questions
      operationId: list-quiz-questions
      tags:
        - quiz-questions
      parameters:
        - 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/QuizQuestionsRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a193
                    id: 1
                    quizId: 1
                    text: Correptius doloribus consuasor magnam suffragium patruus incidunt crur
                      allatus campana absorbeo?
                    kind: multiple_choice
                    options:
                      - centum
                      - tabernus amaritudo
                      - depopulo
                      - aliqua verecundia
                    correctAnswer: tabernus amaritudo
                    sortOrder: 0
                    createdAt: 2024-08-14T04:21:59.102Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/quiz-questions?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a quiz-questions record (fake — not persisted)
      operationId: create-quiz-questions
      tags:
        - quiz-questions
      requestBody:
        required: true
        content:
          application/json:
            schema: *a192
            example: *a193
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a192
              example: *a193
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/quiz-questions/{id}:
    get:
      summary: Get one quiz-questions record by id
      operationId: get-quiz-questions-by-id
      tags:
        - quiz-questions
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a192
              example: *a193
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a192
            example: *a193
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a192
              example: *a193
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a192
              example: *a193
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/flashcards:
    get:
      summary: List flashcards
      operationId: list-flashcards
      tags:
        - flashcards
      parameters:
        - 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: &a194
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a195
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/flashcards?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a flashcards record (fake — not persisted)
      operationId: create-flashcards
      tags:
        - flashcards
      requestBody:
        required: true
        content:
          application/json:
            schema: *a194
            example: *a195
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a194
              example: *a195
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/flashcards/{id}:
    get:
      summary: Get one flashcards record by id
      operationId: get-flashcards-by-id
      tags:
        - flashcards
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a194
              example: *a195
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a flashcards record (fake — not persisted)
      operationId: replace-flashcards
      tags:
        - flashcards
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a194
            example: *a195
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a194
              example: *a195
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a194
              example: *a195
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a flashcards record (fake — not persisted)
      operationId: delete-flashcards
      tags:
        - flashcards
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/progress:
    get:
      summary: List progress
      operationId: list-progress
      tags:
        - progress
      parameters:
        - 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: &a196
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a197
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/progress?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a progress record (fake — not persisted)
      operationId: create-progress
      tags:
        - progress
      requestBody:
        required: true
        content:
          application/json:
            schema: *a196
            example: *a197
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a196
              example: *a197
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/progress/{id}:
    get:
      summary: Get one progress record by id
      operationId: get-progress-by-id
      tags:
        - progress
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a196
              example: *a197
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a progress record (fake — not persisted)
      operationId: replace-progress
      tags:
        - progress
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a196
            example: *a197
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a196
              example: *a197
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a196
              example: *a197
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a progress record (fake — not persisted)
      operationId: delete-progress
      tags:
        - progress
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/companies:
    get:
      summary: List companies
      operationId: list-companies
      tags:
        - companies
      parameters:
        - 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/CompaniesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a199
                    id: 1
                    name: Schroeder Inc
                    slug: schroeder-inc-1
                    description: Public-key analyzing function
                    industryId: 5
                    headquartersCountryAlpha2: FI
                    employeeCount: 48076
                    foundedYear: 2020
                    websiteUrl: https://www.schroeder-inc.com
                    logoUrl: https://picsum.photos/seed/company-1/200/200
                    isHiring: true
                    createdAt: 2015-04-14T18:56:49.601Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/companies?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a companies record (fake — not persisted)
      operationId: create-companies
      tags:
        - companies
      requestBody:
        required: true
        content:
          application/json:
            schema: *a198
            example: *a199
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a198
              example: *a199
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/companies/{id}:
    get:
      summary: Get one companies record by id
      operationId: get-companies-by-id
      tags:
        - companies
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a198
              example: *a199
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a companies record (fake — not persisted)
      operationId: replace-companies
      tags:
        - companies
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a198
            example: *a199
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a198
              example: *a199
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a198
              example: *a199
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a companies record (fake — not persisted)
      operationId: delete-companies
      tags:
        - companies
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/jobs:
    get:
      summary: List jobs
      operationId: list-jobs
      tags:
        - jobs
      parameters:
        - 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: &a200
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a201
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/jobs?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a jobs record (fake — not persisted)
      operationId: create-jobs
      tags:
        - jobs
      requestBody:
        required: true
        content:
          application/json:
            schema: *a200
            example: *a201
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a200
              example: *a201
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/jobs/{id}:
    get:
      summary: Get one jobs record by id
      operationId: get-jobs-by-id
      tags:
        - jobs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a200
              example: *a201
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a jobs record (fake — not persisted)
      operationId: replace-jobs
      tags:
        - jobs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a200
            example: *a201
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a200
              example: *a201
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a200
              example: *a201
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a jobs record (fake — not persisted)
      operationId: delete-jobs
      tags:
        - jobs
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/applications:
    get:
      summary: List applications
      operationId: list-applications
      tags:
        - applications
      parameters:
        - 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: &a202
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a203
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/applications?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a applications record (fake — not persisted)
      operationId: create-applications
      tags:
        - applications
      requestBody:
        required: true
        content:
          application/json:
            schema: *a202
            example: *a203
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a202
              example: *a203
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/applications/{id}:
    get:
      summary: Get one applications record by id
      operationId: get-applications-by-id
      tags:
        - applications
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a202
              example: *a203
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a applications record (fake — not persisted)
      operationId: replace-applications
      tags:
        - applications
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a202
            example: *a203
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a202
              example: *a203
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a202
              example: *a203
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a applications record (fake — not persisted)
      operationId: delete-applications
      tags:
        - applications
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/resumes:
    get:
      summary: List resumes
      operationId: list-resumes
      tags:
        - resumes
      parameters:
        - 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/ResumesRecord"
                  meta:
                    type: object
                    properties:
                      total:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                      totalPages:
                        type: integer
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a205
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/resumes?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a resumes record (fake — not persisted)
      operationId: create-resumes
      tags:
        - resumes
      requestBody:
        required: true
        content:
          application/json:
            schema: *a204
            example: *a205
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a204
              example: *a205
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/resumes/{id}:
    get:
      summary: Get one resumes record by id
      operationId: get-resumes-by-id
      tags:
        - resumes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a204
              example: *a205
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a resumes record (fake — not persisted)
      operationId: replace-resumes
      tags:
        - resumes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a204
            example: *a205
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a204
              example: *a205
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a204
              example: *a205
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a resumes record (fake — not persisted)
      operationId: delete-resumes
      tags:
        - resumes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/agents:
    get:
      summary: List agents
      operationId: list-agents
      tags:
        - agents
      parameters:
        - 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: &a206
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a207
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/agents?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a agents record (fake — not persisted)
      operationId: create-agents
      tags:
        - agents
      requestBody:
        required: true
        content:
          application/json:
            schema: *a206
            example: *a207
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a206
              example: *a207
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/agents/{id}:
    get:
      summary: Get one agents record by id
      operationId: get-agents-by-id
      tags:
        - agents
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a206
              example: *a207
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a agents record (fake — not persisted)
      operationId: replace-agents
      tags:
        - agents
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a206
            example: *a207
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a206
              example: *a207
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a206
              example: *a207
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a agents record (fake — not persisted)
      operationId: delete-agents
      tags:
        - agents
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/listings:
    get:
      summary: List listings
      operationId: list-listings
      tags:
        - listings
      parameters:
        - 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: &a208
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a209
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/listings?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a listings record (fake — not persisted)
      operationId: create-listings
      tags:
        - listings
      requestBody:
        required: true
        content:
          application/json:
            schema: *a208
            example: *a209
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a208
              example: *a209
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/listings/{id}:
    get:
      summary: Get one listings record by id
      operationId: get-listings-by-id
      tags:
        - listings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a208
              example: *a209
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a listings record (fake — not persisted)
      operationId: replace-listings
      tags:
        - listings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a208
            example: *a209
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a208
              example: *a209
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a208
              example: *a209
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a listings record (fake — not persisted)
      operationId: delete-listings
      tags:
        - listings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/showings:
    get:
      summary: List showings
      operationId: list-showings
      tags:
        - showings
      parameters:
        - 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: &a210
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a211
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/showings?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a showings record (fake — not persisted)
      operationId: create-showings
      tags:
        - showings
      requestBody:
        required: true
        content:
          application/json:
            schema: *a210
            example: *a211
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a210
              example: *a211
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/showings/{id}:
    get:
      summary: Get one showings record by id
      operationId: get-showings-by-id
      tags:
        - showings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a210
              example: *a211
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a showings record (fake — not persisted)
      operationId: replace-showings
      tags:
        - showings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a210
            example: *a211
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a210
              example: *a211
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a210
              example: *a211
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a showings record (fake — not persisted)
      operationId: delete-showings
      tags:
        - showings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/pet-breeds:
    get:
      summary: List pet-breeds
      operationId: list-pet-breeds
      tags:
        - pet-breeds
      parameters:
        - 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: &a212
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a213
                    id: 1
                    name: Labrador Retriever
                    slug: labrador-retriever
                    species: dog
                    origin: Canada
                    temperament:
                      - Friendly
                      - Active
                      - Outgoing
                    lifeExpectancyYears: 12
                    isHypoallergenic: false
                    createdAt: 2025-09-14T00:42:36.016Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/pet-breeds?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a pet-breeds record (fake — not persisted)
      operationId: create-pet-breeds
      tags:
        - pet-breeds
      requestBody:
        required: true
        content:
          application/json:
            schema: *a212
            example: *a213
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a212
              example: *a213
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/pet-breeds/{id}:
    get:
      summary: Get one pet-breeds record by id
      operationId: get-pet-breeds-by-id
      tags:
        - pet-breeds
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a212
              example: *a213
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a212
            example: *a213
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a212
              example: *a213
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a212
              example: *a213
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/pets:
    get:
      summary: List pets
      operationId: list-pets
      tags:
        - pets
      parameters:
        - 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: &a214
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a215
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/pets?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a pets record (fake — not persisted)
      operationId: create-pets
      tags:
        - pets
      requestBody:
        required: true
        content:
          application/json:
            schema: *a214
            example: *a215
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a214
              example: *a215
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/pets/{id}:
    get:
      summary: Get one pets record by id
      operationId: get-pets-by-id
      tags:
        - pets
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a214
              example: *a215
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a pets record (fake — not persisted)
      operationId: replace-pets
      tags:
        - pets
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a214
            example: *a215
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a214
              example: *a215
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a214
              example: *a215
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a pets record (fake — not persisted)
      operationId: delete-pets
      tags:
        - pets
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/cars:
    get:
      summary: List cars
      operationId: list-cars
      tags:
        - cars
      parameters:
        - 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: &a216
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a217
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/cars?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a cars record (fake — not persisted)
      operationId: create-cars
      tags:
        - cars
      requestBody:
        required: true
        content:
          application/json:
            schema: *a216
            example: *a217
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a216
              example: *a217
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/cars/{id}:
    get:
      summary: Get one cars record by id
      operationId: get-cars-by-id
      tags:
        - cars
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a216
              example: *a217
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a cars record (fake — not persisted)
      operationId: replace-cars
      tags:
        - cars
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a216
            example: *a217
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a216
              example: *a217
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a216
              example: *a217
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a cars record (fake — not persisted)
      operationId: delete-cars
      tags:
        - cars
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/cars-saved:
    get:
      summary: List cars-saved
      operationId: list-cars-saved
      tags:
        - cars-saved
      parameters:
        - 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: &a218
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a219
                    id: 1
                    userId: 1
                    carId: 46
                    savedAt: 2025-06-12T10:13:43.904Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/cars-saved?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a cars-saved record (fake — not persisted)
      operationId: create-cars-saved
      tags:
        - cars-saved
      requestBody:
        required: true
        content:
          application/json:
            schema: *a218
            example: *a219
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a218
              example: *a219
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/cars-saved/{id}:
    get:
      summary: Get one cars-saved record by id
      operationId: get-cars-saved-by-id
      tags:
        - cars-saved
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a218
              example: *a219
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a218
            example: *a219
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a218
              example: *a219
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a218
              example: *a219
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/sneakers:
    get:
      summary: List sneakers
      operationId: list-sneakers
      tags:
        - sneakers
      parameters:
        - 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: &a220
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a221
                    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:
                      - 3.5Y
                      - 4Y
                      - 4.5Y
                      - 5Y
                      - 5.5Y
                      - 6Y
                      - 6.5Y
                      - 7Y
                    gender: youth
                    createdAt: 2023-07-14T03:55:17.628Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/sneakers?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a sneakers record (fake — not persisted)
      operationId: create-sneakers
      tags:
        - sneakers
      requestBody:
        required: true
        content:
          application/json:
            schema: *a220
            example: *a221
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a220
              example: *a221
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/sneakers/{id}:
    get:
      summary: Get one sneakers record by id
      operationId: get-sneakers-by-id
      tags:
        - sneakers
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a220
              example: *a221
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a sneakers record (fake — not persisted)
      operationId: replace-sneakers
      tags:
        - sneakers
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a220
            example: *a221
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a220
              example: *a221
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a220
              example: *a221
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a sneakers record (fake — not persisted)
      operationId: delete-sneakers
      tags:
        - sneakers
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/places:
    get:
      summary: List places
      operationId: list-places
      tags:
        - places
      parameters:
        - 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: &a222
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a223
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/places?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a places record (fake — not persisted)
      operationId: create-places
      tags:
        - places
      requestBody:
        required: true
        content:
          application/json:
            schema: *a222
            example: *a223
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a222
              example: *a223
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/places/{id}:
    get:
      summary: Get one places record by id
      operationId: get-places-by-id
      tags:
        - places
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a222
              example: *a223
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a places record (fake — not persisted)
      operationId: replace-places
      tags:
        - places
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a222
            example: *a223
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a222
              example: *a223
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a222
              example: *a223
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a places record (fake — not persisted)
      operationId: delete-places
      tags:
        - places
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/people:
    get:
      summary: List people
      operationId: list-people
      tags:
        - people
      parameters:
        - 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: &a224
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a225
                    id: 1
                    fullName: Ricardo Conn
                    firstName: Ricardo
                    lastName: Conn
                    email: ricardo.conn-1@example.com
                    phone: (589) 958-7500
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/people?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a people record (fake — not persisted)
      operationId: create-people
      tags:
        - people
      requestBody:
        required: true
        content:
          application/json:
            schema: *a224
            example: *a225
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a224
              example: *a225
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/people/{id}:
    get:
      summary: Get one people record by id
      operationId: get-people-by-id
      tags:
        - people
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a224
              example: *a225
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a people record (fake — not persisted)
      operationId: replace-people
      tags:
        - people
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a224
            example: *a225
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a224
              example: *a225
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a224
              example: *a225
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a people record (fake — not persisted)
      operationId: delete-people
      tags:
        - people
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/matchmaking:
    get:
      summary: List matchmaking
      operationId: list-matchmaking
      tags:
        - matchmaking
      parameters:
        - 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: &a226
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a227
                    id: 1
                    userId: 170
                    candidateUserId: 28
                    matchScorePercent: 65
                    commonInterests:
                      - Dancing
                    status: pending
                    createdAt: 2025-08-29T11:17:19.015Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/matchmaking?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a matchmaking record (fake — not persisted)
      operationId: create-matchmaking
      tags:
        - matchmaking
      requestBody:
        required: true
        content:
          application/json:
            schema: *a226
            example: *a227
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a226
              example: *a227
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/matchmaking/{id}:
    get:
      summary: Get one matchmaking record by id
      operationId: get-matchmaking-by-id
      tags:
        - matchmaking
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a226
              example: *a227
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a matchmaking record (fake — not persisted)
      operationId: replace-matchmaking
      tags:
        - matchmaking
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a226
            example: *a227
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a226
              example: *a227
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a226
              example: *a227
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a matchmaking record (fake — not persisted)
      operationId: delete-matchmaking
      tags:
        - matchmaking
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/stem-figures:
    get:
      summary: List stem-figures
      operationId: list-stem-figures
      tags:
        - stem-figures
      parameters:
        - 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: &a228
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a229
                    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:
                      - Theory of relativity
                      - Nobel Prize in Physics 1921
                    createdAt: 2024-07-15T10:09:04.988Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/stem-figures?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a stem-figures record (fake — not persisted)
      operationId: create-stem-figures
      tags:
        - stem-figures
      requestBody:
        required: true
        content:
          application/json:
            schema: *a228
            example: *a229
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a228
              example: *a229
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/stem-figures/{id}:
    get:
      summary: Get one stem-figures record by id
      operationId: get-stem-figures-by-id
      tags:
        - stem-figures
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a228
              example: *a229
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema: *a228
            example: *a229
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a228
              example: *a229
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a228
              example: *a229
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    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
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/authors:
    get:
      summary: List authors
      operationId: list-authors
      tags:
        - authors
      parameters:
        - 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: &a230
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a231
                    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:
                      - Drama
                      - Poetry
                      - Tragedy
                    notableWorks:
                      - Hamlet
                      - Macbeth
                      - Romeo and Juliet
                    imageUrl: https://picsum.photos/seed/author-1/600/600
                    createdAt: 2024-09-02T12:28:04.676Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/authors?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a authors record (fake — not persisted)
      operationId: create-authors
      tags:
        - authors
      requestBody:
        required: true
        content:
          application/json:
            schema: *a230
            example: *a231
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a230
              example: *a231
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/authors/{id}:
    get:
      summary: Get one authors record by id
      operationId: get-authors-by-id
      tags:
        - authors
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a230
              example: *a231
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a authors record (fake — not persisted)
      operationId: replace-authors
      tags:
        - authors
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a230
            example: *a231
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a230
              example: *a231
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a230
              example: *a231
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a authors record (fake — not persisted)
      operationId: delete-authors
      tags:
        - authors
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/activists:
    get:
      summary: List activists
      operationId: list-activists
      tags:
        - activists
      parameters:
        - 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: &a232
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a233
                    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:
                      - Anti-apartheid
                      - Civil rights
                    country: South Africa
                    imageUrl: https://picsum.photos/seed/activist-1/600/600
                    accomplishments:
                      - First Black president of South Africa
                      - Nobel Peace Prize 1993
                    createdAt: 2025-07-07T17:21:30.815Z
                meta:
                  total: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/activists?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a activists record (fake — not persisted)
      operationId: create-activists
      tags:
        - activists
      requestBody:
        required: true
        content:
          application/json:
            schema: *a232
            example: *a233
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a232
              example: *a233
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/activists/{id}:
    get:
      summary: Get one activists record by id
      operationId: get-activists-by-id
      tags:
        - activists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a232
              example: *a233
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a activists record (fake — not persisted)
      operationId: replace-activists
      tags:
        - activists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a232
            example: *a233
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a232
              example: *a233
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a232
              example: *a233
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a activists record (fake — not persisted)
      operationId: delete-activists
      tags:
        - activists
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/quotes:
    get:
      summary: List quotes
      operationId: list-quotes
      tags:
        - quotes
      parameters:
        - 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: &a234
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a235
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/quotes?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a quotes record (fake — not persisted)
      operationId: create-quotes
      tags:
        - quotes
      requestBody:
        required: true
        content:
          application/json:
            schema: *a234
            example: *a235
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a234
              example: *a235
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/quotes/{id}:
    get:
      summary: Get one quotes record by id
      operationId: get-quotes-by-id
      tags:
        - quotes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a234
              example: *a235
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a quotes record (fake — not persisted)
      operationId: replace-quotes
      tags:
        - quotes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a234
            example: *a235
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a234
              example: *a235
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a234
              example: *a235
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a quotes record (fake — not persisted)
      operationId: delete-quotes
      tags:
        - quotes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
  /api/v1/jokes:
    get:
      summary: List jokes
      operationId: list-jokes
      tags:
        - jokes
      parameters:
        - 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: &a236
                      $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
                      next:
                        type: string
                        nullable: true
                      prev:
                        type: string
                        nullable: true
              example:
                data:
                  - &a237
                    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: 1
                  page: 1
                  limit: 20
                  totalPages: 1
                links:
                  self: /api/v1/jokes?_page=1&_limit=20
                  next: null
                  prev: null
    post:
      summary: Create a jokes record (fake — not persisted)
      operationId: create-jokes
      tags:
        - jokes
      requestBody:
        required: true
        content:
          application/json:
            schema: *a236
            example: *a237
      responses:
        "201":
          description: Created (response only; data is not persisted)
          content:
            application/json:
              schema: *a236
              example: *a237
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
  /api/v1/jokes/{id}:
    get:
      summary: Get one jokes record by id
      operationId: get-jokes-by-id
      tags:
        - jokes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: *a236
              example: *a237
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    put:
      summary: Replace a jokes record (fake — not persisted)
      operationId: replace-jokes
      tags:
        - jokes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema: *a236
            example: *a237
      responses:
        "200":
          description: Replaced
          content:
            application/json:
              schema: *a236
              example: *a237
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
        "422":
          description: Validation failed
          content:
            application/json:
              schema: *a3
    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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          description: Merged
          content:
            application/json:
              schema: *a236
              example: *a237
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
    delete:
      summary: Delete a jokes record (fake — not persisted)
      operationId: delete-jokes
      tags:
        - jokes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        "204":
          description: Deleted (no content)
        "404":
          description: Not found
          content:
            application/json:
              schema: *a3
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
    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
    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
    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:
            - 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
    OrdersRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        status:
          type: string
          enum:
            - 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
    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
    RestaurantsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        cuisine:
          type: string
          enum:
            - italian
            - japanese
            - mexican
            - indian
            - thai
            - french
            - american
            - chinese
            - mediterranean
            - vietnamese
            - korean
            - ethiopian
        priceRange:
          type: string
          enum:
            - $
            - $$
            - $$$
            - $$$$
        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
    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
    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:
            - italian
            - japanese
            - mexican
            - indian
            - thai
            - french
            - american
            - chinese
            - mediterranean
            - vietnamese
        difficulty:
          type: string
          enum:
            - easy
            - medium
            - hard
        prepMinutes:
          type: integer
        cookMinutes:
          type: integer
        servings:
          type: integer
        ingredients:
          type: array
          items:
            type: string
        instructions:
          type: array
          items:
            type: string
        tags:
          type: array
          items:
            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
    CommentsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        targetType:
          type: string
          enum:
            - 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
    ReactionsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        targetType:
          type: string
          enum:
            - post
            - product
            - comment
            - recipe
            - restaurant
        targetId:
          type: integer
        type:
          type: string
          enum:
            - like
            - love
            - laugh
            - wow
            - sad
            - angry
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - targetType
        - targetId
        - type
        - createdAt
    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
    LanguagesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        code:
          type: string
        name:
          type: string
        nativeName:
          type: string
        direction:
          type: string
          enum:
            - ltr
            - rtl
      required:
        - id
        - code
        - name
        - nativeName
        - direction
    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
    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
    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
    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
    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
    NotificationsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        type:
          type: string
          enum:
            - 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
    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
    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
    ActivitiesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        verb:
          type: string
          enum:
            - created
            - updated
            - deleted
            - liked
            - commented
            - shared
        targetType:
          type: string
          enum:
            - post
            - product
            - comment
            - recipe
            - restaurant
        targetId:
          type: integer
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - verb
        - targetType
        - targetId
        - createdAt
    AttachmentsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        targetType:
          type: string
          enum:
            - 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
    HashtagsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        tag:
          type: string
        useCount:
          type: integer
      required:
        - id
        - tag
        - useCount
    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
    GroupMembersRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        groupId:
          type: integer
        userId:
          type: integer
        role:
          type: string
          enum:
            - owner
            - admin
            - moderator
            - member
        joinedAt:
          type: string
          format: date-time
      required:
        - id
        - groupId
        - userId
        - role
        - joinedAt
    StoriesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        mediaUrl:
          type: string
          format: uri
        mediaType:
          type: string
          enum:
            - 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
    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
    EventRsvpsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        eventId:
          type: integer
        userId:
          type: integer
        status:
          type: string
          enum:
            - going
            - maybe
            - declined
        respondedAt:
          type: string
          format: date-time
      required:
        - id
        - eventId
        - userId
        - status
        - respondedAt
    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
    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
    AddressesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        label:
          type: string
          enum:
            - 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
    CouponsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        code:
          type: string
        discountType:
          type: string
          enum:
            - 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
    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
    WishlistsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        name:
          type: string
        isPublic:
          type: boolean
        productIds:
          type: array
          items:
            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
    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
    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
    ShipmentsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        orderId:
          type: integer
        carrier:
          type: string
          enum:
            - ups
            - usps
            - fedex
            - dhl
        trackingNumber:
          type: string
        status:
          type: string
          enum:
            - 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
    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
    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:
            - 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
    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:
            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
    PropertiesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        type:
          type: string
          enum:
            - 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
    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
    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:
            - 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
    BookingsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        kind:
          type: string
          enum:
            - flight
            - hotel
            - property
        referenceId:
          type: integer
        checkInAt:
          type: string
          format: date-time
        checkOutAt:
          type: string
          format: date-time
        status:
          type: string
          enum:
            - 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
    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:
            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
    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
    IngredientsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        foodCategoryId:
          type: integer
          nullable: true
        unit:
          type: string
          enum:
            - g
            - kg
            - ml
            - l
            - cup
            - tbsp
            - tsp
            - oz
            - lb
            - piece
        defaultPricePerUnit:
          type: number
        currency:
          type: string
      required:
        - id
        - name
        - slug
        - foodCategoryId
        - unit
        - defaultPricePerUnit
        - currency
    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
    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
    FoodOrdersRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        restaurantId:
          type: integer
        items:
          type: array
          items:
            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:
            - 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
    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:
            - 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
    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
    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:
            - 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
    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:
            - todo
            - in_progress
            - blocked
            - in_review
            - done
        priority:
          type: string
          enum:
            - 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
    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
    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
    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
    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:
            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
    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
    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
    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
    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
    StocksRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        symbol:
          type: string
        name:
          type: string
        exchange:
          type: string
          enum:
            - 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
    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
    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
    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
    AccountsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        name:
          type: string
        type:
          type: string
          enum:
            - 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
    TransactionsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        accountId:
          type: integer
        kind:
          type: string
          enum:
            - deposit
            - withdrawal
            - transfer
            - payment
            - fee
            - interest
            - refund
        amount:
          type: number
        currency:
          type: string
        description:
          type: string
        status:
          type: string
          enum:
            - 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
    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:
            - 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
    InvoicesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        fromUserId:
          type: integer
        toUserId:
          type: integer
        invoiceNumber:
          type: string
        status:
          type: string
          enum:
            - 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:
            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
    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:
            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
    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
    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:
            - 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
    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
    BooksRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        title:
          type: string
        slug:
          type: string
        authors:
          type: array
          items:
            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:
            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
    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
    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:
            type: string
        genres:
          type: array
          items:
            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
    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:
            type: string
        language:
          type: string
        posterUrl:
          type: string
          format: uri
        rating:
          type: number
        ratingCount:
          type: integer
        status:
          type: string
          enum:
            - 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
    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
    ArtistsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        bio:
          type: string
        genres:
          type: array
          items:
            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
    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:
            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
    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
    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:
            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
    ExercisesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        muscleGroup:
          type: string
          enum:
            - chest
            - back
            - legs
            - shoulders
            - arms
            - core
            - full_body
            - cardio
        equipment:
          type: array
          items:
            type: string
        description:
          type: string
        instructions:
          type: array
          items:
            type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - name
        - slug
        - muscleGroup
        - equipment
        - description
        - instructions
        - createdAt
    WorkoutsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        kind:
          type: string
          enum:
            - cardio
            - strength
            - flexibility
            - sports
            - mixed
        name:
          type: string
        durationMinutes:
          type: integer
        caloriesBurned:
          type: integer
        intensity:
          type: string
          enum:
            - 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
    MealsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        name:
          type: string
        kind:
          type: string
          enum:
            - 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
    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
    GoalsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        name:
          type: string
        category:
          type: string
          enum:
            - 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
    MeasurementsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        kind:
          type: string
          enum:
            - 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
    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
    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:
            - programming
            - design
            - business
            - marketing
            - data
            - music
            - photography
            - writing
        difficulty:
          type: string
          enum:
            - 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
    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
    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
    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
    QuizQuestionsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        quizId:
          type: integer
        text:
          type: string
        kind:
          type: string
          enum:
            - multiple_choice
            - true_false
            - short_answer
        options:
          type: array
          items:
            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
    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:
            - 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
    ProgressRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        courseId:
          type: integer
        lessonId:
          type: integer
          nullable: true
        state:
          type: string
          enum:
            - 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
    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
    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:
            - full_time
            - part_time
            - contract
            - internship
            - temporary
        locationType:
          type: string
          enum:
            - 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
    ApplicationsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        jobId:
          type: integer
        status:
          type: string
          enum:
            - 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
    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
    AgentsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        brokerage:
          type: string
        licenseNumber:
          type: string
        specialty:
          type: string
          enum:
            - 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
    ListingsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        agentUserId:
          type: integer
        propertyType:
          type: string
          enum:
            - 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:
            - 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
    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:
            - scheduled
            - completed
            - cancelled
            - no_show
        notes:
          type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - listingId
        - prospectUserId
        - scheduledAt
        - status
        - notes
        - createdAt
    PetBreedsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        species:
          type: string
          enum:
            - dog
            - cat
            - bird
            - fish
            - reptile
            - rabbit
            - other
        origin:
          type: string
        temperament:
          type: array
          items:
            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
    PetsRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        ownerUserId:
          type: integer
        name:
          type: string
        species:
          type: string
          enum:
            - dog
            - cat
            - bird
            - fish
            - reptile
            - rabbit
            - other
        breedId:
          type: integer
          nullable: true
        gender:
          type: string
          enum:
            - 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
    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:
            - automatic
            - manual
            - cvt
        fuelType:
          type: string
          enum:
            - gas
            - diesel
            - electric
            - hybrid
            - plugin_hybrid
        bodyType:
          type: string
          enum:
            - sedan
            - suv
            - truck
            - coupe
            - hatchback
            - van
            - convertible
            - wagon
        listingType:
          type: string
          enum:
            - 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
    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
    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:
            type: string
        gender:
          type: string
          enum:
            - 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
    PlacesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        kind:
          type: string
          enum:
            - 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
    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
    MatchmakingRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        userId:
          type: integer
        candidateUserId:
          type: integer
        matchScorePercent:
          type: integer
        commonInterests:
          type: array
          items:
            type: string
        status:
          type: string
          enum:
            - pending
            - liked
            - passed
            - matched
            - blocked
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - userId
        - candidateUserId
        - matchScorePercent
        - commonInterests
        - status
        - createdAt
    StemFiguresRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
        slug:
          type: string
        field:
          type: string
          enum:
            - 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:
            type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - name
        - slug
        - field
        - bio
        - bornYear
        - diedYear
        - country
        - imageUrl
        - accomplishments
        - createdAt
    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:
            type: string
        notableWorks:
          type: array
          items:
            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
    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:
            type: string
        country:
          type: string
        imageUrl:
          type: string
          format: uri
        accomplishments:
          type: array
          items:
            type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - id
        - name
        - slug
        - bio
        - bornYear
        - diedYear
        - causes
        - country
        - imageUrl
        - accomplishments
        - createdAt
    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
    JokesRecord:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        setup:
          type: string
        punchline:
          type: string
        category:
          type: string
          enum:
            - 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
