Cacheflow API

REST API for the full Cacheflow quote-to-cash surface: proposals (quotes) and proposal items, product catalog and versioning, customers and contacts, subscriptions and change/renewal proposals, billing schedules and usage metering, invoices, payments, transfers and refunds, approval workflows, e-signature via DocuSign, webhooks, and outbound integrations with Salesforce, HubSpot, Close, QuickBooks, Stripe, Plaid and Slack. OpenAPI 3.0.1 with 305 paths, 400 uniquely-identified operations and 407 component schemas. Authentication is a static per-organization bearer token plus a mandatory tenant Host header. The contract remains published; the API host no longer resolves.

Documentation

Specifications

Other Resources

OpenAPI Specification

cacheflow-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Cacheflow API
  version: 0.0.3
servers:
- url: https://api.getcacheflow.com
  description: 'Production. Calls are tenant-routed: send Host: <org-flow-domain>.api.getcacheflow.com (per github.com/getcacheflow/api-examples
    SETUP.md). Host no longer resolves as of 2026-08-13.'
- url: https://api.sandbox.getcacheflow.com
  description: Sandbox. Tenant-routed as <org-flow-domain>.api.sandbox.getcacheflow.com. Host no longer resolves as of 2026-08-13.
paths:
  /api/latest/settings/integrations/quickbooks/accounts:
    get:
      tags:
      - Integrations
      summary: List QuickBooks accounting codes
      operationId: getAccountsForQuickbooks
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/QuickbooksAccount'
  /api/latest/settings/integrations/connectors:
    get:
      tags:
      - Integrations
      summary: List connectors
      operationId: getConnectors
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Connectors'
  /api/latest/settings/integrations/data/sync-events/{id}:
    get:
      tags:
      - Integrations
      summary: Event record by id
      operationId: getEventById
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SyncEvent'
  /api/latest/settings/integrations/events:
    get:
      tags:
      - Integrations
      summary: List integration events
      operationId: getEvents
      parameters:
      - name: search
        in: query
        schema:
          type: string
      - name: sort
        in: query
        schema:
          type: string
          default: -createdAt
      - name: page
        in: query
        schema:
          type: integer
          format: int32
          default: 0
      - name: size
        in: query
        schema:
          type: integer
          format: int32
          default: 300
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SyncEvent'
  /api/latest/settings/integrations/billingschedule/events:
    get:
      tags:
      - Integrations
      summary: List events for billing schedules
      operationId: getEventsByBillingSchedule
      parameters:
      - name: search
        in: query
        schema:
          type: string
      - name: sort
        in: query
        schema:
          type: string
      - name: page
        in: query
        schema:
          type: integer
          format: int32
          default: 0
      - name: size
        in: query
        schema:
          type: integer
          format: int32
          default: 300
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BillingScheduleSyncSummary'
  /api/latest/settings/integrations/transfer/events:
    get:
      tags:
      - Integrations
      summary: List events for payments
      operationId: getEventsByTransfer
      parameters:
      - name: search
        in: query
        schema:
          type: string
      - name: sort
        in: query
        schema:
          type: string
      - name: page
        in: query
        schema:
          type: integer
          format: int32
          default: 0
      - name: size
        in: query
        schema:
          type: integer
          format: int32
          default: 300
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TransferSyncSummary'
  /api/latest/settings/integrations/{reference}/{id}/flags:
    get:
      tags:
      - Integrations
      summary: List flags for a reference
      operationId: getFlagsByReference
      parameters:
      - name: reference
        in: path
        required: true
        schema:
          type: string
          enum:
          - account
          - apiwebhook
          - apitoken
          - approvalgroup
          - attachmentconfig
          - authidentity
          - billingschedule
          - companyInfo
          - connectorSyncEvent
          - contact
          - contentTemplate
          - contract
          - contractitem
          - contractitemlevel
          - currency
          - customer
          - docusignaccount
          - document
          - documentversion
          - group
          - invite
          - invoice
          - invoiceConfiguration
          - organization
          - orgconfig
          - orgidentitytoken
          - payment
          - paymentMethod
          - paymentSchedule
          - paymentTerm
          - pricebook
          - pricebookentry
          - product
          - productlevel
          - productusage
          - proposal
          - proposalapprovalrule
          - proposalevent
          - proposalitem
          - proposaliteminterval
          - proposalitemlevel
          - proposaloption
          - refund
          - renewalconfiguration
          - signature
          - signingdocument
          - transfer
          - transferevent
          - unit
          - user
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ReferenceIssue'
  /api/latest/settings/integrations/oauth/refresh/{type}:
    get:
      tags:
      - Integrations
      summary: Refresh integration tokens
      operationId: getIntegrationAuthRefresh
      parameters:
      - name: type
        in: path
        required: true
        schema:
          type: string
          enum:
          - manual
          - close
          - plaid
          - stripe
          - hubspot
          - salesforce
          - avalara
          - quickbooks
          - profitwell
          - netsuite
          - google
          - warmly
          - zapier
          - cacheflow_checkout
      responses:
        '200':
          description: OK
  /api/latest/settings/integrations/reconciliation/summary:
    get:
      tags:
      - Integrations
      summary: Reconciliation summary
      operationId: getReconciliationSummary
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReconciliationSummaryRest'
  /api/latest/settings/integrations/data/sync-events:
    get:
      tags:
      - Integrations
      summary: List integration events
      operationId: getSyncEvents
      parameters:
      - name: sort
        in: query
        schema:
          type: string
          default: createdAt
      - name: search
        in: query
        schema:
          type: string
      - name: page
        in: query
        schema:
          type: integer
          format: int32
          default: 0
      - name: size
        in: query
        schema:
          type: integer
          format: int32
          default: 100
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SyncEvent'
  /api/latest/settings/integrations/data/sync-events/summary:
    get:
      tags:
      - Integrations
      summary: Give the counts of integration events
      operationId: getSyncEventsCount
      parameters:
      - name: search
        in: query
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SyncEventsSummary'
  /api/latest/settings/integrations/system/billingschedule/events:
    get:
      tags:
      - Integrations
      summary: List events for billing schedules
      operationId: getSystemEventsByBillingSchedule
      parameters:
      - name: search
        in: query
        schema:
          type: string
      - name: sort
        in: query
        schema:
          type: string
      - name: page
        in: query
        schema:
          type: integer
          format: int32
          default: 0
      - name: size
        in: query
        schema:
          type: integer
          format: int32
          default: 300
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BillingScheduleSyncSummary'
  /api/latest/settings/integrations/system/transfer/events:
    get:
      tags:
      - Integrations
      summary: List integration events
      operationId: getSystemEventsByTransfer
      parameters:
      - name: sort
        in: query
        schema:
          type: string
          default: createdAt
      - name: search
        in: query
        schema:
          type: string
      - name: page
        in: query
        schema:
          type: integer
          format: int32
          default: 0
      - name: size
        in: query
        schema:
          type: integer
          format: int32
          default: 300
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TransferSyncSummary'
  /api/latest/settings/integrations/system/reconciliation/summary:
    get:
      tags:
      - Integrations
      summary: Reconciliation summary
      operationId: getSystemReconciliationSummary
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReconciliationSummaryRest'
  /api/latest/settings/integrations/{reference}/{id}/link:
    post:
      tags:
      - Integrations
      summary: Link object based on entity
      operationId: linkObjectToExternal
      parameters:
      - name: reference
        in: path
        required: true
        schema:
          type: string
          enum:
          - account
          - apiwebhook
          - apitoken
          - approvalgroup
          - attachmentconfig
          - authidentity
          - billingschedule
          - companyInfo
          - connectorSyncEvent
          - contact
          - contentTemplate
          - contract
          - contractitem
          - contractitemlevel
          - currency
          - customer
          - docusignaccount
          - document
          - documentversion
          - group
          - invite
          - invoice
          - invoiceConfiguration
          - organization
          - orgconfig
          - orgidentitytoken
          - payment
          - paymentMethod
          - paymentSchedule
          - paymentTerm
          - pricebook
          - pricebookentry
          - product
          - productlevel
          - productusage
          - proposal
          - proposalapprovalrule
          - proposalevent
          - proposalitem
          - proposaliteminterval
          - proposalitemlevel
          - proposaloption
          - refund
          - renewalconfiguration
          - signature
          - signingdocument
          - transfer
          - transferevent
          - unit
          - user
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LinkRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ExternalObjectReference'
  /api/latest/settings/integrations/{reference}/{id}/resetsync:
    post:
      tags:
      - Integrations
      summary: Reset sync for an object
      operationId: resetAndSyncObjectToExternal
      parameters:
      - name: reference
        in: path
        required: true
        schema:
          type: string
          enum:
          - account
          - apiwebhook
          - apitoken
          - approvalgroup
          - attachmentconfig
          - authidentity
          - billingschedule
          - companyInfo
          - connectorSyncEvent
          - contact
          - contentTemplate
          - contract
          - contractitem
          - contractitemlevel
          - currency
          - customer
          - docusignaccount
          - document
          - documentversion
          - group
          - invite
          - invoice
          - invoiceConfiguration
          - organization
          - orgconfig
          - orgidentitytoken
          - payment
          - paymentMethod
          - paymentSchedule
          - paymentTerm
          - pricebook
          - pricebookentry
          - product
          - productlevel
          - productusage
          - proposal
          - proposalapprovalrule
          - proposalevent
          - proposalitem
          - proposaliteminterval
          - proposalitemlevel
          - proposaloption
          - refund
          - renewalconfiguration
          - signature
          - signingdocument
          - transfer
          - transferevent
          - unit
          - user
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExternalObjectReference'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ExternalObjectReference'
  /api/latest/settings/integrations/oauth/code/{type}:
    post:
      tags:
      - Integrations
      summary: Process code callback from oauth flow
      operationId: saveIntegrationAuthCallback
      parameters:
      - name: type
        in: path
        required: true
        schema:
          type: string
          enum:
          - manual
          - close
          - plaid
          - stripe
          - hubspot
          - salesforce
          - avalara
          - quickbooks
          - profitwell
          - netsuite
          - google
          - warmly
          - zapier
          - cacheflow_checkout
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConnectorSetup'
      responses:
        '200':
          description: OK
  /api/latest/settings/integrations/{type}/search:
    put:
      tags:
      - Integrations
      summary: Search connectors
      operationId: searchConnectorData
      parameters:
      - name: type
        in: path
        required: true
        schema:
          type: string
          enum:
          - manual
          - close
          - plaid
          - stripe
          - hubspot
          - salesforce
          - avalara
          - quickbooks
          - profitwell
          - netsuite
          - google
          - warmly
          - zapier
          - cacheflow_checkout
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConnectorQuery'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ExternalObjectReference'
  /api/latest/settings/integrations/{type}/{reference}/{referenceId}/search:
    get:
      tags:
      - Integrations
      summary: Search connectors based on entity
      operationId: searchConnectorDataWithObject
      parameters:
      - name: type
        in: path
        required: true
        schema:
          type: string
          enum:
          - manual
          - close
          - plaid
          - stripe
          - hubspot
          - salesforce
          - avalara
          - quickbooks
          - profitwell
          - netsuite
          - google
          - warmly
          - zapier
          - cacheflow_checkout
      - name: reference
        in: path
        required: true
        schema:
          type: string
          enum:
          - account
          - apiwebhook
          - apitoken
          - approvalgroup
          - attachmentconfig
          - authidentity
          - billingschedule
          - companyInfo
          - connectorSyncEvent
          - contact
          - contentTemplate
          - contract
          - contractitem
          - contractitemlevel
          - currency
          - customer
          - docusignaccount
          - document
          - documentversion
          - group
          - invite
          - invoice
          - invoiceConfiguration
          - organization
          - orgconfig
          - orgidentitytoken
          - payment
          - paymentMethod
          - paymentSchedule
          - paymentTerm
          - pricebook
          - pricebookentry
          - product
          - productlevel
          - productusage
          - proposal
          - proposalapprovalrule
          - proposalevent
          - proposalitem
          - proposaliteminterval
          - proposalitemlevel
          - proposaloption
          - refund
          - renewalconfiguration
          - signature
          - signingdocument
          - transfer
          - transferevent
          - unit
          - user
      - name: referenceId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ExternalObjectReference'
  /api/latest/settings/integrations/oauth/authorize/{type}:
    post:
      tags:
      - Integrations
      summary: Start authorize oauth flow for integration
      operationId: startIntegrationLogin
      parameters:
      - name: type
        in: path
        required: true
        schema:
          type: string
          enum:
          - manual
          - close
          - plaid
          - stripe
          - hubspot
          - salesforce
          - avalara
          - quickbooks
          - profitwell
          - netsuite
          - google
          - warmly
          - zapier
          - cacheflow_checkout
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConnectorSetup'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConnectorSetup'
  /api/latest/settings/integrations/billingschedule/resync:
    put:
      tags:
      - Integrations
      summary: Resync billing schedules
      operationId: syncBillingSchedules
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
                format: uuid
      responses:
        '200':
          description: OK
  /api/latest/settings/integrations/test-connection/{type}:
    get:
      tags:
      - Integrations
      summary: Test connector
      operationId: testConnector
      parameters:
      - name: type
        in: path
        required: true
        schema:
          type: string
          enum:
          - manual
          - close
          - plaid
          - stripe
          - hubspot
          - salesforce
          - avalara
          - quickbooks
          - profitwell
          - netsuite
          - google
          - warmly
          - zapier
          - cacheflow_checkout
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ConnectorTestResult'
  /api/latest/settings/integrations/{reference}/{id}/unlink:
    post:
      tags:
      - Integrations
      summary: 'UnLink object based on entity '
      operationId: unlinkFromExternal
      parameters:
      - name: reference
        in: path
        required: true
        schema:
          type: string
          enum:
          - account
          - apiwebhook
          - apitoken
          - approvalgroup
          - attachmentconfig
          - authidentity
          - billingschedule
          - companyInfo
          - connectorSyncEvent
          - contact
          - contentTemplate
          - contract
          - contractitem
          - contractitemlevel
          - currency
          - customer
          - docusignaccount
          - document
          - documentversion
          - group
          - invite
          - invoice
          - invoiceConfiguration
          - organization
          - orgconfig
          - orgidentitytoken
          - payment
          - paymentMethod
          - paymentSchedule
          - paymentTerm
          - pricebook
          - pricebookentry
          - product
          - productlevel
          - productusage
          - proposal
          - proposalapprovalrule
          - proposalevent
          - proposalitem
          - proposaliteminterval
          - proposalitemlevel
          - proposaloption
          - refund
          - renewalconfiguration
          - signature
          - signingdocument
          - transfer
          - transferevent
          - unit
          - user
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExternalObjectReference'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ExternalObjectReference'
  /api/latest/data/accounts/plaid:
    post:
      tags:
      - Accounts
      summary: Create Plaid account
      operationId: createAccountsWithPlaid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAccountsWithPlaidRequest'
      responses:
        '201':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Account'
  /api/latest/data/accounts/external:
    post:
      tags:
      - Accounts
      summary: Create external account
      operationId: createExternal
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Account'
      responses:
        '201':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Account'
  /api/latest/data/accounts/{id}:
    get:
      tags:
      - Accounts
      summary: Get an account
      operationId: getAccount
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Account'
  /api/latest/data/accounts/funding:
    get:
      tags:
      - Accounts
      summary: List funding accounts
      operationId: getFundingAccount
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Account'
  /api/latest/data/accounts/plaid/init:
    post:
      tags:
      - Accounts
      summary: Create Plaid token for initialization
      operationId: initCreateAccountWithPlaid
      responses:
        '201':
          description: OK
          content:
            application/json:
              schema:
                type: string
  /api/latest/data/accounts:
    get:
      tags:
      - Accounts
      summary: List accounts
      operationId: listAccounts
      parameters:
      - name: filterBy
        in: query
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Account'
  /api/latest/data/approval-groups:
    get:
      tags:
      - Approval Groups
      summary: List approval groups
      operationId: getAllApprovalGroups
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ApprovalGroup'
    post:
      tags:
      - Approval Groups
      summary: Create an approval group
      operationId: createApprovalGroup
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApprovalGroupRequest'
      responses:
        '201':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApprovalGroup'
  /api/latest/data/approval-groups/{id}:
    get:
      tags:
      - Approval Groups
      summary: Retrieve an approval group
      operationId: getApprovalGroupById
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApprovalGroup'
    put:
      tags:
      - Approval Groups
      summary: Update an approval group
      operationId: updateApprovalGroup
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApprovalGroupRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApprovalGroup'
    delete:
      tags:
      - Approval Groups
      summary: Delete an approval group
      operationId: deleteApprovalGroup
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
  /api/latest/approval-requests/{id}/actions:
    post:
      tags:
      - Proposal Approvals
      summary: Action an approval
      operationId: createApprovalAction
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApprovalAction'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApprovalAction'
  /api/latest/approval-requests/me:
    get:
      tags:
      - Approval Requests
      summary: Retrieve approval requests
      operationId: getMyApproverRequests
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ApprovalRequestSummary'
  /api/latest/data/close/contacts:
    get:
      tags:
      - Close
      summary: List contacts
      operationId: getCloseContacts
      responses:
        '200':
          description: List of Close contacts
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CloseContact'
  /api/latest/data/close/leads:
    get:
      tags:
      - Close
      summary: List leads
      operationId: getCloseLeads
      responses:
        '200':
          description: List of Close Leads
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CloseLead'
  /api/latest/data/close/proxy/{path}:
    get:
      tags:
      - Close
      summary: Proxy to Close API
      operationId: proxy
      parameters:
      - name: path
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Proxy to Close API
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
  /api/latest/data/contacts/{id}:
    get:
      tags:
      - Contacts
      summary: Retrieve a contact
      operationId: getContact
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contact'
    delete:
      tags:
      - Contacts
      summary: Delete a contact
      operationId: deleteContact
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
    patch:
      tags:
      - Contacts
      summary: Update a contact
      operationId: updateContact
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateContactRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contact'
  /api/latest/data/customers:
    get:
      tags:
      - Customers
      summary: List customers
      operationId: listCustomers
      parameters:
      - name: search
        in: query
        schema:
          type: string
      - name: sort
        in: query
        schema:
          type: string
      - name: page
        in: query
        schema:
          type: integer
          format: int32
          default: 0
      - name: size
        in: query
        schema:
          type: integer
          format: int32
          default: 100
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Customer'
    post:
      tags:
      - Customers
      summary

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