Chia Health Webhook tests API

Signed synthetic deliveries to the pre-registered environment endpoint.

GitHub OpenAPI

Operations 1

POST /v2/webhook_tests Send a signed synthetic webhook #

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/chia-health:chia-health-webhook-tests-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

chia-health-webhook-tests-api-openapi.yml Raw ↑
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