Canvas Medical · AsyncAPI Specification

Canvas Medical Events Webhooks

Version

View Spec View on GitHub EHRFHIRHealthcareElectronic Health RecordsVirtual CareClinical WorkflowsPatient ManagementCare CoordinationAsyncAPIEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-14'
method: searched
source: >-
  https://docs.canvasmedical.com/guides/creating-webhooks-with-the-canvas-sdk/,
  https://docs.canvasmedical.com/sdk/events.md,
  https://raw.githubusercontent.com/canvas-medical/canvas-plugins/refs/heads/main/protobufs/canvas_generated/messages/events.proto
spec_type: none
asyncapi_published: false
asyncapi_note: >-
  Canvas Medical publishes no AsyncAPI document. Nothing is fabricated here — this artifact records
  the event surface that DOES exist, in the form the provider actually publishes it.
surface_model: plugin-authored
summary: >-
  Canvas has a large, first-party, machine-readable event catalog — 1,181 EventType values in
  events.proto, the same file the plugin runner is generated from — but no managed webhook
  subscription API. There is no endpoint where a consumer registers a callback URL and no
  Canvas-operated delivery, retry, or signing. Delivery is authored by the customer: a plugin handler
  declares RESPONDS_TO = EventType.Name(EventType.<EVENT>) and makes its own outbound HTTP call from
  inside the EMR. Canvas documents this pattern explicitly in "Creating Webhooks With the Canvas SDK".
event_catalog:
  format: protobuf enum (proto3)
  file: grpc/canvas-medical-events.proto
  source: https://github.com/canvas-medical/canvas-plugins/blob/main/protobufs/canvas_generated/messages/events.proto
  event_count: 1181
  docs: https://docs.canvasmedical.com/sdk/events/
  note: >-
    1,181 enum members including UNKNOWN. Canvas markets "650+ clinical and operational events"; the
    generated enum has grown past that, largely through per-command lifecycle events.
  families:
  - name: resource lifecycle
    pattern: <RESOURCE>_CREATED / _UPDATED / _DELETED
    examples: [ALLERGY_INTOLERANCE_CREATED, CONDITION_RESOLVED, COVERAGE_UPDATED, ENCOUNTER_CREATED, LAB_REPORT_CREATED, TASK_CREATED]
    note: The events that map most directly onto FHIR resources, and the ones a webhook integration usually wants.
  - name: appointment lifecycle
    examples: [APPOINTMENT_CREATED, APPOINTMENT_CHECKED_IN, APPOINTMENT_CANCELED, APPOINTMENT_NO_SHOWED, APPOINTMENT_RESCHEDULED, APPOINTMENT_RESTORED]
  - name: command lifecycle
    pattern: <COMMAND>_COMMAND__<PHASE>
    per_command_events: ~15
    examples: [PRESCRIBE_COMMAND, ASSESS_COMMAND, VITALS_COMMAND, LAB_ORDER_COMMAND, TASK_COMMAND, REFER_COMMAND]
    note: The largest family by count — roughly 15 phases per charting command.
  - name: pre/post search hooks
    pattern: <SURFACE>__PRE_SEARCH / __POST_SEARCH
    examples: [FAX__RECIPIENT__PRE_SEARCH, FAX__RECIPIENT__POST_SEARCH, PATIENT_PROFILE__EXTERNAL_CARE_TEAM__PRE_SEARCH]
    note: Synchronous interception points, not notifications — a handler returns results into the UI.
  - name: patient portal
    examples: [PATIENT_PORTAL events, 16 members]
  - name: calendar
    examples: [CALENDAR_CREATED, CALENDAR_UPDATED, CALENDAR_DELETED, CALENDAR_EVENT_CREATED, CALENDAR_EVENT_UPDATED, CALENDAR_EVENT_DELETED]
    added: '2026-08-04'
effects_catalog:
  file: grpc/canvas-medical-effects.proto
  effect_count: 390
  note: >-
    The write side of the same contract — what a handler may return in response to an event. Captured
    alongside the events because an agent reasoning about Canvas's event surface needs both halves.
webhook_authoring:
  guide: https://docs.canvasmedical.com/guides/creating-webhooks-with-the-canvas-sdk/
  mechanism:
    handler_base: canvas_sdk.handlers.BaseHandler
    subscription: RESPONDS_TO = EventType.Name(EventType.TASK_CREATED)
    payload_context:
    - self.target — the id of the event subject; the SAME id used by the corresponding FHIR endpoint
    - self.secrets — key/value pairs declared in CANVAS_MANIFEST.json `variables` and set post-install
    - self.event.actor — the authenticated user, for requests arriving through a SimpleAPI endpoint
    http_client: canvas_sdk.utils.Http (post/get)
    secret_declaration: '{"name": "AUTH_TOKEN", "sensitive": true} in CANVAS_MANIFEST.json variables'
  operational_warning: >-
    Verbatim caution from the guide — outbound HTTP runs inline with plugin execution: "making HTTP
    requests to external servers will slow plugin execution while it waits on the external server to
    respond." A slow receiver slows the EMR.
  delivery_semantics:
    managed_retry: false
    signing: false
    dead_letter: false
    ordering_guarantee: not documented
    at_least_once: not documented
    note: >-
      All delivery semantics are whatever the plugin author implements. Canvas provides the trigger
      and the HTTP client, not a delivery guarantee.
gaps:
- No AsyncAPI document, and no event schema published in any AsyncAPI-consumable form (the protobuf enum is the closest machine-readable artifact).
- No subscription API — a consumer cannot register a callback URL without deploying a plugin into the customer's instance.
- No signature, no replay protection, no retry/backoff, no delivery log described in the public docs.
- Events are per-instance; there is no cross-customer event stream, matching the per-customer instance model.

Work with this as data

Every AsyncAPI spec 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 asyncapi

4 MCP tools reach this
  • find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.
  • 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 AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/canvas-medical-events-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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.