FUSE Health Misc / Uploads API
The Misc / Uploads API from FUSE Health — 10 operation(s) for misc / uploads.
The Misc / Uploads API from FUSE Health — 10 operation(s) for misc / uploads.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/fusehealth-com:fusehealth-com-misc-uploads-api"
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.
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: 3.2.0
info:
title: FUSE Brand API (External) Misc / Uploads 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: Misc / Uploads
paths:
/api/v1/upload/logo:
post:
tags:
- Misc / Uploads
summary: Upload a logo to S3 and set Clinic.logo for the key's clinic (multipart, field…
operationId: postApiV1UploadLogo
description: Upload a logo to S3 and set Clinic.logo for the key's clinic (multipart, field `logo`).
security:
- ApiKeyAuth: []
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
logo:
type: string
format: binary
description: Upload file field
required:
- logo
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
message:
type: string
data: {}
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
/api/v1/teleform-removals:
get:
tags:
- Misc / Uploads
summary: Teleform wind-down rows for the clinic (no PHI)
operationId: getApiV1Teleformremovals
description: Teleform wind-down rows for the clinic (no PHI).
security:
- ApiKeyAuth: []
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/teleform-removals/{id}/cancel:
post:
tags:
- Misc / Uploads
summary: Cancel a scheduled teleform removal (own-clinic only)
operationId: postApiV1TeleformremovalsByIdCancel
description: Cancel a scheduled teleform removal (own-clinic only).
security:
- ApiKeyAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
reason:
type: string
example:
reason: Keeping this form active
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
message:
type: string
data: {}
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
/api/v1/notifications:
get:
tags:
- Misc / Uploads
summary: List the brand's notifications
operationId: getApiV1Notifications
description: The brand notification feed (order / financial / program / compliance), resolved via the key clinic's brand owner. Audience is locked to `brand` — a key can never read a patient feed. Read scope.
security:
- ApiKeyAuth: []
parameters:
- name: limit
in: query
required: false
schema:
type: integer
default: 30
- name: offset
in: query
required: false
schema:
type: integer
default: 0
- name: category
in: query
required: false
schema:
type: string
enum:
- order
- financial
- program
- compliance
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: object
properties:
notifications:
type: array
items:
type: object
unreadCount:
type: integer
total:
type: integer
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
/api/v1/notifications/read:
post:
tags:
- Misc / Uploads
summary: Mark brand notifications as read
operationId: postApiV1NotificationsRead
description: Marks the given brand-audience notification ids read (omit `ids` to mark all). Requires the `write` scope.
security:
- ApiKeyAuth: []
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
ids:
type: array
items:
type: string
format: uuid
description: Omit or send empty to mark every brand-audience notification read.
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: object
properties:
updated:
type: integer
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
/api/v1/coupons:
get:
tags:
- Misc / Uploads
summary: List the brand's customer coupons
operationId: getApiV1Coupons
description: The clinic's own customer-facing discount coupons. Discounts reduce customer-pays and brand profit only — pharmacy, doctor, Stripe and merchant fees are never discounted. Read scope.
security:
- ApiKeyAuth: []
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: array
items:
type: object
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
post:
tags:
- Misc / Uploads
summary: Create a customer coupon
operationId: postApiV1Coupons
description: Creates a coupon for the key's clinic (code unique per clinic, stored uppercase). Requires the `write` scope.
security:
- ApiKeyAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- code
- discountType
- discountValue
properties:
code:
type: string
description:
type:
- string
- 'null'
discountType:
type: string
enum:
- percent
- fixed
discountValue:
type: number
description: '> 0; ≤ 100 when discountType=percent.'
startsAt:
type:
- string
- 'null'
format: date-time
expiresAt:
type:
- string
- 'null'
format: date-time
isActive:
type: boolean
default: true
scope:
type: string
enum:
- first_charge
- all_charges
overMarginBehavior:
type: string
enum:
- reject
- cap
- absorb
maxRedemptions:
type:
- integer
- 'null'
perCustomerLimit:
type:
- integer
- 'null'
minOrderAmount:
type:
- number
- 'null'
responses:
'201':
description: Created
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: object
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
/api/v1/coupons/{id}:
get:
tags:
- Misc / Uploads
summary: Get one of the brand's coupons
operationId: getApiV1CouponsById
description: 404s unless the coupon belongs to the key's clinic. Read scope.
security:
- ApiKeyAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: object
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
put:
tags:
- Misc / Uploads
summary: Update one of the brand's coupons
operationId: putApiV1CouponsById
description: Updates a coupon owned by the key's clinic (404 otherwise). Requires the `write` scope.
security:
- ApiKeyAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
code:
type: string
description:
type:
- string
- 'null'
discountType:
type: string
enum:
- percent
- fixed
discountValue:
type: number
startsAt:
type:
- string
- 'null'
format: date-time
expiresAt:
type:
- string
- 'null'
format: date-time
isActive:
type: boolean
scope:
type: string
enum:
- first_charge
- all_charges
overMarginBehavior:
type: string
enum:
- reject
- cap
- absorb
maxRedemptions:
type:
- integer
- 'null'
perCustomerLimit:
type:
- integer
- 'null'
minOrderAmount:
type:
- number
- 'null'
responses:
'200':
description: Updated
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: object
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
delete:
tags:
- Misc / Uploads
summary: Delete one of the brand's coupons
operationId: deleteApiV1CouponsById
description: Deletes a coupon owned by the key's clinic (404 otherwise). Requires the `write` scope.
security:
- ApiKeyAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Deleted
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
/api/v1/coupons/{id}/performance:
get:
tags:
- Misc / Uploads
summary: Coupon performance (redemptions, discount totals)
operationId: getApiV1CouponsByIdPerformance
description: Redemption counts and discount totals for a coupon owned by the key's clinic (404 otherwise). Read scope.
security:
- ApiKeyAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: object
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
/api/v1/pharmacy-price-changes/alerts:
get:
tags:
- Misc / Uploads
summary: List outstanding pharmacy price-change alerts
operationId: getApiV1PharmacypricechangesAlerts
description: Outstanding pharmacy wholesale-cost change alerts for this clinic's programs, with the current vs suggested program fee and the per-unit margin delta. Brand's own margin data — no patient PHI. 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
alerts:
type: array
items:
type: object
properties:
id:
type: string
format: uuid
productId:
type:
- string
- 'null'
format: uuid
programId:
type:
- string
- 'null'
format: uuid
globalProductId:
type:
- string
- 'null'
format: uuid
direction:
type: string
enum:
- increase
- decrease
currentProgramFee:
type:
- number
- 'null'
suggestedProgramFee:
type:
- number
- 'null'
perUnitMarginDelta:
type:
- number
- 'null'
status:
type: string
createdAt:
type: string
format: date-time
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
/api/v1/pharmacy-price-changes/alerts/{alertId}/acknowledge:
post:
tags:
- Misc / Uploads
summary: Acknowledge a pharmacy price-change alert
operationId: postApiV1PharmacypricechangesAlertsByAlertIdAcknowledge
description: Dismisses an outstanding alert owned by the key's clinic (404 otherwise). Idempotent — acknowledging an already-acknowledged alert returns its current state. Attribution is recorded in the audit log (no user row behind an API key). Requires the `write` scope.
security:
- ApiKeyAuth: []
parameters:
- name: alertId
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Acknowledged
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: object
properties:
id:
type: string
format: uuid
status:
type: string
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
components:
responses:
Forbidden:
description: Authenticated but not permitted (insufficient scope, wrong role, or FUSE feature not enabled)
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'
BadRequest:
description: Bad request / business-rule failure (may include a `code`)
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
Unauthorized:
description: Missing, invalid, inactive, or expired API key (or JWT)
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
schemas:
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.