Cuvo Health Acp API

Agentic Commerce Protocol checkout ($0 discovery call)

Operations 5

POST /api/acp/checkout_sessions Create ACP checkout session #
GET /api/acp/checkout_sessions/{id} Retrieve ACP checkout session #
POST /api/acp/checkout_sessions/{id} Update ACP checkout session #
POST /api/acp/checkout_sessions/{id}/complete Complete ACP checkout session #
POST /api/acp/checkout_sessions/{id}/cancel Cancel ACP checkout session #

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/cuvo-co:cuvo-co-acp-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

cuvo-co-acp-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Cuvo Health public Acp API
  version: '2026-08-23'
  summary: Read-only content, discovery, and $0 discovery-call booking endpoints for AI agents. No authentication, no API keys.
  description: 'The public machine interface of cuvo.co, the Cuvo Health white label telehealth platform. Every endpoint is unauthenticated and free; all content mirrors claims already published on the human-readable pages. Human documentation lives at https://cuvo.co/developers (developer portal) and https://cuvo.co/api-docs (endpoint reference).


    Versioning: date-based. This document describes version 2026-08-23, echoed on every response in the API-Version header; requests may pin a version by sending the API-Version request header. Breaking changes ship as a new version date, the prior version keeps working for at least 90 days, and responses on a deprecated version carry Deprecation and Sunset headers for that whole window.


    Errors: unless an operation says otherwise, errors are RFC 9457 application/problem+json with a machine-readable "code" and a "hint" describing the recovery step. The ACP endpoints return the Agentic Commerce Protocol''s own error body (a messages array); the A2A and MCP endpoints return JSON-RPC 2.0 error objects.


    Rate limits: 300 requests per 60 seconds per IP on dynamic endpoints, advertised live in the RateLimit response headers; a 429 carries Retry-After. Statically cached endpoints advertise the policy in RateLimit-Policy.


    Related non-API resources: the sitemap at /sitemap.xml, the RSS feed at /feed.xml, the Schema Feeds map at /schemamap.xml (schemamap directive in robots.txt), scoped llms.txt files (/developers/llms.txt, /blog/llms.txt, /compare/llms.txt, /pricing/llms.txt, /api/llms.txt, /docs/llms.txt), and plain-markdown mirrors of the content pages: /index.md for the homepage, and .md appended to /pricing, /developers, /about, /booking, /terms, /privacy, /security, any /blog/, or any /compare/ URL. Every mirror opens with YAML frontmatter (title, description, canonical, last-updated).'
  contact:
    name: Cuvo Health team
    url: https://cuvo.co/booking
  termsOfService: https://cuvo.co/terms
  license:
    name: Proprietary (free to call; content mirrors the published site)
    url: https://cuvo.co/terms
servers:
- url: https://cuvo.co
security: []
tags:
- name: acp
  description: Agentic Commerce Protocol checkout ($0 discovery call)
