Cacheflow Proposals API

The Proposals API from Cacheflow — 43 operation(s) for proposals.

Business capability
Subscription Contracting BC-4240.20

Operations 55

GET /api/latest/data/customers/{id}/proposals List proposals for a customer #
GET /api/latest/data/item-schedules/{id} Get an item schedule #
DELETE /api/latest/data/item-schedules/{id} Delete an item schedule #
PATCH /api/latest/data/item-schedules/{id} Update an item schedule #
POST /api/latest/data/proposal-items/{id}/schedules Add an item schedule #
GET /api/latest/data/proposal-items/{id} Get a proposal item #
DELETE /api/latest/data/proposal-items/{id} Delete a proposal item #
PATCH /api/latest/data/proposal-items/{id} Update a proposal item #
POST /api/latest/proposals/{id}/accept Accept a proposal #
PUT /api/latest/proposals/{id}/billing-method Update the payment method for a proposal #
GET /api/latest/proposals/{id}/events List events for a proposal #
POST /api/latest/proposals/{id}/events Create an event for a proposal #
POST /api/latest/proposals/{id}/items Add a proposal item #
PATCH /api/latest/proposals/{id}/items Batch add/update/remove proposal items #
POST /api/latest/proposals/{id}/renewal Propagate renewal proposal changes to Subscription #
POST /api/latest/proposals/archive Archive proposals #
PUT /api/latest/proposals/bulk-expire Bulk expire proposals #
POST /api/latest/proposals/{id}/cancel Cancel a proposal #
POST /api/latest/proposals/{id}/signing-document Create the signing document for a proposal #
DELETE /api/latest/proposals/{id}/signing-document Delete the signing document for a proposal #
POST /api/latest/proposals/clear-legacy-checkout Clear legacy checkout flag from all proposals #
POST /api/latest/proposals/{id}/copy Copy a proposal #
POST /api/latest/proposals/{id}/invoice-config Add new invoice configuration to proposal #
DELETE /api/latest/proposals/{id}/invoice-config Delete invoice configuration to proposal #
POST /api/latest/proposals/{id}/create-payment-intent Create payment intent for a proposal #
GET /api/latest/proposals List proposals #
POST /api/latest/proposals Create a proposal #
POST /api/latest/proposals/{id}/renewal-config Add new renewal configuration to proposal #
DELETE /api/latest/proposals/{id}/renewal-config Delete auto-renewal configuration on proposal #
GET /api/latest/proposals/{id} Retrieve a proposal #
DELETE /api/latest/proposals/{id} Delete a proposal #
PATCH /api/latest/proposals/{id} Update a proposal #
POST /api/latest/proposals/{id}/tax-estimate Estimate tax for a proposal #
GET /api/latest/proposals/{id}/upgrades List upgrades for a proposal #
GET /api/latest/proposals/external/{externalId} Retrieve a proposal by external ID #
GET /api/latest/proposals/{id}/pdf-view View a proposal document #
GET /api/latest/proposals/{id}/signing-diagnostics Retrieve signing diagnostics for a proposal #
GET /api/latest/proposals/{id}/signing-document/content Retrieve the signing document for a proposal #
GET /api/latest/proposals/{id}/signing-view Retrieve signing view for a proposal #
POST /api/latest/proposals/{id}/payment-method/{paymentType}/init Initialize plaid for a proposal #
POST /api/latest/proposals/{id}/billing-invites Share a proposal #
POST /api/latest/proposals/maintenance Perform proposal maintenance: expire and regenerate #
GET /api/latest/proposals/{id}/preview Preview a proposal #
GET /api/latest/proposals/{id}/delta-spans/preview Preview proposal delta spans #
POST /api/latest/proposals/{id}/request Create a proposal as buyer #
POST /api/latest/proposals/restore Restore proposals #
POST /api/latest/proposals/{id}/set-renewal-billing System auth required. Update renewal proposals with previous accepted. Useful for fixing billing methods on renewals. #
POST /api/latest/proposals/{id}/toggle-legacy-checkout Toggle legacy checkout flag for a specific proposal #
PATCH /api/latest/proposals/{id}/checkout-state Update a proposal checkout state #
PUT /api/latest/proposals/{id}/cover-letter Update a cover letter #
PATCH /api/latest/proposals/{id}/customer Update billing info for a proposal #
POST /api/latest/proposals/{ids}/pricing System auth required. Update item pricing and schedules. Useful after out-of-band item adjustments. #
POST /api/latest/proposals/{id}/signing-update Update the signing for a proposal. poll=true indicates that polling protection should be used, false or null that there is an expected update. #
GET /api/latest/proposals/{id}/view View a proposal as buyer #
GET /api/latest/data/proposal-templates List proposal templates #

