Skip to main content

Zanda Health API Documentation

Overview

Welcome to the Zanda Health API documentation. Zanda Health is a comprehensive practice management system for healthcare practitioners.

The Zanda API is organized around REST principles with predictable resource-oriented URLs, JSON-encoded request/response bodies, and standard HTTP verbs and status codes.

Use this API to access client profiles, practitioners, appointments, invoices, locations, payments, and more from your Zanda Health account.

Security

The Zanda API is designed with security as a priority:

  • HTTPS Required - All API requests must be made over HTTPS. Requests made over plain HTTP will be rejected.
  • API Key Authentication - Every request must include a valid API key in the X-API-Key header. Requests without authentication will fail.
  • Keep Keys Secret - Never expose your API keys in client-side code, public repositories, or support tickets.

Authentication

API keys is used to authenticate requests.

Generating an API Key

  1. Log in to your Zanda Health account
  2. Navigate to Tools → Zanda API Key
  3. Click the button to generate a secure key
  4. Copy your key immediately — for security reasons, it won't be shown again after you close the window

Permissions

API keys provide access to resources such as client profiles, appointments, invoices, practitioners, and more. In future releases, granular permission levels will be available, allowing you to configure read and write access on a per-resource basis.

Authentication Header
curl https://api.zandahealth.com/api/v1/practitioners \
  -H "X-API-Key: your_api_key_here"

Base URL

The Zanda API is deployed across multiple regions. Use the base URL that corresponds to your account's region:

RegionBase URL
Australiahttps://zandaapi.zandahealth.com/api/v1
United Stateshttps://zandaapi.us.zandahealth.com/api/v1
United Kingdomhttps://zandaapi.uk.zandahealth.com/api/v1

Examples in this documentation use api.zandahealth.com as a placeholder. Replace it with your region-specific URL.

Response Structure

The Zanda API uses vendor-specific media types following RFC 6838 standards. This enables content negotiation and allows clients to request the response format that best suits their needs.

Media Types

Use the Accept header to specify your preferred response format. If not specified, the API defaults to application/vnd.zandaapi.hateoas+json.

Media TypeDescription
application/vnd.zandaapi.hateoas+jsonFull response with HATEOAS hypermedia links for API discoverability
application/vnd.zandaapi+jsonLightweight response without hypermedia links

Single Resource

Individual resources are wrapped in a data envelope. When using the HATEOAS media type, a links array provides related actions:

{
  "data": {
    "id": 123,
    "firstName": "John",
    "lastName": "Doe"
  },
  "links": [
    {
      "href": "/api/v1/practitioners/123",
      "rel": "self",
      "method": "GET"
    }
  ]
}

Collection (Paginated)

Collection responses include an items array with pagination metadata:

{
  "items": [
    { "data": { ... }, "links": [...] },
    { "data": { ... }, "links": [...] }
  ],
  "links": [
    { "href": "/api/v1/practitioners?page=2&pageSize=5", "rel": "self", "method": "GET" },
    { "href": "/api/v1/practitioners?page=3&pageSize=5", "rel": "next", "method": "GET" }
  ],
  "pageNumber": 2,
  "pageSize": 5,
  "totalItemCount": 87,
  "pageCount": 18,
  "hasNextPage": true
}

Quick Start

Here are complete examples to get you started:

With HATEOAS Links

To include hypermedia links for API discoverability, use the application/vnd.zandaapi.hateoas+json media type:

List Resources

Fetching a paginated list of practitioners:

Request
curl -X GET "https://api.zandahealth.com/api/v1/practitioners?page=1&pageSize=10" \
  -H "X-API-Key: your_api_key_here" \
  -H "Accept: application/vnd.zandaapi.hateoas+json"
Response
{
  "items": [
    {
      "data": {
        "id": 123,
        "firstName": "Jane",
        "lastName": "Smith",
        "email": "jane.smith@clinic.com"
      },
      "links": [
        {
          "href": "/api/v1/practitioners/123",
          "rel": "self",
          "method": "GET"
        }
      ]
    }
  ],
  "links": [
    { "href": "/api/v1/practitioners?page=1&pageSize=10", "rel": "self", "method": "GET" },
    { "href": "/api/v1/practitioners?page=2&pageSize=10", "rel": "next", "method": "GET" }
  ],
  "pageNumber": 1,
  "pageSize": 10,
  "totalItemCount": 42,
  "pageCount": 5,
  "hasNextPage": true
}

