FUSE Health Orders API

The Orders API from FUSE Health — 8 operation(s) for orders.

GitHub OpenAPI

Operations 8

GET /api/v1/orders Paginated orders. Each row includes the per-order feeBreakdown #
GET /api/v1/orders/stats Aggregate order + earnings stats #
GET /api/v1/orders/summary Aggregate order breakdowns — by status, program, shipping state, and refunds… #
GET /api/v1/orders/{id} Order detail with the full fee waterfall (matches the brand-admin UI) #
GET /api/v1/orders/{id}/events Chronological status/event timeline for one order #
GET /api/v1/orders/{id}/lab-status Lab lifecycle state and lab-kit tracking for one order #
GET /api/v1/orders/{id}/visit-status Telehealth visit status and appointment time for one order #
GET /api/v1/orders/needs-attention List orders needing attention (failed payment / dunning queue) #

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/fusehealth-com:fusehealth-com-orders-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

fusehealth-com-orders-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: FUSE Brand API (External) Orders API
  version: 1.0.0
  description: 'Server-to-server API exposing the FUSE brand-admin surface so a single brand/tenant can build its own admin frontend. Every request is authenticated with an API key bound to exactly one clinic; all data is auto-scoped to that clinic and cannot reach another brand''s data. Isolation is enforced by application-layer clinic filtering on every query.


    COVERAGE: 218 operations across 180 paths, and EVERY ONE is available to every brand. There is no per-clinic enablement step. What governs access: your API key and its scopes, the clinic the key belongs to (every read and write is filtered to it), your plan''s entitlements for the two commercially-gated areas — Affiliates (`AFFILIATES_TIER_REQUIRED`) and CRM Connect (`CRM_TIER_REQUIRED`) — and rate limits.


    AUTH: the external /api/v1 surface uses an API key (`x-api-key`, ApiKeyAuth). Key management (/api-keys) and /auth/signin live at the API root and use a brand-admin JWT (BearerAuth); /auth/signin itself is unauthenticated.


    SCOPES: every key carries scopes; read-only is the default and mutating endpoints require the `write` scope (403 INSUFFICIENT_SCOPE otherwise). Keys default to a 1-year expiry.


    RATE LIMITING: every endpoint may additionally return `429 Too Many Requests` with a `Retry-After` header; 429 is not repeated on each operation below.


    PLATFORM FIELDS: product cost, fees, pharmacy routing, doctor questions and FUSE approvals are set by FUSE, not by the brand. Any write (POST/PUT/PATCH/DELETE) whose JSON body carries one of those fields at any depth — for example `pharmacyPrice`, `shippingFeeUsd`, `coolerFeeUsd`, `pharmacyId`, `preferredPharmacyId`, `pharmacyProvider`, `requiredDoctorQuestions`, `facilitationFee`, `placeholderPrice`, `legalBusinessName`, `isTemplate` or `tenantManagerApproved` — is refused with `403 PLATFORM_FIELD`, whose `fields` array lists the offending paths; remove them and resend. (One exception: `POST /api/v1/products` still accepts the `pharmacyPrice` its schema requires, and ignores it.) 403 PLATFORM_FIELD is not repeated on each operation below.'
servers:
- url: https://api-dev.fusehealth.com
  description: Development
- url: https://api.fusehealth.com
  description: Production