Documentation

Specifications

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/cacheflow-proposals-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

cacheflow-proposals-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Cacheflow Proposals 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.
tags:
- name: Proposals
paths:
  /api/latest/data/customers/{id}/proposals:
    get:
      tags:
      - Proposals
      summary: List proposals for a customer
      operationId: getCustomerProposals
      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/ProposalSummary'
  /api/latest/data/item-schedules/{id}:
    get:
      tags:
      - Proposals
      summary: Get an item schedule
      operationId: getItemSchedule
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ItemSchedule'
    delete:
      tags:
      - Proposals
      summary: Delete an item schedule
      operationId: deleteItemSchedule
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
    patch:
      tags:
      - Proposals
      summary: Update an item schedule
      operationId: updateItemSchedule
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ItemScheduleRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ItemSchedule'
  /api/latest/data/proposal-items/{id}/schedules:
    post:
      tags:
      - Proposals
      summary: Add an item schedule
      operationId: addItemSchedule
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ItemScheduleRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ItemSchedule'
  /api/latest/data/proposal-items/{id}:
    get:
      tags:
      - Proposals
      summary: Get a proposal item
      operationId: getProposalItem
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Item'
    delete:
      tags:
      - Proposals
      summary: Delete a proposal item
      operationId: deleteProposalItem
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
    patch:
      tags:
      - Proposals
      summary: Update a proposal item
      operationId: updateProposalItem
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProposalItemRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Item'
  /api/latest/proposals/{id}/accept:
    post:
      tags:
      - Proposals
      summary: Accept a proposal
      operationId: acceptProposal
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AcceptRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Proposal'
  /api/latest/proposals/{id}/billing-method:
    put:
      tags:
      - Proposals
      summary: Update the payment method for a proposal
      operationId: addBillingMethod
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BillingMethodRequest'
      responses:
        '201':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingMethod'
  /api/latest/proposals/{id}/events:
    get:
      tags:
      - Proposals
      summary: List events for a proposal
      operationId: getProposalEvents
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: A list of events
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProposalEvent'
    post:
      tags:
      - Proposals
      summary: Create an event for a proposal
      operationId: addProposalEvent
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: email
        in: query
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProposalEvent'
      responses:
        '201':
          description: Add a new event
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProposalEvent'
  /api/latest/proposals/{id}/items:
    post:
      tags:
      - Proposals
      summary: Add a proposal item
      operationId: addProposalItem
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProposalItemRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Item'
    patch:
      tags:
      - Proposals
      summary: Batch add/update/remove proposal items
      operationId: updateProposalItems
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/ProposalItemRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Item'
  /api/latest/proposals/{id}/renewal:
    post:
      tags:
      - Proposals
      summary: Propagate renewal proposal changes to Subscription
      operationId: applyRenewal
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Proposal'
  /api/latest/proposals/archive:
    post:
      tags:
      - Proposals
      summary: Archive proposals
      operationId: archiveProposals
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MultipleIdRequest'
      responses:
        '200':
          description: OK
  /api/latest/proposals/bulk-expire:
    put:
      tags:
      - Proposals
      summary: Bulk expire proposals
      operationId: bulkExpireProposals
      parameters:
      - name: date
        in: query
        schema:
          type: string
      - name: orgId
        in: query
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
  /api/latest/proposals/{id}/cancel:
    post:
      tags:
      - Proposals
      summary: Cancel a proposal
      operationId: cancelProposal
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
  /api/latest/proposals/{id}/signing-document:
    post:
      tags:
      - Proposals
      summary: Create the signing document for a proposal
      operationId: createSigningDocument
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: email
        in: query
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SigningDocumentCreateRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SigningDocument'
    delete:
      tags:
      - Proposals
      summary: Delete the signing document for a proposal
      operationId: cancelSigningDocument
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: email
        in: query
        schema:
          type: string
      - name: reason
        in: query
        schema:
          type: string
      responses:
        '200':
          description: OK
  /api/latest/proposals/clear-legacy-checkout:
    post:
      tags:
      - Proposals
      summary: Clear legacy checkout flag from all proposals
      operationId: clearLegacyCheckout
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrgRequest'
      responses:
        '200':
          description: OK
  /api/latest/proposals/{id}/copy:
    post:
      tags:
      - Proposals
      summary: Copy a proposal
      operationId: copyProposal
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: strategy
        in: query
        schema:
          type: string
          enum:
          - errorOnInactiveProducts
          - skipInactiveProducts
          - upgradeInactiveProducts
          - makeTemplate
      responses:
        '201':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Proposal'
  /api/latest/proposals/{id}/invoice-config:
    post:
      tags:
      - Proposals
      summary: Add new invoice configuration to proposal
      operationId: createInvoiceConfiguration
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InvoiceConfigurationRequest'
      responses:
        '201':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvoiceConfiguration'
    delete:
      tags:
      - Proposals
      summary: Delete invoice configuration to proposal
      operationId: deleteInvoiceConfiguration
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
  /api/latest/proposals/{id}/create-payment-intent:
    post:
      tags:
      - Proposals
      summary: Create payment intent for a proposal
      operationId: createPaymentIntent
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StripePaymentIntentResponse'
  /api/latest/proposals:
    get:
      tags:
      - Proposals
      summary: List proposals
      operationId: getProposals
      parameters:
      - name: search
        in: query
        schema:
          type: string
      - name: sort
        in: query
        schema:
          type: string
      - name: include_archived
        in: query
        schema:
          type: boolean
      - 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/ProposalSummary'
    post:
      tags:
      - Proposals
      summary: Create a proposal
      operationId: createProposal
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProposalRequest'
      responses:
        '201':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Proposal'
  /api/latest/proposals/{id}/renewal-config:
    post:
      tags:
      - Proposals
      summary: Add new renewal configuration to proposal
      operationId: createRenewalConfiguration
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RenewalConfigurationRequest'
      responses:
        '201':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RenewalConfiguration'
    delete:
      tags:
      - Proposals
      summary: Delete auto-renewal configuration on proposal
      operationId: deleteRenewalConfiguration
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
  /api/latest/proposals/{id}:
    get:
      tags:
      - Proposals
      summary: Retrieve a proposal
      operationId: getProposal
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Proposal'
    delete:
      tags:
      - Proposals
      summary: Delete a proposal
      operationId: deleteProposal
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
    patch:
      tags:
      - Proposals
      summary: Update a proposal
      operationId: updateProposal
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProposalRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Proposal'
  /api/latest/proposals/{id}/tax-estimate:
    post:
      tags:
      - Proposals
      summary: Estimate tax for a proposal
      operationId: estimateProposalTax
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '201':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Proposal'
  /api/latest/proposals/{id}/upgrades:
    get:
      tags:
      - Proposals
      summary: List upgrades for a proposal
      operationId: getAvailableProposalUpgrades
      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/ProductUpgrade'
  /api/latest/proposals/external/{externalId}:
    get:
      tags:
      - Proposals
      summary: Retrieve a proposal by external ID
      operationId: getProposalByExternalId
      parameters:
      - name: externalId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Proposal'
  /api/latest/proposals/{id}/pdf-view:
    get:
      tags:
      - Proposals
      summary: View a proposal document
      operationId: getProposalPdf
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: email
        in: query
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/pdf:
              schema:
                type: string
                format: binary
  /api/latest/proposals/{id}/signing-diagnostics:
    get:
      tags:
      - Proposals
      summary: Retrieve signing diagnostics for a proposal
      operationId: getSigningDiagnostics
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: string
  /api/latest/proposals/{id}/signing-document/content:
    get:
      tags:
      - Proposals
      summary: Retrieve the signing document for a proposal
      operationId: getSigningDocumentContent
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
          content:
            application/pdf:
              schema:
                type: string
                format: binary
  /api/latest/proposals/{id}/signing-view:
    get:
      tags:
      - Proposals
      summary: Retrieve signing view for a proposal
      operationId: getSigningView
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: returnUrl
        in: query
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SigningDocumentViewResponse'
  /api/latest/proposals/{id}/payment-method/{paymentType}/init:
    post:
      tags:
      - Proposals
      summary: Initialize plaid for a proposal
      operationId: initPaymentMethod
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: paymentType
        in: path
        required: true
        schema:
          type: string
          enum:
          - ach
          - cc
          - check
          - custom
          - direct_debit
          - wire
          - external
          - manual
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentMethodInitResponse'
  /api/latest/proposals/{id}/billing-invites:
    post:
      tags:
      - Proposals
      summary: Share a proposal
      operationId: inviteBillingContact
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: email
        in: query
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateContactRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Proposal'
  /api/latest/proposals/maintenance:
    post:
      tags:
      - Proposals
      summary: 'Perform proposal maintenance: expire and regenerate'
      operationId: maintainProposals
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrgRequest'
      responses:
        '200':
          description: OK
  /api/latest/proposals/{id}/preview:
    get:
      tags:
      - Proposals
      summary: Preview a proposal
      operationId: previewProposal
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Proposal'
  /api/latest/proposals/{id}/delta-spans/preview:
    get:
      tags:
      - Proposals
      summary: Preview proposal delta spans
      operationId: previewProposalDeltaSpans
      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/ItemDeltaSpansResponse'
  /api/latest/proposals/{id}/request:
    post:
      tags:
      - Proposals
      summary: Create a proposal as buyer
      operationId: requestNewProposal
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: email
        in: query
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestNewProposalRequest'
      responses:
        '200':
          description: OK
  /api/latest/proposals/restore:
    post:
      tags:
      - Proposals
      summary: Restore proposals
      operationId: restoreProposals
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MultipleIdRequest'
      responses:
        '200':
          description: OK
  /api/latest/proposals/{id}/set-renewal-billing:
    post:
      tags:
      - Proposals
      summary: System auth required. Update renewal proposals with previous accepted. Useful for fixing billing methods on renewals.
      operationId: setBillingMethodOnRenewal
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '201':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Proposal'
  /api/latest/proposals/{id}/toggle-legacy-checkout:
    post:
      tags:
      - Proposals
      summary: Toggle legacy checkout flag for a specific proposal
      operationId: toggleLegacyCheckout
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
  /api/latest/proposals/{id}/checkout-state:
    patch:
      tags:
      - Proposals
      summary: Update a proposal checkout state
      operationId: updateCheckoutStateAsBuyer
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: email
        in: query
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BuyerProposalRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Proposal'
  /api/latest/proposals/{id}/cover-letter:
    put:
      tags:
      - Proposals
      summary: Update a cover letter
      operationId: updateCoverLetter
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CoverLetterRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Proposal'
  /api/latest/proposals/{id}/customer:
    patch:
      tags:
      - Proposals
      summary: Update billing info for a proposal
      operationId: updateCustomerAsBuyer
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: email
        in: query
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BuyerUpdateCustomerRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Customer'
  /api/latest/proposals/{ids}/pricing:
    post:
      tags:
      - Proposals
      summary: System auth required. Update item pricing and schedules. Useful after out-of-band item adjustments.
      operationId: updateProposalsPricing
      parameters:
      - name: ids
        in: path
        required: true
        schema:
          type: string
      responses:
        '201':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Proposal'
  /api/latest/proposals/{id}/signing-update:
    post:
      tags:
      - Proposals
      summary: Update the signing for a proposal. poll=true indicates that polling protection should be used, false or null that there is an expected update.
      operationId: updateSigningDocument
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: poll
        in: query
        schema:
          type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Proposal'
  /api/latest/proposals/{id}/view:
    get:
      tags:
      - Proposals
      summary: View a proposal as buyer
      operationId: viewProposal
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: email
        in: query
        schema:
          type: string
      - name: peek
        in: query
        schema:
          type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Proposal'
  /api/latest/data/proposal-templates:
    get:
      tags:
      - Proposals
      summary: List proposal templates
      operationId: listVisibleTemplates
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProposalTemplateSummary'
components:
  schemas:
    OrganizationSummary:
      type: object
      properties:
        logoUrl:
          type: string
        id:
          type: string
          format: uuid
        name:
          type: string
        internalName:
          type: string
        billingAddress:
          $ref: '#/components/schemas/Address'
        branding:
          type: object
          additionalProperties:
            type: object
    Proposal:
      required:
      - amount
      - amountFormatted
      - archived
      - attachments
      - baseAmount
      - baseAmountFormatted
      - billingPeriods
      - createdAt
      - currency
      - deleted
      - displayStatus
      - effectiveStartDate
      - id
      - legacyCheckout
      - name
      - overrideRanges
      - proposalContacts
      - proposalItems
      - proposalType
      - schedules
      - signed
      - status
      - syncable
      - termLengthMonths
      - termQty
      - termType
      - updatedAt
      type: object
      properties:
        id:
          type: string
          format: uuid
        createdAt:
          type: string
          format: date-time
        createdBy:
          type: string
        updatedAt:
          type: string
          format: date-time
        updatedBy:
          type: string
        proposalItems:
          type: array
          items:
            $ref: '#/components/schemas/Item'
        name:
          type: string
        customTerms:
          type: string
        externalLink:
          type: string
        deleted:
          type: boolean
        archived:
          type: boolean
        legacyCheckout:
          type: boolean
        owner:
          $ref: '#/components/schemas/User'
        displayStatus:
          type: string
          enum:
          - draft
          - active
          - approved
          - archived
          - expired
          - cancelled
          - deleted
          - completed
          - pending_approval
          - shared_payment_selection
          - shared_schedule_selection
          - shared_active
          - signed_awaiting_payment
        amount:
          type: integer
          format: int64
        proposalContacts:
          type: array
          items:
            $ref: '#/components/schemas/ProposalContact'
        signingDocument:
          $ref: '#/components/schemas/SigningDocument'
        attachments:
          type: array
          items:
            $ref: '#/components/schemas/ProposalAttachment'
        options:
          type: object
          additionalProperties:
            type

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