Canvas Medical · Arazzo Workflow

Canvas Medical Appointment Scheduling

Version 1.0.0

Locate a patient, find a practitioner's schedule, search for a free slot, then book and confirm an appointment.

1 workflow 5 source APIs 1 provider
View Spec View on GitHub EHRFHIRHealthcareElectronic Health RecordsVirtual CareClinical WorkflowsPatient ManagementCare CoordinationArazzoWorkflows

Provider

canvas-medical

Workflows

appointment-scheduling
Book an appointment into a free slot on a practitioner's schedule.
Finds the patient and the practitioner's schedule, searches for a free slot, creates the appointment, and reads it back to confirm.
6 steps inputs: appointment, patientFamily, practitionerName outputs: appointment, appointmentId
1
findPatient
Locate the patient to be scheduled.
2
findPractitioner
Locate the practitioner the appointment will be booked with.
3
findSchedule
Find the schedule whose actor is the selected practitioner.
4
findFreeSlot
Search for a free slot on the practitioner's schedule.
5
bookAppointment
Create the appointment against the patient, practitioner, and free slot.
6
confirmAppointment
Read the booked appointment back to confirm it was created.

Source API Descriptions

Arazzo Workflow Specification

Raw ↑
arazzo: 1.0.1
info:
  title: Canvas Medical Appointment Scheduling
  summary: Locate a patient, find a practitioner's schedule, search for a free slot, then book and confirm an appointment.
  description: >-
    A FHIR scheduling flow against the Canvas FHIR R4 API, following the Argonaut
    Scheduling pattern of Schedule -> Slot -> Appointment. The patient is located,
    the practitioner's Schedule is found, a free Slot is searched for, an
    Appointment is created against that slot, and the booked Appointment is read
    back to confirm. Every step inlines its request so the flow is self-contained.
  version: 1.0.0
  x-realizes-capability-ids:
  - BC-2800.10
  - BC-2800.20
  x-capability-derivation:
    method: 'deterministic join: sourceDescriptions -> per-tag OpenAPI -> tag/capability edge. No classification at this step.'
    min_confidence: 0.7
    sources:
    - capability_id: BC-2800.10
      capability_name: Scheduling & Appointment Management
      spec: canvas-medical-schedule-api-openapi.yml
      confidence: 0.85
    - capability_id: BC-2800.20
      capability_name: Patient Registration Management
      spec: canvas-medical-patient-api-openapi.yml
      confidence: 0.75
    model: Turbo EA Capabilities by Vincent Verdet — Turbo EA, https://github.com/vincentmakes/turbo-ea-capabilities, CC BY 4.0
sourceDescriptions:
- name: appointmentApi
  url: ../openapi/canvas-medical-appointment-api-openapi.yml
  type: openapi
- name: patientApi
  url: ../openapi/canvas-medical-patient-api-openapi.yml
  type: openapi
- name: practitionerApi
  url: ../openapi/canvas-medical-practitioner-api-openapi.yml
  type: openapi
- name: scheduleApi
  url: ../openapi/canvas-medical-schedule-api-openapi.yml
  type: openapi
- name: slotApi
  url: ../openapi/canvas-medical-slot-api-openapi.yml
  type: openapi
workflows:
- workflowId: appointment-scheduling
  summary: Book an appointment into a free slot on a practitioner's schedule.
  description: >-
    Finds the patient and the practitioner's schedule, searches for a free slot,
    creates the appointment, and reads it back to confirm.
  inputs:
    type: object
    required:
    - patientFamily
    - practitionerName
    - appointment
    properties:
      patientFamily:
        type: string
        description: Patient family name to locate the patient.
      practitionerName:
        type: string
        description: Practitioner name to locate the scheduling provider.
      appointment:
        type: object
        description: The FHIR R4 Appointment resource to book (participants, type, and timing).
  steps:
  - stepId: findPatient
    description: Locate the patient to be scheduled.
    operationId: searchPatient
    parameters:
    - name: family
      in: query
      value: $inputs.patientFamily
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      patientId: $response.body#/entry/0/resource/id
  - stepId: findPractitioner
    description: Locate the practitioner the appointment will be booked with.
    operationId: searchPractitioner
    parameters:
    - name: name
      in: query
      value: $inputs.practitionerName
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      practitionerId: $response.body#/entry/0/resource/id
  - stepId: findSchedule
    description: Find the schedule whose actor is the selected practitioner.
    operationId: searchSchedule
    parameters:
    - name: actor
      in: query
      value: $steps.findPractitioner.outputs.practitionerId
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      scheduleId: $response.body#/entry/0/resource/id
  - stepId: findFreeSlot
    description: Search for a free slot on the practitioner's schedule.
    operationId: searchSlot
    parameters:
    - name: schedule
      in: query
      value: $steps.findSchedule.outputs.scheduleId
    - name: status
      in: query
      value: free
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      slotId: $response.body#/entry/0/resource/id
  - stepId: bookAppointment
    description: Create the appointment against the patient, practitioner, and free slot.
    operationId: createAppointment
    requestBody:
      contentType: application/fhir+json
      payload: $inputs.appointment
    successCriteria:
    - condition: $statusCode == 201
    outputs:
      appointmentId: $response.body#/id
  - stepId: confirmAppointment
    description: Read the booked appointment back to confirm it was created.
    operationId: readAppointment
    parameters:
    - name: id
      in: path
      value: $steps.bookAppointment.outputs.appointmentId
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      appointment: $response.body
  outputs:
    appointmentId: $steps.bookAppointment.outputs.appointmentId
    appointment: $steps.confirmAppointment.outputs.appointment

Work with this as data

Every workflow 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 arazzo workflows

4 MCP tools reach this
  • find_arazzoBrowse and filter every workflow 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 workflow
curl "https://apis.io/api/v1/arazzo/canvas-medical-appointment-scheduling-workflow"
All arazzo workflows
curl "https://apis.io/api/v1/arazzo?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.