security:
- ApiKeyAuth: []
tags:
- name: Orders
paths:
  /api/v1/orders:
    get:
      tags:
      - Orders
      summary: Paginated orders. Each row includes the per-order feeBreakdown
      operationId: getApiV1Orders
      description: Paginated orders. Each row includes the per-order feeBreakdown.
      security:
      - ApiKeyAuth: []
      parameters:
      - name: page
        in: query
        required: false
        schema:
          type: integer
          default: 1
        example: '1'
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          default: 25
        example: '25'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    type: string
                  data: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/v1/orders/stats:
    get:
      tags:
      - Orders
      summary: Aggregate order + earnings stats
      operationId: getApiV1OrdersStats
      description: Aggregate order + earnings stats.
      security:
      - ApiKeyAuth: []
      parameters:
      - name: startDate
        in: query
        required: false
        schema:
          type: string
        example: '2026-01-01'
      - name: endDate
        in: query
        required: false
        schema:
          type: string
        example: '2026-12-31'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    type: string
                  data: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/v1/orders/summary:
    get:
      tags:
      - Orders
      summary: Aggregate order breakdowns — by status, program, shipping state, and refunds…
      operationId: getApiV1OrdersSummary
      description: 'Counts and sums only: orders by status, orders and paid sales by program, orders by shipping state, and refund requests by status with the approved total. Never returns an order id, order number, date, patient or medication. A shipping state with fewer than 5 orders is never named; all such states are reported together in `otherStates`. Safe for the AI connector.'
      security:
      - ApiKeyAuth: []
      parameters:
      - name: startDate
        in: query
        required: false
        schema:
          type: string
        example: '2026-01-01'
      - name: endDate
        in: query
        required: false
        schema:
          type: string
        example: '2026-12-31'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    type: string
                  data:
                    type: object
                    properties:
                      window:
                        type: object
                        properties:
                          startDate:
                            type:
                            - string
                            - 'null'
                          endDate:
                            type:
                            - string
                            - 'null'
                      totalOrders:
                        type: integer
                      byStatus:
                        type: array
                        items:
                          type: object
                          properties:
                            status:
                              type: string
                            orders:
                              type: integer
                      byProgram:
                        type: array
                        items:
                          type: object
                          properties:
                            programId:
                              type:
                              - string
                              - 'null'
                            programName:
                              type:
                              - string
                              - 'null'
                            orders:
                              type: integer
                            paidSales:
                              type: number
                      byState:
                        type: array
                        description: Only states with 5 or more orders.
                        items:
                          type: object
                          properties:
                            state:
                              type: string
                            orders:
                              type: integer
                      otherStates:
                        type:
                        - object
                        - 'null'
                        description: States with fewer than 5 orders, unnamed — how many, and their orders together.
                        properties:
                          states:
                            type: integer
                          orders:
                            type: integer
                      refunds:
                        type: object
                        properties:
                          byStatus:
                            type: array
                            items:
                              type: object
                              properties:
                                status:
                                  type: string
                                requests:
                                  type: integer
                          approvedAmount:
                            type: number
        '400':
          description: Invalid startDate or endDate
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/v1/orders/{id}:
    get:
      tags:
      - Orders
      summary: Order detail with the full fee waterfall (matches the brand-admin UI)
      operationId: getApiV1OrdersById
      description: Order detail with the full fee waterfall (matches the brand-admin UI).
      security:
      - ApiKeyAuth: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    type: string
                  data:
                    $ref: '#/components/schemas/OrderBrandView'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v1/orders/{id}/events:
    get:
      tags:
      - Orders
      summary: Chronological status/event timeline for one order
      operationId: getApiV1OrdersByIdEvents
      description: Chronological status/event timeline for one order.
      security:
      - ApiKeyAuth: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    type: string
                  data:
                    type: object
                    properties:
                      events:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                            eventType:
                              type: string
                            actorType:
                              type: string
                            createdAt:
                              type: string
                              format: date-time
                            metadata:
                              type: object
                      hasPrescriptionPdf:
                        type: boolean
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v1/orders/{id}/lab-status:
    get:
      tags:
      - Orders
      summary: Lab lifecycle state and lab-kit tracking for one order
      operationId: getApiV1OrdersByIdLabStatus
      description: 'Lab lifecycle STATE for one of the key clinic''s orders: the current stage, a stage-by-stage timeline with timestamps, and the lab-kit shipment carrier/tracking numbers for both legs (FUSE to patient, patient to lab).


        This endpoint deliberately exposes NO lab result content — no analyte values, reference ranges, interpretations, result documents, requisition PDFs, or results-review booking links. `resultsAvailableAt` is a timestamp only: it tells you the lab has reported, not what it reported.


        Requires the `v1_fulfillment` endpoint group to be enabled for your clinic (contact FUSE). Returns 404 for an unknown, malformed, or another clinic''s order id.'
      security:
      - ApiKeyAuth: []
      parameters:
      - name: id
        in: path
        required: true
        description: Order id (UUID). Must belong to the API key's clinic.
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  data:
                    type: object
                    properties:
                      orderId:
                        type: string
                        format: uuid
                      isLabGated:
                        type: boolean
                        description: Whether this order uses the lab-gated split-payment flow.
                      orderStatus:
                        type:
                        - string
                        - 'null'
                        description: The order's overall status. Lab-related values include `awaiting_lab_results`, `awaiting_renewal_lab`, `authorization_failed`, `authorized_awaiting_review`.
                      stage:
                        type:
                        - string
                        - 'null'
                        description: Current lab lifecycle stage; `null` when the order has no lab leg yet.
                        enum:
                        - requisition_created
                        - shipped_to_patient
                        - delivered_to_patient
                        - shipped_to_lab
                        - received_by_lab
                        - results
                        - null
                      timeline:
                        type: array
                        description: All six stages in lifecycle order. `reached` is true for the current stage and every stage before it. `occurredAt` is null for unreached stages and for the two shipment stages, which carry carrier/tracking but no dedicated timestamp.
                        items:
                          type: object
                          properties:
                            stage:
                              type: string
                              enum:
                              - requisition_created
                              - shipped_to_patient
                              - delivered_to_patient
                              - shipped_to_lab
                              - received_by_lab
                              - results
                            reached:
                              type: boolean
                            occurredAt:
                              type:
                              - string
                              - 'null'
                              format: date-time
                      kitShipmentToPatient:
                        type: object
                        description: Outbound leg — lab kit shipped to the patient.
                        properties:
                          carrier:
                            type:
                            - string
                            - 'null'
                          trackingNumber:
                            type:
                            - string
                            - 'null'
                          deliveredAt:
                            type:
                            - string
                            - 'null'
                            format: date-time
                      kitShipmentToLab:
                        type: object
                        description: Return leg — patient's sample shipped to the lab.
                        properties:
                          carrier:
                            type:
                            - string
                            - 'null'
                          trackingNumber:
                            type:
                            - string
                            - 'null'
                          receivedAt:
                            type:
                            - string
                            - 'null'
                            format: date-time
                      resultsAvailableAt:
                        type:
                        - string
                        - 'null'
                        format: date-time
                        description: When the lab reported results. TIMESTAMP ONLY — the result content itself is never exposed on this API.
              example:
                success: true
                data:
                  orderId: 8f14e45f-ceea-467a-9b2b-1c0a1d0e2f30
                  isLabGated: true
                  orderStatus: awaiting_lab_results
                  stage: received_by_lab
                  timeline:
                  - stage: requisition_created
                    reached: true
                    occurredAt: '2026-04-01T10:00:00.000Z'
                  - stage: shipped_to_patient
                    reached: true
                    occurredAt: null
                  - stage: delivered_to_patient
                    reached: true
                    occurredAt: '2026-04-03T10:00:00.000Z'
                  - stage: shipped_to_lab
                    reached: true
                    occurredAt: null
                  - stage: received_by_lab
                    reached: true
                    occurredAt: '2026-04-07T10:00:00.000Z'
                  - stage: results
                    reached: false
                    occurredAt: null
                  kitShipmentToPatient:
                    carrier: UPS
                    trackingNumber: 1Z999AA10123456784
                    deliveredAt: '2026-04-03T10:00:00.000Z'
                  kitShipmentToLab:
                    carrier: FedEx
                    trackingNumber: '774899999999'
                    receivedAt: '2026-04-07T10:00:00.000Z'
                  resultsAvailableAt: null
        '403':
          description: The `v1_fulfillment` endpoint group is not enabled for your clinic
        '404':
          description: Order not found. Returned for an unknown id, a malformed (non-UUID) id, and an id belonging to another clinic — the three are deliberately indistinguishable.
  /api/v1/orders/{id}/visit-status:
    get:
      tags:
      - Orders
      summary: Telehealth visit status and appointment time for one order
      operationId: getApiV1OrdersByIdVisitStatus
      description: 'Whether the patient has booked their live (synchronous) visit, has not booked yet, or did not attend — plus the appointment time when one is scheduled. This is the read side of the `appointment.scheduled` / `appointment.cancelled` webhooks: those notify you that something changed and carry ids only, and this endpoint tells you what the state now is.


        `visitStatus` is a FUSE-defined value, deliberately independent of any doctor network''s internal naming, so it is stable across changes FUSE makes behind the scenes. Treat it as a closed set and handle an unrecognised value defensively.


        Before chasing a patient to book, check `bookingRequired`. Asynchronous treatments never require a live appointment and rest permanently at `not_booked` — that is normal, not an outstanding task. `bookingRequired` is `null` when the order predates visit-type resolution (unknown, not "no appointment needed").


        This endpoint exposes NO clinical content: no prescriber name, NPI or phone, no prescribed medications, no visit outcome, and no lab results. A referred visit is already visible via the order''s own `status`.


        Requires the `v1_fulfillment` endpoint group to be enabled for your clinic (contact FUSE). Returns 404 for an unknown, malformed, or another clinic''s order id.'
      security:
      - ApiKeyAuth: []
      parameters:
      - name: id
        in: path
        required: true
        description: Order id (UUID). Must belong to the API key's clinic.
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  data:
                    type: object
                    properties:
                      orderId:
                        type: string
                        format: uuid
                      visitStatus:
                        type: string
                        description: '`not_booked` — no live appointment is confirmed. Either the patient has not booked yet, or the treatment is asynchronous in their state and never requires one (check `bookingRequired`).

                          `booked` — a live visit is confirmed; see `scheduledAt`.

                          `no_show` — the patient did not attend the confirmed appointment.

                          `concluded` — the visit is complete (consult finished and/or prescription written); no further patient action is needed.

                          `cancelled` — the visit was cancelled; FUSE cancels the order alongside it, so the order''s own status reflects it too.'
                        enum:
                        - not_booked
                        - booked
                        - no_show
                        - concluded
                        - cancelled
                      bookingRequired:
                        type:
                        - boolean
                        - 'null'
                        description: Whether this order's visit type requires a live appointment at all. `false` for asynchronous treatments. `null` when the order predates visit-type resolution — unknown, NOT "no appointment needed".
                      scheduledAt:
                        type:
                        - string
                        - 'null'
                        format: date-time
                        description: The appointment time, when the doctor network supplied one. Retained after a `no_show` (it is the appointment that was missed). `null` whenever no appointment has been scheduled.
                      lastSyncedAt:
                        type:
                        - string
                        - 'null'
                        format: date-time
                        description: When the doctor network last sent FUSE any update about this visit. Use it to tell "no appointment has been booked" apart from "we have not heard anything recently" — a stale value on an order you expect to be progressing is worth raising with FUSE.
              example:
                success: true
                data:
                  orderId: 8f14e45f-ceea-467a-9b2b-1c0a1d0e2f30
                  visitStatus: booked
                  bookingRequired: true
                  scheduledAt: '2026-08-03T15:30:00.000Z'
                  lastSyncedAt: '2026-08-01T09:00:00.000Z'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          description: The `v1_fulfillment` endpoint group is not enabled for your clinic
        '404':
          description: Order not found. Returned for an unknown id, a malformed (non-UUID) id, and an id belonging to another clinic — the three are deliberately indistinguishable.
  /api/v1/orders/needs-attention:
    get:
      tags:
      - Orders
      summary: List orders needing attention (failed payment / dunning queue)
      operationId: getApiV1OrdersNeedsattention
      description: 'The dunning queue: this clinic''s orders in `payment_due` whose most recent charge failed, enriched with Stripe retry context. Clinic-scoped by the API key. PHI: patient first/last name only (data-minimized). Read scope.'
      security:
      - ApiKeyAuth: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  data:
                    type: object
                    properties:
                      count:
                        type: integer
                      items:
                        type: array
                        items:
                          type: object
                          properties:
                            orderId:
                              type: string
                              format: uuid
                            orderNumber:
                              type: string
                            patientName:
                              type:
                              - string
                              - 'null'
                            programName:
                              type:
                              - string
                              - 'null'
                            paymentFailedAt:
                              type:
                              - string
                              - 'null'
                              format: date-time
                            lastPaymentError:
                              type:
                              - string
                              - 'null'
                            enrichment:
                              type: object
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  responses:
    Unauthorized:
      description: Missing, invalid, inactive, or expired API key (or JWT)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    NotFound:
      description: Resource not found (or not owned by the key's clinic)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
  schemas:
    OrderBrandView:
      description: Sanitized brand-facing order (whitelisted fields only).
      type: object
      properties:
        id:
          type: string
          format: uuid
        orderNumber:
          type: string
        status:
          type: string
        totalAmount:
          type: number
        subtotalAmount:
          type: number
        discountAmount:
          type: number
        taxAmount:
          type: number
        shippingAmount:
          type: number
        brandAmount:
          type: number
        billingInterval:
          type: string
        createdAt:
          type: string
          format: date-time
        shippedAt:
          type:
          - string
          - 'null'
          format: date-time
        deliveredAt:
          type:
          - string
          - 'null'
          format: date-time
        fulfillmentType:
          type: string
        approvedByDoctor:
          type: boolean
        feeBreakdown:
          type: object
          additionalProperties: true
          description: Per-order fee waterfall.
        user:
          type: object
          properties:
            id:
              type: string
              format: uuid
            firstName:
              type: string
            lastName:
              type: string
            email:
              type: string
            phoneNumber:
              type:
              - string
              - 'null'
        orderItems:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
              quantity:
                type: integer
              unitPrice:
                type: number
              totalPrice:
                type: number
              product:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                  name:
                    type: string
        payment:
          type: object
          properties:
            status:
              type: string
            paymentMethod:
              type: string
        shippingAddress:
          type: object
          properties:
            address:
              type: string
            city:
              type: string
            state:
              type: string
            zipCode:
              type: string
            country:
              type: string
        shippingOrders:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
              status:
                type: string
              trackingNumber:
                type:
                - string
                - 'null'
              trackingUrl:
                type:
                - string
                - 'null'
    ErrorEnvelope:
      description: 'Failure shape. NOTE: most modules use `message`; programs endpoints use `error`. Read both. Some errors include a machine-readable `code` and/or a `data` payload.'
      type: object
      properties:
        success:
          type: boolean
          enum:
          - false
        message:
          type: string
        error:
          type: string
        code:
          type: string
        data: {}
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: Clinic-scoped API key. Keep server-side; never expose in a browser or app bundle.
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: FUSE brand-admin JWT (from POST /auth/signin). Used ONLY by the key-management endpoints — the external /api/v1 surface never accepts JWTs, and API keys never work on key management.