paths:
  /api/acp/checkout_sessions:
    parameters:
    - $ref: '#/components/parameters/ApiVersion'
    post:
      operationId: createAcpCheckoutSession
      parameters:
      - $ref: '#/components/parameters/IdempotencyKey'
      tags:
      - acp
      summary: Create ACP checkout session
      description: Creates a checkout session for the single $0 discovery-call item. Body optional; buyer details may be supplied here or at complete.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                buyer:
                  $ref: '#/components/schemas/AcpBuyer'
        required: false
      responses:
        '201':
          description: Session created
          headers:
            API-Version:
              $ref: '#/components/headers/ApiVersion'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimitPolicy'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimitLimit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AcpCheckoutSession'
        '429':
          $ref: '#/components/responses/RateLimited'
        default:
          $ref: '#/components/responses/Problem'
  /api/acp/checkout_sessions/{id}:
    parameters:
    - $ref: '#/components/parameters/ApiVersion'
    get:
      operationId: getAcpCheckoutSession
      tags:
      - acp
      summary: Retrieve ACP checkout session
      description: 'Returns the canonical session state. Sessions are stateless: the cart always holds the one $0 item.'
      parameters:
      - name: id
        in: path
        required: true
        description: Checkout session id, as returned by createAcpCheckoutSession.
        schema:
          type: string
          pattern: ^acp_cs_[0-9a-f-]{36}$
      responses:
        '200':
          description: Canonical session state
          headers:
            API-Version:
              $ref: '#/components/headers/ApiVersion'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimitPolicy'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimitLimit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AcpCheckoutSession'
        '404':
          description: Malformed or unknown session id (ACP error body).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AcpError'
        '429':
          $ref: '#/components/responses/RateLimited'
        default:
          $ref: '#/components/responses/Problem'
    post:
      operationId: updateAcpCheckoutSession
      tags:
      - acp
      summary: Update ACP checkout session
      description: Echoes the merged session state; sessions are stateless and the complete call is authoritative.
      parameters:
      - name: id
        in: path
        required: true
        description: Checkout session id, as returned by createAcpCheckoutSession.
        schema:
          type: string
          pattern: ^acp_cs_[0-9a-f-]{36}$
      - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                buyer:
                  $ref: '#/components/schemas/AcpBuyer'
        required: false
      responses:
        '200':
          description: Merged session state
          headers:
            API-Version:
              $ref: '#/components/headers/ApiVersion'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimitPolicy'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimitLimit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AcpCheckoutSession'
        '404':
          description: Malformed or unknown session id (ACP error body).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AcpError'
        '429':
          $ref: '#/components/responses/RateLimited'
        default:
          $ref: '#/components/responses/Problem'
  /api/acp/checkout_sessions/{id}/complete:
    parameters:
    - $ref: '#/components/parameters/ApiVersion'
    post:
      operationId: completeAcpCheckoutSession
      tags:
      - acp
      summary: Complete ACP checkout session
      description: 'Requires buyer.first_name and buyer.email; no payment_data (total is $0). Notifies the Cuvo team and returns an order whose permalink_url is the /booking scheduling page. Retries with the same session id (or Idempotency-Key) do not duplicate the notification. Sandbox: a buyer email on an RFC 2606 reserved domain (example.com and friends) completes the flow without notifying anyone.'
      parameters:
      - name: id
        in: path
        required: true
        description: Checkout session id, as returned by createAcpCheckoutSession.
        schema:
          type: string
          pattern: ^acp_cs_[0-9a-f-]{36}$
      - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                buyer:
                  $ref: '#/components/schemas/AcpBuyer'
              required:
              - buyer
      responses:
        '200':
          description: Completed session with order
          headers:
            API-Version:
              $ref: '#/components/headers/ApiVersion'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimitPolicy'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimitLimit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AcpCheckoutSession'
        '400':
          description: Missing or invalid buyer, or non-JSON body (ACP error body).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AcpError'
        '404':
          description: Malformed or unknown session id (ACP error body).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AcpError'
        '429':
          $ref: '#/components/responses/RateLimited'
        default:
          $ref: '#/components/responses/Problem'
  /api/acp/checkout_sessions/{id}/cancel:
    parameters:
    - $ref: '#/components/parameters/ApiVersion'
    post:
      operationId: cancelAcpCheckoutSession
      tags:
      - acp
      summary: Cancel ACP checkout session
      description: Returns the session in the canceled state.
      parameters:
      - name: id
        in: path
        required: true
        description: Checkout session id, as returned by createAcpCheckoutSession.
        schema:
          type: string
          pattern: ^acp_cs_[0-9a-f-]{36}$
      - $ref: '#/components/parameters/IdempotencyKey'
      responses:
        '200':
          description: Canceled session
          headers:
            API-Version:
              $ref: '#/components/headers/ApiVersion'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimitPolicy'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimitLimit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AcpCheckoutSession'
        '404':
          description: Malformed or unknown session id (ACP error body).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AcpError'
        '429':
          $ref: '#/components/responses/RateLimited'
        default:
          $ref: '#/components/responses/Problem'
