Clinic API

The following is a guide on how to communicate with the Embodia API for clinic authentication.

Getting Started

In order to authenticate with Embodia API, each clinic would need to create an API key. Do NOT share your api key or have it accessible on your front-end.

Authentication

Your API key will be used to authenticate your API request. Embodia uses a Token based authentication in the header of the request:

curl -H "Authorization: Token <your-api-key-here>"

Practitioners

This endpoint will be used to retrieve the list of practitioners associated with the clinic

Listing practitioners that belong to the clinic

Endpoint

GET clinic_api/v1/practitioners

Parameters

Name Description
service_id (optional) The ID of a service - this will filter practitioners to return only practitioners that can be booked under this service
address_id (optional) The ID of an address - this will filter practitioners to return only practitioners that can be booked under this address

Request

Route

GET clinic_api/v1/practitioners

cURL

curl -g "https://app.embodiaapp.com/clinic_api/v1/practitioners" -X GET \
	-H "Vers-IO-N: HTTP/1.0" \
	-H "Accept: application/json" \
	-H "Content-Type: application/json" \
	-H "Authorizat-IO-N: Token token=\"dDDposYLrUggUwxiR9UFLCsP15cmU1rV6cQhTzkkAe2uXiBezaNVE6squsom-229-172\""

Response

Simulated Response

Response Fields

Name Description
practitioners An array of practitioners
practitioner[id] ID of the practitioner
practitioner[first_name] The first name of the practitioner
practitioner[last_name] The last name of the practitioner

Status

200

Body

{
  "practitioners": [
    {
      "first_name": "Jane",
      "last_name": "Doe",
      "id": "fd7021f7-6638-325d-a17c-8f61d6faaf1d-397"
    },
    {
      "first_name": "John",
      "last_name": "Deer",
      "id": "1152deb3-efdf-3d07-a669-643f6282f108-398"
    }
  ]
}

Addresses

This endpoint will be used to retrieve the list of addresses associated with the clinic that accept online booking

Listing addresses that belong to the clinic

Endpoint

GET clinic_api/v1/addresses

Request

Route

GET clinic_api/v1/addresses

cURL

curl -g "https://app.embodiaapp.com/clinic_api/v1/addresses" -X GET \
	-H "Vers-IO-N: HTTP/1.0" \
	-H "Accept: application/json" \
	-H "Content-Type: application/json" \
	-H "Authorizat-IO-N: Token token=\"vKLMLAoRGS6hboNdoZ6k3YBzPUJ4LXFqtfx31vZt5WkByrmZaso44ATtd3Ex-232-175\""

Response

Simulated Response

Response Fields

Name Description
addresses An array of addresses
address[id] ID of the address
address[summary] Summary of the address

Status

200

Body

{
  "addresses": [
    {
      "id": "2c5c0ed8-441b-39ad-aad1-96fd54484c52-122",
      "summary": "444 Derby Lane, Toronto, Canada"
    },
    {
      "id": "399badfc-8362-367a-9bcf-a001ed8a719b-123",
      "summary": "555 King Street, Toronto, Canada"
    }
  ]
}

Services

This endpoint will be used to retrieve the list of services associated with the clinic that accept online booking

Listing services that belong to the clinic

Endpoint

GET clinic_api/v1/services

Parameters

Name Description
practitioner_id (optional) The ID of a practitioner - this will filter the services to return only those that can be booked under this practitioner
address_id (optional) The ID of an address - this will filter the services to return only those that can be booked under this address

Request

Route

GET clinic_api/v1/services

cURL

curl -g "https://app.embodiaapp.com/clinic_api/v1/services" -X GET \
	-H "Vers-IO-N: HTTP/1.0" \
	-H "Accept: application/json" \
	-H "Content-Type: application/json" \
	-H "Authorizat-IO-N: Token token=\"GraZjvEQx3awvB5w3AVH2a7MadoddsWP4fjiSew4mDwJVSPLSHnb1pCcp8HL-233-176\""

Response

Simulated Response

Response Fields

Name Description
service_categories An array of services, grouped by their category
service[id] ID of the service
service[name] The name of the service
service[description] The description of the service
service[duration] The duration of the service in minutes
service[currency] The currency of the service
service[price] The price of the service
service[taxes] The taxes of the service

Status

200

Body

{
  "service_categories": [
    {
      "name": "Physiotherapy",
      "services": [
        {
          "id": "5a646b1b-13cc-3dd6-be2a-5fbd0646bc41-131",
          "name": "Follow-up (in person)",
          "description": "In person consult",
          "duration": 60,
          "currency": "cad",
          "price": 0.0,
          "taxes": 0.0
        },
        {
          "id": "9e0e4bb6-8f88-3e36-abf9-3c7225fe8cde-132",
          "name": "Follow-up (virtual)",
          "description": "Virtual consult",
          "duration": 30,
          "currency": "cad",
          "price": 100.0,
          "taxes": 13.0
        }
      ]
    }
  ]
}

Time slots

This endpoint will be used to retrieve the list of time slots that are available for a given day, service, and practitioner

Listing times slots that fit the practitioner's schedule

Endpoint

GET clinic_api/v1/time_slots

Parameters

Name Description
date required String: with the format of YYYY-MM-DD; this is the date (today or later) when the patient is looking to book a consult
practitioner_id required The ID of the practitioner
service_id required The ID of the service

Request

Route

GET clinic_api/v1/time_slots?date=2026-09-01&practitioner_id=3c3e8872-3d22-38db-9ec0-98316e5b11e9-413&service_id=28f4f624-ebb9-379d-9578-bb3fa83d95ad-137

Query Parameters

date=2026-09-01
practitioner_id=3c3e8872-3d22-38db-9ec0-98316e5b11e9-413
service_id=28f4f624-ebb9-379d-9578-bb3fa83d95ad-137

cURL

curl -g "https://app.embodiaapp.com/clinic_api/v1/time_slots?date=2026-09-01&practitioner_id=3c3e8872-3d22-38db-9ec0-98316e5b11e9-413&service_id=28f4f624-ebb9-379d-9578-bb3fa83d95ad-137" -X GET \
	-H "Vers-IO-N: HTTP/1.0" \
	-H "Accept: application/json" \
	-H "Content-Type: application/json" \
	-H "Authorizat-IO-N: Token token=\"S5MSemxrALN5h3y73LBB4M5XPpeZKvuv7aUNJkgCMSvQ7oHvVq1fFJ97TwmC-236-179\""

Response

Simulated Response

Response Fields

Name Description
time_slots An array of time slots that fit the practitioner's schedule for the provided date and service
time_slot[time] The start time of the time slot
time_slot[url] A direct URL to the page where the patient can complete the booking of an appointment starting a the slot time

Status

200

Body

{
  "time_slots": [
    {
      "time": "10:00 (EDT)",
      "url": "https://my-clinic.embodiaapp.com/patient_portal/online_bookings/new?ca_id=130&clinic_id=236&from_online_booking=1&id=236&meeting_type_id=137&practitioner_id=413&practitioner_view_id=1&start_time=2026-09-01+10%3A00%3A00+-0400"
    },
    {
      "time": "11:00 (EDT)",
      "url": "https://my-clinic.embodiaapp.com/patient_portal/online_bookings/new?ca_id=130&clinic_id=236&from_online_booking=1&id=236&meeting_type_id=137&practitioner_id=413&practitioner_view_id=1&start_time=2026-09-01+11%3A00%3A00+-0400"
    }
  ]
}

Online booking requests

This endpoint will be used to create an online booking request. This will not create an appointment for the patient, but will notify the clinic that the patient is looking to book an appointment

Creating an online booking request

Endpoint

POST clinic_api/v1/online_booking_requests

Parameters

Name Description
online_booking_request[email] required The email address of the patient
online_booking_request[first_name] required The first name of the patient
online_booking_request[last_name] required The last name of the patient
online_booking_request[notes] General notes - such as when the patient is looking to book the appointment
practitioner_id The ID of the practitioner
service_id The ID of the service

Request

Route

POST clinic_api/v1/online_booking_requests

Body

{
  "online_booking_request": {
    "email": "jane@doe.com",
    "first_name": "Jane",
    "last_name": "Doe",
    "notes": "I would like to book an appointment on Friday at 10AM"
  },
  "practitioner_id": "66f32371-5a88-3a09-8d75-e25006c2498f-416",
  "service_id": "2285db61-2570-3864-94ec-0b8e08102046-140"
}

cURL

curl "https://app.embodiaapp.com/clinic_api/v1/online_booking_requests" -d '{"online_booking_request":{"email":"jane@doe.com","first_name":"Jane","last_name":"Doe","notes":"I would like to book an appointment on Friday at 10AM"},"practitioner_id":"66f32371-5a88-3a09-8d75-e25006c2498f-416","service_id":"2285db61-2570-3864-94ec-0b8e08102046-140"}' -X POST \
	-H "Vers-IO-N: HTTP/1.0" \
	-H "Accept: application/json" \
	-H "Content-Type: application/json" \
	-H "Authorizat-IO-N: Token token=\"T1vFWFWAhNtjrqEfYuB51UCFev8fMnD6tzrG3tkx9GssPt3kxGFA2yJcanZh-239-182\""

Response

Simulated Response

Status

200

Body

{
  "request_id": "1788180232-11"
}

Trying to creating an online booking request without passing required information

Endpoint

POST clinic_api/v1/online_booking_requests

Parameters

Name Description
online_booking_request[email] required The email address of the patient
online_booking_request[first_name] required The first name of the patient
online_booking_request[last_name] required The last name of the patient
online_booking_request[notes] General notes - such as when the patient is looking to book the appointment
practitioner_id The ID of the practitioner
service_id The ID of the service

Request

Route

POST clinic_api/v1/online_booking_requests

Body

{
  "online_booking_request": {
    "email": "",
    "first_name": "",
    "last_name": "",
    "notes": "I would like to book an appointment on Friday at 10AM"
  },
  "practitioner_id": "0f44d76c-5b5a-31e0-8cf7-cc8a4378ffe5-417",
  "service_id": "1fc2da7d-75cb-35a2-abce-86060ffa9b69-141"
}

cURL

curl "https://app.embodiaapp.com/clinic_api/v1/online_booking_requests" -d '{"online_booking_request":{"email":"","first_name":"","last_name":"","notes":"I would like to book an appointment on Friday at 10AM"},"practitioner_id":"0f44d76c-5b5a-31e0-8cf7-cc8a4378ffe5-417","service_id":"1fc2da7d-75cb-35a2-abce-86060ffa9b69-141"}' -X POST \
	-H "Vers-IO-N: HTTP/1.0" \
	-H "Accept: application/json" \
	-H "Content-Type: application/json" \
	-H "Authorizat-IO-N: Token token=\"WeabxQLFZVurPfDqvq31brCAsaEzpvdc6Btf2H3xhTCVcDMSspDnNkdfhtqS-240-183\""

Response

Simulated Response

Status

422

Body

{
  "errors": "Email can't be blank, First name can't be blank, Last name can't be blank, Email is invalid"
}