openapi: 3.0.3
info:
  title: QA Automation Labs — API Playground
  description: "A free, original REST API for practising API test automation with Playwright, Postman, Rest Assured, Karate, Cypress, Python Requests and more. Write operations return realistic responses but do not mutate the shared dataset."
  version: 1.0.0
  contact:
    name: QA Automation Labs
    url: "https://qaautomationlabs.com/"
  license:
    name: Free for learning
servers:
  - url: "https://api.qaautomationlabs.com/v1"
    description: Production
tags:
  - name: Users
  - name: Products
  - name: Orders
  - name: Customers
  - name: Employees
  - name: Payments
  - name: Banking
  - name: Healthcare
  - name: Airlines
  - name: Books
  - name: Inventory
  - name: Notifications
  - name: Shopping Cart
  - name: Reports
  - name: Webhooks
  - name: Authentication
  - name: Simulation
  - name: Files
  - name: Utility
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
paths:
  /users:
    get:
      tags:
        - Users
      summary: List users
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            default: 10
            maximum: 100
        - name: sort
          in: query
          schema:
            type: string
        - name: order
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
        - name: q
          in: query
          description: Full-text search
          schema:
            type: string
      responses:
        200:
          description: Paginated list
    post:
      tags:
        - Users
      summary: Create a User
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        201:
          description: Created
        422:
          description: Validation error
  /users/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
    get:
      tags:
        - Users
      summary: Get a User
      responses:
        200:
          description: OK
        404:
          description: Not found
    put:
      tags:
        - Users
      summary: Replace a User
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    patch:
      tags:
        - Users
      summary: Update a User
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    delete:
      tags:
        - Users
      summary: Delete a User
      responses:
        204:
          description: Deleted
        404:
          description: Not found
  /users/bulk:
    post:
      tags:
        - Users
      summary: Bulk create users
      responses:
        201:
          description: Created
    delete:
      tags:
        - Users
      summary: Bulk delete users
      responses:
        200:
          description: Deleted
  /products:
    get:
      tags:
        - Products
      summary: List products
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            default: 10
            maximum: 100
        - name: sort
          in: query
          schema:
            type: string
        - name: order
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
        - name: q
          in: query
          description: Full-text search
          schema:
            type: string
      responses:
        200:
          description: Paginated list
    post:
      tags:
        - Products
      summary: Create a Product
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        201:
          description: Created
        422:
          description: Validation error
  /products/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
    get:
      tags:
        - Products
      summary: Get a Product
      responses:
        200:
          description: OK
        404:
          description: Not found
    put:
      tags:
        - Products
      summary: Replace a Product
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    patch:
      tags:
        - Products
      summary: Update a Product
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    delete:
      tags:
        - Products
      summary: Delete a Product
      responses:
        204:
          description: Deleted
        404:
          description: Not found
  /products/bulk:
    post:
      tags:
        - Products
      summary: Bulk create products
      responses:
        201:
          description: Created
    delete:
      tags:
        - Products
      summary: Bulk delete products
      responses:
        200:
          description: Deleted
  /orders:
    get:
      tags:
        - Orders
      summary: List orders
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            default: 10
            maximum: 100
        - name: sort
          in: query
          schema:
            type: string
        - name: order
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
        - name: q
          in: query
          description: Full-text search
          schema:
            type: string
      responses:
        200:
          description: Paginated list
    post:
      tags:
        - Orders
      summary: Create a Order
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        201:
          description: Created
        422:
          description: Validation error
  /orders/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
    get:
      tags:
        - Orders
      summary: Get a Order
      responses:
        200:
          description: OK
        404:
          description: Not found
    put:
      tags:
        - Orders
      summary: Replace a Order
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    patch:
      tags:
        - Orders
      summary: Update a Order
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    delete:
      tags:
        - Orders
      summary: Delete a Order
      responses:
        204:
          description: Deleted
        404:
          description: Not found
  /orders/bulk:
    post:
      tags:
        - Orders
      summary: Bulk create orders
      responses:
        201:
          description: Created
    delete:
      tags:
        - Orders
      summary: Bulk delete orders
      responses:
        200:
          description: Deleted
  /customers:
    get:
      tags:
        - Customers
      summary: List customers
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            default: 10
            maximum: 100
        - name: sort
          in: query
          schema:
            type: string
        - name: order
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
        - name: q
          in: query
          description: Full-text search
          schema:
            type: string
      responses:
        200:
          description: Paginated list
    post:
      tags:
        - Customers
      summary: Create a Customer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        201:
          description: Created
        422:
          description: Validation error
  /customers/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
    get:
      tags:
        - Customers
      summary: Get a Customer
      responses:
        200:
          description: OK
        404:
          description: Not found
    put:
      tags:
        - Customers
      summary: Replace a Customer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    patch:
      tags:
        - Customers
      summary: Update a Customer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    delete:
      tags:
        - Customers
      summary: Delete a Customer
      responses:
        204:
          description: Deleted
        404:
          description: Not found
  /customers/bulk:
    post:
      tags:
        - Customers
      summary: Bulk create customers
      responses:
        201:
          description: Created
    delete:
      tags:
        - Customers
      summary: Bulk delete customers
      responses:
        200:
          description: Deleted
  /employees:
    get:
      tags:
        - Employees
      summary: List employees
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            default: 10
            maximum: 100
        - name: sort
          in: query
          schema:
            type: string
        - name: order
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
        - name: q
          in: query
          description: Full-text search
          schema:
            type: string
      responses:
        200:
          description: Paginated list
    post:
      tags:
        - Employees
      summary: Create a Employee
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        201:
          description: Created
        422:
          description: Validation error
  /employees/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
    get:
      tags:
        - Employees
      summary: Get a Employee
      responses:
        200:
          description: OK
        404:
          description: Not found
    put:
      tags:
        - Employees
      summary: Replace a Employee
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    patch:
      tags:
        - Employees
      summary: Update a Employee
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    delete:
      tags:
        - Employees
      summary: Delete a Employee
      responses:
        204:
          description: Deleted
        404:
          description: Not found
  /employees/bulk:
    post:
      tags:
        - Employees
      summary: Bulk create employees
      responses:
        201:
          description: Created
    delete:
      tags:
        - Employees
      summary: Bulk delete employees
      responses:
        200:
          description: Deleted
  /payments:
    get:
      tags:
        - Payments
      summary: List payments
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            default: 10
            maximum: 100
        - name: sort
          in: query
          schema:
            type: string
        - name: order
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
        - name: q
          in: query
          description: Full-text search
          schema:
            type: string
      responses:
        200:
          description: Paginated list
    post:
      tags:
        - Payments
      summary: Create a Payment
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        201:
          description: Created
        422:
          description: Validation error
  /payments/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
    get:
      tags:
        - Payments
      summary: Get a Payment
      responses:
        200:
          description: OK
        404:
          description: Not found
    put:
      tags:
        - Payments
      summary: Replace a Payment
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    patch:
      tags:
        - Payments
      summary: Update a Payment
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    delete:
      tags:
        - Payments
      summary: Delete a Payment
      responses:
        204:
          description: Deleted
        404:
          description: Not found
  /payments/bulk:
    post:
      tags:
        - Payments
      summary: Bulk create payments
      responses:
        201:
          description: Created
    delete:
      tags:
        - Payments
      summary: Bulk delete payments
      responses:
        200:
          description: Deleted
  /accounts:
    get:
      tags:
        - Banking
      summary: List accounts
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            default: 10
            maximum: 100
        - name: sort
          in: query
          schema:
            type: string
        - name: order
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
        - name: q
          in: query
          description: Full-text search
          schema:
            type: string
      responses:
        200:
          description: Paginated list
    post:
      tags:
        - Banking
      summary: Create a Account
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        201:
          description: Created
        422:
          description: Validation error
  /accounts/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
    get:
      tags:
        - Banking
      summary: Get a Account
      responses:
        200:
          description: OK
        404:
          description: Not found
    put:
      tags:
        - Banking
      summary: Replace a Account
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    patch:
      tags:
        - Banking
      summary: Update a Account
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    delete:
      tags:
        - Banking
      summary: Delete a Account
      responses:
        204:
          description: Deleted
        404:
          description: Not found
  /accounts/bulk:
    post:
      tags:
        - Banking
      summary: Bulk create accounts
      responses:
        201:
          description: Created
    delete:
      tags:
        - Banking
      summary: Bulk delete accounts
      responses:
        200:
          description: Deleted
  /patients:
    get:
      tags:
        - Healthcare
      summary: List patients
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            default: 10
            maximum: 100
        - name: sort
          in: query
          schema:
            type: string
        - name: order
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
        - name: q
          in: query
          description: Full-text search
          schema:
            type: string
      responses:
        200:
          description: Paginated list
    post:
      tags:
        - Healthcare
      summary: Create a Patient
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        201:
          description: Created
        422:
          description: Validation error
  /patients/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
    get:
      tags:
        - Healthcare
      summary: Get a Patient
      responses:
        200:
          description: OK
        404:
          description: Not found
    put:
      tags:
        - Healthcare
      summary: Replace a Patient
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    patch:
      tags:
        - Healthcare
      summary: Update a Patient
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    delete:
      tags:
        - Healthcare
      summary: Delete a Patient
      responses:
        204:
          description: Deleted
        404:
          description: Not found
  /patients/bulk:
    post:
      tags:
        - Healthcare
      summary: Bulk create patients
      responses:
        201:
          description: Created
    delete:
      tags:
        - Healthcare
      summary: Bulk delete patients
      responses:
        200:
          description: Deleted
  /flights:
    get:
      tags:
        - Airlines
      summary: List flights
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            default: 10
            maximum: 100
        - name: sort
          in: query
          schema:
            type: string
        - name: order
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
        - name: q
          in: query
          description: Full-text search
          schema:
            type: string
      responses:
        200:
          description: Paginated list
    post:
      tags:
        - Airlines
      summary: Create a Flight
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        201:
          description: Created
        422:
          description: Validation error
  /flights/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
    get:
      tags:
        - Airlines
      summary: Get a Flight
      responses:
        200:
          description: OK
        404:
          description: Not found
    put:
      tags:
        - Airlines
      summary: Replace a Flight
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    patch:
      tags:
        - Airlines
      summary: Update a Flight
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    delete:
      tags:
        - Airlines
      summary: Delete a Flight
      responses:
        204:
          description: Deleted
        404:
          description: Not found
  /flights/bulk:
    post:
      tags:
        - Airlines
      summary: Bulk create flights
      responses:
        201:
          description: Created
    delete:
      tags:
        - Airlines
      summary: Bulk delete flights
      responses:
        200:
          description: Deleted
  /books:
    get:
      tags:
        - Books
      summary: List books
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            default: 10
            maximum: 100
        - name: sort
          in: query
          schema:
            type: string
        - name: order
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
        - name: q
          in: query
          description: Full-text search
          schema:
            type: string
      responses:
        200:
          description: Paginated list
    post:
      tags:
        - Books
      summary: Create a Book
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        201:
          description: Created
        422:
          description: Validation error
  /books/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
    get:
      tags:
        - Books
      summary: Get a Book
      responses:
        200:
          description: OK
        404:
          description: Not found
    put:
      tags:
        - Books
      summary: Replace a Book
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    patch:
      tags:
        - Books
      summary: Update a Book
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    delete:
      tags:
        - Books
      summary: Delete a Book
      responses:
        204:
          description: Deleted
        404:
          description: Not found
  /books/bulk:
    post:
      tags:
        - Books
      summary: Bulk create books
      responses:
        201:
          description: Created
    delete:
      tags:
        - Books
      summary: Bulk delete books
      responses:
        200:
          description: Deleted
  /inventory:
    get:
      tags:
        - Inventory
      summary: List inventory
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            default: 10
            maximum: 100
        - name: sort
          in: query
          schema:
            type: string
        - name: order
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
        - name: q
          in: query
          description: Full-text search
          schema:
            type: string
      responses:
        200:
          description: Paginated list
    post:
      tags:
        - Inventory
      summary: Create a Inventory
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        201:
          description: Created
        422:
          description: Validation error
  /inventory/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
    get:
      tags:
        - Inventory
      summary: Get a Inventory
      responses:
        200:
          description: OK
        404:
          description: Not found
    put:
      tags:
        - Inventory
      summary: Replace a Inventory
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    patch:
      tags:
        - Inventory
      summary: Update a Inventory
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    delete:
      tags:
        - Inventory
      summary: Delete a Inventory
      responses:
        204:
          description: Deleted
        404:
          description: Not found
  /inventory/bulk:
    post:
      tags:
        - Inventory
      summary: Bulk create inventory
      responses:
        201:
          description: Created
    delete:
      tags:
        - Inventory
      summary: Bulk delete inventory
      responses:
        200:
          description: Deleted
  /notifications:
    get:
      tags:
        - Notifications
      summary: List notifications
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            default: 10
            maximum: 100
        - name: sort
          in: query
          schema:
            type: string
        - name: order
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
        - name: q
          in: query
          description: Full-text search
          schema:
            type: string
      responses:
        200:
          description: Paginated list
    post:
      tags:
        - Notifications
      summary: Create a Notification
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        201:
          description: Created
        422:
          description: Validation error
  /notifications/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
    get:
      tags:
        - Notifications
      summary: Get a Notification
      responses:
        200:
          description: OK
        404:
          description: Not found
    put:
      tags:
        - Notifications
      summary: Replace a Notification
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    patch:
      tags:
        - Notifications
      summary: Update a Notification
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    delete:
      tags:
        - Notifications
      summary: Delete a Notification
      responses:
        204:
          description: Deleted
        404:
          description: Not found
  /notifications/bulk:
    post:
      tags:
        - Notifications
      summary: Bulk create notifications
      responses:
        201:
          description: Created
    delete:
      tags:
        - Notifications
      summary: Bulk delete notifications
      responses:
        200:
          description: Deleted
  /carts:
    get:
      tags:
        - Shopping Cart
      summary: List carts
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            default: 10
            maximum: 100
        - name: sort
          in: query
          schema:
            type: string
        - name: order
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
        - name: q
          in: query
          description: Full-text search
          schema:
            type: string
      responses:
        200:
          description: Paginated list
    post:
      tags:
        - Shopping Cart
      summary: Create a Cart
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        201:
          description: Created
        422:
          description: Validation error
  /carts/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
    get:
      tags:
        - Shopping Cart
      summary: Get a Cart
      responses:
        200:
          description: OK
        404:
          description: Not found
    put:
      tags:
        - Shopping Cart
      summary: Replace a Cart
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    patch:
      tags:
        - Shopping Cart
      summary: Update a Cart
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    delete:
      tags:
        - Shopping Cart
      summary: Delete a Cart
      responses:
        204:
          description: Deleted
        404:
          description: Not found
  /carts/bulk:
    post:
      tags:
        - Shopping Cart
      summary: Bulk create carts
      responses:
        201:
          description: Created
    delete:
      tags:
        - Shopping Cart
      summary: Bulk delete carts
      responses:
        200:
          description: Deleted
  /reports:
    get:
      tags:
        - Reports
      summary: List reports
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            default: 10
            maximum: 100
        - name: sort
          in: query
          schema:
            type: string
        - name: order
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
        - name: q
          in: query
          description: Full-text search
          schema:
            type: string
      responses:
        200:
          description: Paginated list
    post:
      tags:
        - Reports
      summary: Create a Report
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        201:
          description: Created
        422:
          description: Validation error
  /reports/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
    get:
      tags:
        - Reports
      summary: Get a Report
      responses:
        200:
          description: OK
        404:
          description: Not found
    put:
      tags:
        - Reports
      summary: Replace a Report
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    patch:
      tags:
        - Reports
      summary: Update a Report
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    delete:
      tags:
        - Reports
      summary: Delete a Report
      responses:
        204:
          description: Deleted
        404:
          description: Not found
  /reports/bulk:
    post:
      tags:
        - Reports
      summary: Bulk create reports
      responses:
        201:
          description: Created
    delete:
      tags:
        - Reports
      summary: Bulk delete reports
      responses:
        200:
          description: Deleted
  /webhooks:
    get:
      tags:
        - Webhooks
      summary: List webhooks
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            default: 10
            maximum: 100
        - name: sort
          in: query
          schema:
            type: string
        - name: order
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
        - name: q
          in: query
          description: Full-text search
          schema:
            type: string
      responses:
        200:
          description: Paginated list
    post:
      tags:
        - Webhooks
      summary: Create a Webhook
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        201:
          description: Created
        422:
          description: Validation error
  /webhooks/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
    get:
      tags:
        - Webhooks
      summary: Get a Webhook
      responses:
        200:
          description: OK
        404:
          description: Not found
    put:
      tags:
        - Webhooks
      summary: Replace a Webhook
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    patch:
      tags:
        - Webhooks
      summary: Update a Webhook
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: Updated
    delete:
      tags:
        - Webhooks
      summary: Delete a Webhook
      responses:
        204:
          description: Deleted
        404:
          description: Not found
  /webhooks/bulk:
    post:
      tags:
        - Webhooks
      summary: Bulk create webhooks
      responses:
        201:
          description: Created
    delete:
      tags:
        - Webhooks
      summary: Bulk delete webhooks
      responses:
        200:
          description: Deleted
  /auth/login:
    post:
      tags:
        - Authentication
      summary: "Login (qa@demo.io / Password123)"
      responses:
        200:
          description: Returns JWT
        401:
          description: Invalid credentials
  /auth/register:
    post:
      tags:
        - Authentication
      summary: Register a new user
      responses:
        201:
          description: Created
  /auth/refresh:
    post:
      tags:
        - Authentication
      summary: Refresh access token
      responses:
        200:
          description: New token
  /auth/logout:
    post:
      tags:
        - Authentication
      summary: Logout
      responses:
        200:
          description: OK
  /auth/me:
    get:
      tags:
        - Authentication
      summary: Current user (Bearer required)
      security:
        - bearerAuth:
      responses:
        200:
          description: OK
        401:
          description: Unauthorized
  /simulate/status/{code}:
    get:
      tags:
        - Simulation
      summary: Return any HTTP status code
      responses:
        200:
          description: Varies
  /simulate/delay/{seconds}:
    get:
      tags:
        - Simulation
      summary: Delay the response (max 10s)
      responses:
        200:
          description: Varies
  /simulate/timeout:
    get:
      tags:
        - Simulation
      summary: Hang 10s to practise timeout handling
      responses:
        200:
          description: Varies
  /simulate/error:
    get:
      tags:
        - Simulation
      summary: Always 500
      responses:
        200:
          description: Varies
  /simulate/unstable:
    get:
      tags:
        - Simulation
      summary: Randomly 200 or 503 (retry practice)
      responses:
        200:
          description: Varies
  /simulate/rate-limit:
    get:
      tags:
        - Simulation
      summary: Return 429 with Retry-After
      responses:
        200:
          description: Varies
  /simulate/invalid-json:
    get:
      tags:
        - Simulation
      summary: Return malformed JSON
      responses:
        200:
          description: Varies
  /simulate/empty:
    get:
      tags:
        - Simulation
      summary: Empty 200 body
      responses:
        200:
          description: Varies
  /simulate/null:
    get:
      tags:
        - Simulation
      summary: Literal null body
      responses:
        200:
          description: Varies
  /simulate/headers:
    get:
      tags:
        - Simulation
      summary: Echo your request headers
      responses:
        200:
          description: Varies
  /simulate/echo:
    get:
      tags:
        - Simulation
      summary: "Echo method, headers, query and body"
      responses:
        200:
          description: Varies
  /files/upload:
    post:
      tags:
        - Files
      summary: Upload a file (multipart)
      responses:
        201:
          description: Stored
  /files/download/{id}:
    get:
      tags:
        - Files
      summary: Download a sample CSV
      responses:
        200:
          description: File
  /status:
    get:
      tags:
        - Utility
      summary: Health check
      responses:
        200:
          description: OK
  /stats:
    get:
      tags:
        - Utility
      summary: Platform statistics
      responses:
        200:
          description: OK