Get by ID

Fetching a single practitioner by ID:

Request
curl -X GET "https://api.zandahealth.com/api/v1/practitioners/123" \
  -H "X-API-Key: your_api_key_here" \
  -H "Accept: application/vnd.zandaapi.hateoas+json"
Response
{
  "data": {
    "id": 123,
    "firstName": "Jane",
    "lastName": "Smith",
    "email": "jane.smith@clinic.com"
  },
  "links": [
    {
      "href": "/api/v1/practitioners/123",
      "rel": "self",
      "method": "GET"
    }
  ]
}

Without HATEOAS Links

For a lightweight response without hypermedia links, use the application/vnd.zandaapi+json media type:

List Resources

Fetching a paginated list of practitioners:

Request
curl -X GET "https://api.zandahealth.com/api/v1/practitioners?page=1&pageSize=10" \
  -H "X-API-Key: your_api_key_here" \
  -H "Accept: application/vnd.zandaapi+json"
Response
{
  "items": [
    {
      "data": {
        "id": 123,
        "firstName": "Jane",
        "lastName": "Smith",
        "email": "jane.smith@clinic.com"
      }
    }
  ],
  "pageNumber": 1,
  "pageSize": 10,
  "totalItemCount": 42,
  "pageCount": 5
}

Get by ID

Fetching a single practitioner by ID:

Request
curl -X GET "https://api.zandahealth.com/api/v1/practitioners/123" \
  -H "X-API-Key: your_api_key_here" \
  -H "Accept: application/vnd.zandaapi+json"
Response
{
  "data": {
    "id": 123,
    "firstName": "Jane",
    "lastName": "Smith",
    "email": "jane.smith@clinic.com"
  }
}

Date & Time Handling

All timestamps in the API are handled as follows:

Format

Timestamps use ISO 8601 format:

YYYY-MM-DDTHH:MM:SS

Example: 2025-09-05T15:30:00

Timezone

  • All timestamps are returned in UTC

Date-Only Fields

Some fields (like birth dates) use date-only format:

YYYY-MM-DD

Pagination

List endpoints support pagination using query parameters:

Query Parameters

  • page - Page number (default: 1)
  • pageSize - Items per page (default: 10, min: 5, max: 25)

Response Metadata

Paginated responses include:

  • pageNumber - Current page
  • pageSize - Items per page
  • totalItemCount - Total items across all pages
  • pageCount - Total number of pages
  • hasNextPage - Whether more pages are available
  • links - Navigation links (self, next)

Error Handling

The Zanda API uses conventional HTTP response codes to indicate the success or failure of an API request.

CodeDescription
200Success - The request was successful
201Created - A resource was successfully created
400Bad Request - The request was invalid or cannot be served
401Unauthorized - Authentication failed or API key is missing
403Forbidden - You don't have permission to access this resource
404Not Found - The requested resource doesn't exist
406Not Acceptable - The requested media type is not supported
429Too Many Requests - Rate limit exceeded
500Internal Server Error - Something went wrong on our end

Rate Limiting

To ensure service stability, the Zanda API implements rate limiting. If you exceed the rate limit, you'll receive a 429 Too Many Requests response.

Limits

Limit TypeThresholdWindow
Per API Key100 requests1 minute
Per IP Address1,000 requests5 minutes

Response Headers

Rate limit information is included in response headers for authenticated requests:

HeaderDescriptionPresent
X-RateLimit-LimitMaximum requests allowed per time windowAll authenticated responses
X-RateLimit-RemainingRemaining requests in current windowAll authenticated responses
X-RateLimit-ResetUnix epoch timestamp when the window resetsAll authenticated responses
Retry-AfterSeconds to wait before retrying429 responses only

429 Response Body

When rate limited, the API returns a RFC 7807 Problem Details response:

429 Too Many Requests
{
  "type": "https://tools.ietf.org/html/rfc6585#section-4",
  "title": "Too Many Requests",
  "status": 429,
  "detail": "Rate limit exceeded. Please retry after the specified period.",
  "instance": "/api/v1/practitioners"
}

Download OpenAPI Spec

Download the OpenAPI specification to import into your favorite API client (Postman, Insomnia, etc.) or to generate client SDKs.

Download OpenAPI Spec (JSON)

Support

If you have questions or need assistance with the Zanda API, please: