Nookal Appointments API

Appointments, class bookings, availabilities, and the waiting list.

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/nookal-appointments-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

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

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

nookal-appointments-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Nookal Appointments API
  description: 'REST API for Nookal, Australian-built practice management software for allied health clinics. The API exposes patients, cases, treatment notes, files, appointments, class bookings, availabilities, clinic reference data (locations, practitioners, appointment/class types, stock), and invoices.


    Base URL: https://api.nookal.com/production/v2/. All requests are authenticated with an account-issued API key passed as the `api_key` parameter (query string for GET requests, form field for POST requests). Responses are JSON using a common envelope: `{"status":"success"|"failure","data":{...},"details":{...}}`. On failure, `details` carries `errorMessage`, `errorCode`, and an `alerts` array. Read endpoints are paginated via `page` and `page_length`, and the response `details` object reports `totalItems`, `currentItems`, `currentPage`, and `nextPage`.


    Endpoint paths, methods, and parameters are grounded in Nookal''s public API reference (https://api.nookal.com/dev). The `verify`, `getLocations`, and `getPatients` surfaces were confirmed live against the production host; the `api_key` requirement is confirmed by live probes. Request and response body schemas below are MODELED from the documented object reference and the live JSON envelope, not copied from a machine-readable Nookal specification (Nookal does not publish one), so field-level shapes should be verified against a live account before production use.'
  version: v2
  contact:
    name: Nookal
    url: https://www.nookal.com
  termsOfService: https://www.nookal.com/terms
servers:
- url: https://api.nookal.com/production/v2
  description: Nookal production API (v2)
security:
- apiKeyQuery: []
tags:
- name: Appointments
  description: Appointments, class bookings, availabilities, and the waiting list.
paths:
  /getAppointments:
    get:
      operationId: getAppointments
      tags:
      - Appointments
      summary: Get appointments
      parameters:
      - name: location_id
        in: query
        required: false
        schema:
          type: string
      - name: date_from
        in: query
        required: false
        schema:
          type: string
          format: date
      - name: date_to
        in: query
        required: false
        schema:
          type: string
          format: date
      - name: patient_id
        in: query
        required: false
        schema:
          type: string
      - name: practitioner_id
        in: query
        required: false
        schema:
          type: string
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/PageLength'
      - $ref: '#/components/parameters/LastModified'
      - name: appt_status
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: A status envelope whose data contains appointments.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /getAppointmentAvailabilities:
    get:
      operationId: getAppointmentAvailabilities
      tags:
      - Appointments
      summary: Get appointment availabilities
      parameters:
      - name: practitioner_id
        in: query
        required: false
        schema:
          type: string
      - name: date_from
        in: query
        required: false
        schema:
          type: string
          format: date
      - name: date_to
        in: query
        required: false
        schema:
          type: string
          format: date
      - name: location_id
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: A status envelope whose data contains available slots.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /getClassAvailabilities:
    get:
      operationId: getClassAvailabilities
      tags:
      - Appointments
      summary: Get class availabilities
      parameters:
      - name: practitioner_id
        in: query
        required: false
        schema:
          type: string
      - name: date_from
        in: query
        required: false
        schema:
          type: string
          format: date
      - name: date_to
        in: query
        required: false
        schema:
          type: string
          format: date
      - name: location_id
        in: query
        required: false
        schema:
          type: string
      - name: class_id
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: A status envelope whose data contains class availabilities.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /addAppointmentBooking:
    post:
      operationId: addAppointmentBooking
      tags:
      - Appointments
      summary: Add an appointment booking
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
              - api_key
              - location_id
              - appointment_date
              - start_time
              - patient_id
              - practitioner_id
              properties:
                api_key:
                  type: string
                location_id:
                  type: string
                appointment_date:
                  type: string
                  format: date
                start_time:
                  type: string
                patient_id:
                  type: string
                practitioner_id:
                  type: string
                appointment_type_id:
                  type: string
                notes:
                  type: string
                allow_overlap_bookings:
                  type: boolean
      responses:
        '200':
          description: A status envelope containing the created booking.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /updateAppointmentBooking:
    post:
      operationId: updateAppointmentBooking
      tags:
      - Appointments
      summary: Update an appointment booking
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
              - api_key
              - appointment_id
              properties:
                api_key:
                  type: string
                appointment_id:
                  type: string
                location_id:
                  type: string
                appointment_date:
                  type: string
                  format: date
                start_time:
                  type: string
                status:
                  type: string
                patient_id:
                  type: string
                practitioner_id:
                  type: string
                appointment_type_id:
                  type: string
                notes:
                  type: string
      responses:
        '200':
          description: A status envelope containing the updated booking.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /addClassBooking:
    post:
      operationId: addClassBooking
      tags:
      - Appointments
      summary: Add a class booking
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
              - api_key
              - location_id
              - appointment_date
              - start_time
              - patient_id
              - practitioner_id
              properties:
                api_key:
                  type: string
                location_id:
                  type: string
                appointment_date:
                  type: string
                  format: date
                start_time:
                  type: string
                patient_id:
                  type: string
                practitioner_id:
                  type: string
                appointment_type_id:
                  type: string
                notes:
                  type: string
      responses:
        '200':
          description: A status envelope containing the created class booking.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /cancelAppointment:
    post:
      operationId: cancelAppointment
      tags:
      - Appointments
      summary: Cancel an appointment
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
              - api_key
              - appointment_id
              - patient_id
              properties:
                api_key:
                  type: string
                appointment_id:
                  type: string
                patient_id:
                  type: string
      responses:
        '200':
          description: A status envelope confirming cancellation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /rebookAppointment:
    post:
      operationId: rebookAppointment
      tags:
      - Appointments
      summary: Rebook an appointment
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
              - api_key
              - appointment_id
              - patient_id
              properties:
                api_key:
                  type: string
                appointment_id:
                  type: string
                patient_id:
                  type: string
                location_id:
                  type: string
                start_time:
                  type: string
                practitioner_id:
                  type: string
                appointment_date:
                  type: string
                  format: date
                cancel_first:
                  type: boolean
      responses:
        '200':
          description: A status envelope containing the rebooked appointment.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /getClassParticipants:
    get:
      operationId: getClassParticipants
      tags:
      - Appointments
      summary: Get class participants
      parameters:
      - name: appt_id
        in: query
        required: true
        schema:
          type: string
      responses:
        '200':
          description: A status envelope whose data contains class participants.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /getWaitingList:
    get:
      operationId: getWaitingList
      tags:
      - Appointments
      summary: Get waiting list
      parameters:
      - name: lastmodified
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: A status envelope whose data contains the waiting list.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
components:
  schemas:
    Envelope:
      type: object
      description: Standard Nookal JSON response envelope. On success, status is "success" and data carries the results object; on failure, status is "failure" and details carries errorMessage, errorCode, and alerts. Shape confirmed live against the verify and getLocations endpoints.
      properties:
        status:
          type: string
          enum:
          - success
          - failure
        data:
          type: object
          additionalProperties: true
          description: Result payload on success (structure varies per endpoint).
        details:
          $ref: '#/components/schemas/Details'
    Details:
      type: object
      properties:
        errorMessage:
          type: string
        errorCode:
          type: string
        alerts:
          type: array
          items:
            type: string
        totalItems:
          type: integer
        currentItems:
          type: integer
        currentPage:
          type: integer
        nextPage:
          type: integer
        pageLength:
          type: integer
  parameters:
    PageLength:
      name: page_length
      in: query
      required: false
      description: Number of items per page.
      schema:
        type: integer
        default: 100
    LastModified:
      name: last_modified
      in: query
      required: false
      description: Return only records modified after this timestamp (incremental sync).
      schema:
        type: string
    Page:
      name: page
      in: query
      required: false
      description: Page number for paginated results.
      schema:
        type: integer
        default: 1
  securitySchemes:
    apiKeyQuery:
      type: apiKey
      in: query
      name: api_key
      description: 'Account-issued API key created in the Nookal application under Setup / Integrations, with a configurable access level. Passed as the `api_key` parameter - in the query string for GET requests and as a form field for POST requests. Confirmed live: omitting it returns a failure envelope with alert "Missing variable: api_key".'