Chia Health Webhook tests API
Signed synthetic deliveries to the pre-registered environment endpoint.
Signed synthetic deliveries to the pre-registered environment endpoint.
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/chia-health:chia-health-webhook-tests-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: Chia Health Webhook tests API
version: 2.1.0
contact:
name: Named Chia integration support contact in the signed onboarding receipt
license:
name: Proprietary API contract
description: 'Operations tagged Webhook tests across 2 of this provider''s published API definitions: chia-health-openapi.yaml, chia-health-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.sandbox.invalid
description: Intentionally non-resolving sandbox contract placeholder — synthetic data only. Use the exact HTTPS origin in the signed onboarding package.
- url: https://api.production.invalid
description: Intentionally non-resolving gated-production contract placeholder. Use the exact HTTPS origin and separate chia_live_ runtime and chia_live_finance_ finance credentials from signed onboarding. Credentials alone do not activate catalog or handoff.
security:
- bearerAuth: []
tags:
- name: Webhook tests
description: Signed synthetic deliveries to the pre-registered environment endpoint.
paths:
/v2/webhook_tests:
post:
operationId: createWebhookTest
tags:
- Webhook tests
summary: Send a signed synthetic webhook
description: Creates or exactly replays one synthetic test event to the authenticated environment's already registered endpoint. The caller cannot choose a destination, payload, headers, identifiers, period, or metadata. Both sandbox and production support all three documented test shapes. Every test event has test=true and must cause no business side effect.
parameters:
- name: Idempotency-Key
in: header
required: true
description: Random UUIDv4 persisted by the caller before the first network attempt and reused for byte-identical retries. Never derive it from a partner user, account, device, email, phone, patient, or order.
schema:
type: string
format: uuid
pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
maxLength: 36
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookTestRequest'
examples:
endpoint:
summary: Sandbox or production test
value:
event_type: endpoint.test
catalog:
summary: Sandbox or production synthetic catalog shape
value:
event_type: catalog.updated
settlement:
summary: Sandbox or production synthetic settlement shape
value:
event_type: settlement_summary.finalized
responses:
'202':
description: Synthetic event durably accepted, or the exact idempotent response replayed.
headers:
Chia-Request-Id:
$ref: '#/components/headers/RequestId'
Chia-Version:
$ref: '#/components/headers/Version'
RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
Cache-Control:
schema:
type: string
const: no-store
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookTestResponse'
examples:
sandbox:
value:
id: evt_test_01K0N1A2B3C4D5E6F7G8H9J0K1
object: webhook_test
event_type: endpoint.test
destination_hint: https://hooks.sandbox.partner.example/***
created_at: '2026-07-22T15:00:00Z'
livemode: false
test: true
production:
value:
id: evt_test_01K0P5A6B7C8D9E0F1G2H3J4K5
object: webhook_test
event_type: endpoint.test
destination_hint: https://hooks.partner.example/***
created_at: '2026-07-22T15:04:00Z'
livemode: true
test: true
'400':
$ref: '#/components/responses/InvalidRequest'
'401':
$ref: '#/components/responses/AuthenticationError'
'403':
$ref: '#/components/responses/PermissionError'
'409':
$ref: '#/components/responses/Conflict'
'405':
$ref: '#/components/responses/MethodNotAllowedPost'
'413':
$ref: '#/components/responses/InvalidRequest'
'415':
$ref: '#/components/responses/InvalidRequest'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/Unavailable'
servers:
- url: https://api.sandbox.invalid
description: Intentionally non-resolving sandbox contract placeholder — synthetic data only. Use the exact HTTPS origin in the signed onboarding package.
- url: https://api.production.invalid
description: Intentionally non-resolving gated-production contract placeholder. Use the exact HTTPS origin and separate chia_live_ runtime and chia_live_finance_ finance credentials from signed onboarding. Credentials alone do not activate catalog or handoff.
components:
schemas:
WebhookTestResponse:
type: object
additionalProperties: false
required:
- id
- object
- event_type
- destination_hint
- created_at
- livemode
- test
properties:
id:
type: string
pattern: ^evt_test_[A-Za-z0-9]{8,64}$
object:
const: webhook_test
event_type:
enum:
- endpoint.test
- catalog.updated
- settlement_summary.finalized
destination_hint:
type: string
pattern: ^https://[A-Za-z0-9.-]+/\*\*\*$
maxLength: 240
created_at:
type: string
format: date-time
livemode:
type: boolean
test:
const: true
Error:
type: object
additionalProperties: false
required:
- type
- code
- message
- param
- request_id
- retryable
properties:
type:
type: string
enum:
- invalid_request_error
- authentication_error
- permission_error
- conflict_error
- rate_limit_error
- api_error
code:
type: string
pattern: ^[a-z][a-z0-9_]{2,63}$
message:
type: string
minLength: 1
maxLength: 240
param:
type:
- string
- 'null'
maxLength: 80
request_id:
type: string
pattern: ^req_[A-Za-z0-9]{8,64}$
retryable:
type: boolean
ErrorResponse:
type: object
additionalProperties: false
required:
- error
properties:
error:
$ref: '#/components/schemas/Error'
WebhookTestRequest:
type: object
additionalProperties: false
required:
- event_type
properties:
event_type:
enum:
- endpoint.test
- catalog.updated
- settlement_summary.finalized
headers:
NoStore:
description: Partner API errors and mutation responses are never cacheable.
required: true
schema:
type: string
const: no-store
RateLimitReset:
description: Seconds until the current limit resets.
required: true
schema:
type: integer
minimum: 0
RequestId:
description: Authoritative server-generated request identifier.
required: true
schema:
type: string
pattern: ^req_[A-Za-z0-9]{8,64}$
RetryAfter:
description: Seconds before retrying.
required: true
schema:
type: integer
minimum: 1
RateLimitLimit:
description: Credential/partner request budget.
required: true
schema:
type: integer
minimum: 0
AllowPost:
description: The only method accepted by this resource.
required: true
schema:
type: string
const: POST
RateLimitRemaining:
description: Requests remaining in the current window.
required: true
schema:
type: integer
minimum: 0
Version:
description: Credential-pinned API behavior version.
required: true
schema:
type: string
const: '2026-07-22'
WWWAuthenticate:
description: Bearer authentication challenge for the Partner API.
required: true
schema:
type: string
const: Bearer realm="chia-partner-api"
responses:
Unavailable:
description: A safe dependency failed before the operation could commit.
headers:
Chia-Request-Id:
$ref: '#/components/headers/RequestId'
Chia-Version:
$ref: '#/components/headers/Version'
RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
Cache-Control:
$ref: '#/components/headers/NoStore'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
partner_program_unavailable:
value:
error:
type: api_error
code: partner_program_unavailable
message: The partner care program is not currently available.
param: null
request_id: req_01K0N2A3B4C5D6E7F8G9H0J1K2
retryable: true
settlement_summaries_unavailable:
value:
error:
type: api_error
code: settlement_summaries_unavailable
message: Settlement summaries are temporarily unavailable.
param: null
request_id: req_01K0N2A3B4C5D6E7F8G9H0J1K2
retryable: true
rate_limiter_unavailable:
value:
error:
type: api_error
code: rate_limiter_unavailable
message: The request cannot be accepted right now.
param: null
request_id: req_01K0N2A3B4C5D6E7F8G9H0J1K2
retryable: true
webhook_queue_unavailable:
value:
error:
type: api_error
code: webhook_queue_unavailable
message: The synthetic webhook could not be queued.
param: null
request_id: req_01K0N2A3B4C5D6E7F8G9H0J1K2
retryable: true
Conflict:
description: Idempotency key reuse with a different body or unavailable webhook endpoint.
headers:
Chia-Request-Id:
$ref: '#/components/headers/RequestId'
Chia-Version:
$ref: '#/components/headers/Version'
RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
Cache-Control:
$ref: '#/components/headers/NoStore'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
idempotency_key_reused:
value:
error:
type: conflict_error
code: idempotency_key_reused
message: The idempotency key was already used with a different request.
param: Idempotency-Key
request_id: req_01K0N2A3B4C5D6E7F8G9H0J1K2
retryable: false
webhook_endpoint_unavailable:
value:
error:
type: conflict_error
code: webhook_endpoint_unavailable
message: The registered webhook endpoint is not available for testing.
param: null
request_id: req_01K0N2A3B4C5D6E7F8G9H0J1K2
retryable: false
PermissionError:
description: The credential lacks the operation's exact environment or scope.
headers:
Chia-Request-Id:
$ref: '#/components/headers/RequestId'
Chia-Version:
$ref: '#/components/headers/Version'
RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
Cache-Control:
$ref: '#/components/headers/NoStore'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
insufficient_scope:
value:
error:
type: permission_error
code: insufficient_scope
message: The API key lacks the required scope.
param: null
request_id: req_01K0N2A3B4C5D6E7F8G9H0J1K2
retryable: false
InvalidRequest:
description: Malformed JSON, unknown query/input field, invalid parameter, or unsupported media type.
headers:
Chia-Request-Id:
$ref: '#/components/headers/RequestId'
Chia-Version:
$ref: '#/components/headers/Version'
RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
Cache-Control:
$ref: '#/components/headers/NoStore'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
invalid_request:
value:
error:
type: invalid_request_error
code: invalid_request
message: The request could not be processed.
param: null
request_id: req_01K0N2A3B4C5D6E7F8G9H0J1K2
retryable: false
invalid_idempotency_key:
value:
error:
type: invalid_request_error
code: invalid_idempotency_key
message: Idempotency-Key must be a random UUIDv4.
param: Idempotency-Key
request_id: req_01K0N2A3B4C5D6E7F8G9H0J1K2
retryable: false
invalid_cursor:
value:
error:
type: invalid_request_error
code: invalid_cursor
message: starting_after is not a valid production cursor.
param: starting_after
request_id: req_01K0N2A3B4C5D6E7F8G9H0J1K2
retryable: false
cursor_expired:
value:
error:
type: invalid_request_error
code: cursor_expired
message: starting_after has expired; restart pagination without it.
param: starting_after
request_id: req_01K0N2A3B4C5D6E7F8G9H0J1K2
retryable: false
RateLimited:
description: Per-partner or per-credential limit exceeded.
headers:
Chia-Request-Id:
$ref: '#/components/headers/RequestId'
Chia-Version:
$ref: '#/components/headers/Version'
RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
Retry-After:
$ref: '#/components/headers/RetryAfter'
Cache-Control:
$ref: '#/components/headers/NoStore'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
rate_limit_exceeded:
value:
error:
type: rate_limit_error
code: rate_limit_exceeded
message: Too many requests were made. Retry after the indicated delay.
param: null
request_id: req_01K0N2A3B4C5D6E7F8G9H0J1K2
retryable: true
AuthenticationError:
description: Missing, invalid, expired, revoked, or wrong-environment credential.
headers:
Chia-Request-Id:
$ref: '#/components/headers/RequestId'
Chia-Version:
$ref: '#/components/headers/Version'
RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
Cache-Control:
$ref: '#/components/headers/NoStore'
WWW-Authenticate:
$ref: '#/components/headers/WWWAuthenticate'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
invalid_api_key:
value:
error:
type: authentication_error
code: invalid_api_key
message: The API key is missing or invalid.
param: null
request_id: req_01K0N2A3B4C5D6E7F8G9H0J1K2
retryable: false
MethodNotAllowedPost:
description: The resource accepts POST only.
headers:
Chia-Request-Id:
$ref: '#/components/headers/RequestId'
Chia-Version:
$ref: '#/components/headers/Version'
RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
Cache-Control:
$ref: '#/components/headers/NoStore'
Allow:
$ref: '#/components/headers/AllowPost'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
InternalError:
description: Unexpected error with no internal details exposed.
headers:
Chia-Request-Id:
$ref: '#/components/headers/RequestId'
Chia-Version:
$ref: '#/components/headers/Version'
RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
Cache-Control:
$ref: '#/components/headers/NoStore'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
internal_error:
value:
error:
type: api_error
code: internal_error
message: The request could not be completed.
param: null
request_id: req_01K0N2A3B4C5D6E7F8G9H0J1K2
retryable: true
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: chia_test_… / chia_test_finance_… / chia_live_… / chia_live_finance_…
description: Environment- and role-bound server credential. Each environment has one runtime key for catalog:read, handoffs:create, and webhooks:test, plus a separately stored finance key for settlements:read. Sandbox and production credentials are never interchangeable.
externalDocs:
description: Human and AI integration guide
url: https://partners.chia.health/
x-refined-from:
- chia-health-openapi.yaml
- chia-health-openapi.yml
x-chia-contract:
api_behavior_version: '2026-07-22'
exact_json_business_operations:
- GET /v2/catalog/items
- POST /v2/handoff-sessions
- GET /v2/settlement_summaries
- POST /v2/webhook_tests
forbidden_resource_classes:
- patient
- session
- order
- payment
- prescription
- fulfillment
- shipment
- support
- outcome
asset_contract: ../assets/v2.contract.yaml
webhook_contract: ../webhooks/v2.asyncapi.yaml
legal_role_boundary:
partner_only_role: paid_marketplace_publisher
partner_forbidden_roles:
- merchant_of_record
- disclosed_collection_agent
- service_seller
- clinical_provider
- pharmacy
- prescriber
- order_agent
billing_and_seller_entities_must_be_chia_controlled_and_legal_approved: true
chia_is_merchant_of_record: true
individual_data_boundary:
accepts_individual_identifiers: false
returns_patient_order_clinical_prescription_fulfillment_shipment_or_outcome_data: false
production_settlement_release_boundary:
source: separate_append_only_finance_authored_release_store
reads_live_activity: false
derives_amount_or_status: false
malformed_release_behavior: fail_closed
corrections: append_new_revision_with_supersedes_id
aggregate_count_requires_internal_threshold_and_composition_release: true
minimum_group_size_floor: 10
internal_privacy_proof_fields_are_public: false
forbidden_projection_dimensions:
- patient
- order
- payment_level
- shipment
- program
- geography
- event
- date_row