components:
  headers:
    RateLimitLimit:
      description: Requests allowed per window (draft-07 form).
      schema:
        type: integer
    RateLimitPolicy:
      description: Rate-limit policy (draft-ietf-httpapi-ratelimit-headers structured field), e.g. "default";q=60;w=60.
      schema:
        type: string
    RateLimit:
      description: 'Live quota state: "default";r=<remaining>;t=<seconds to reset>.'
      schema:
        type: string
    ApiVersion:
      description: The API version that served this response.
      schema:
        type: string
        enum:
        - '2026-08-23'
    RateLimitRemaining:
      description: Requests remaining in the current window.
      schema:
        type: integer
    RateLimitReset:
      description: Seconds until the current window resets.
      schema:
        type: integer
  schemas:
    AcpAmount:
      type: object
      description: A display total row. Amounts are integer cents.
      properties:
        type:
          type: string
        display_text:
          type: string
        amount:
          type: integer
      required:
      - type
      - amount
    AcpMessage:
      type: object
      description: Informational or error message in a session.
      properties:
        type:
          type: string
          enum:
          - info
          - error
        code:
          type: string
        content_type:
          type: string
          enum:
          - plain
        content:
          type: string
      required:
      - type
      - content
    AcpBuyer:
      type: object
      description: Buyer contact details for the ACP checkout.
      properties:
        first_name:
          type: string
        last_name:
          type: string
        email:
          type: string
          format: email
        phone_number:
          type: string
      required:
      - first_name
      - email
    AcpOrder:
      type: object
      description: Order returned on completion; permalink_url is the /booking page where the buyer schedules the call.
      properties:
        id:
          type: string
        checkout_session_id:
          type: string
        permalink_url:
          type: string
          format: uri
      required:
      - id
      - checkout_session_id
      - permalink_url
    AcpError:
      type: object
      description: 'ACP error body: a messages array whose entries have type "error" and a machine-readable code.'
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/AcpMessage'
      required:
      - messages
    AcpLineItem:
      type: object
      description: The single $0 discovery-call line item.
      properties:
        id:
          type: string
        item:
          type: object
          properties:
            id:
              type: string
          required:
          - id
        quantity:
          type: integer
        name:
          type: string
        description:
          type: string
        images:
          type: array
          items:
            type: string
            format: uri
        unit_amount:
          type: integer
        totals:
          type: array
          items:
            $ref: '#/components/schemas/AcpAmount'
      required:
      - id
      - item
      - quantity
      - unit_amount
    Problem:
      type: object
      description: RFC 9457 problem detail. code is stable and machine-readable; hint says what to do next. Documented at https://cuvo.co/developers#errors
      properties:
        type:
          type: string
          format: uri
        title:
          type: string
        status:
          type: integer
        detail:
          type: string
        code:
          type: string
          description: Machine-readable error code (snake_case), e.g. not_found, method_not_allowed, rate_limited.
        hint:
          type: string
          description: Suggested next step for the caller.
        instance:
          type: string
      required:
      - title
      - status
      - detail
      - code
    AcpCheckoutSession:
      type: object
      description: ACP checkout session (agenticcommerce.dev, spec 2026-01-30).
      properties:
        id:
          type: string
          pattern: ^acp_cs_[0-9a-f-]{36}$
        protocol:
          type: object
          properties:
            version:
              type: string
          required:
          - version
        capabilities:
          type: object
        status:
          type: string
          enum:
          - not_ready_for_payment
          - ready_for_payment
          - completed
          - canceled
        currency:
          type: string
          enum:
          - usd
        line_items:
          type: array
          items:
            $ref: '#/components/schemas/AcpLineItem'
        fulfillment_details:
          type:
          - object
          - 'null'
        fulfillment_options:
          type: array
          items:
            type: object
        selected_fulfillment_options:
          type: array
          items:
            type: object
        totals:
          type: array
          items:
            $ref: '#/components/schemas/AcpAmount'
        messages:
          type: array
          items:
            $ref: '#/components/schemas/AcpMessage'
        links:
          type: array
          items:
            type: object
            properties:
              type:
                type: string
              url:
                type: string
                format: uri
            required:
            - type
            - url
        buyer:
          $ref: '#/components/schemas/AcpBuyer'
        order:
          $ref: '#/components/schemas/AcpOrder'
      required:
      - id
      - status
      - currency
      - line_items
      - totals
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      description: Client-generated key for safe retries on mutating operations. The key is echoed on the response; sessions are stateless so replays return the same result, and a retried complete never duplicates the sales notification.
      schema:
        type: string
        maxLength: 255
    ApiVersion:
      name: API-Version
      in: header
      required: false
      description: Pin a specific API version (date-based). Omitting it selects the current version; every response echoes the version served.
      schema:
        type: string
        enum:
        - '2026-08-23'
  responses:
    Problem:
      description: Error (RFC 9457 problem detail with machine-readable code and recovery hint).
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
    RateLimited:
      description: Rate limit exceeded. Wait Retry-After seconds, then retry.
      headers:
        API-Version:
          $ref: '#/components/headers/ApiVersion'
        RateLimit-Policy:
          $ref: '#/components/headers/RateLimitPolicy'
        RateLimit:
          $ref: '#/components/headers/RateLimit'
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimitLimit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimitRemaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimitReset'
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'