Nookal Patients API

Patient records, cases, treatment notes, and patient files.

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-patients-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-patients-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Nookal Appointments Patients 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: Patients
  description: Patient records, cases, treatment notes, and patient files.
paths:
  /getPatients:
    get:
      operationId: getPatients
      tags:
      - Patients
      summary: Get patients
      description: Lists patients in the account. Confirmed live (requires api_key). Supports pagination and a last_modified incremental filter.
      parameters:
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/PageLength'
      - $ref: '#/components/parameters/LastModified'
      - name: deceased
        in: query
        required: false
        schema:
          type: boolean
      responses:
        '200':
          description: A status envelope whose data contains a page of patients.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /searchPatients:
    get:
      operationId: searchPatients
      tags:
      - Patients
      summary: Search patients
      description: Searches patients by one of several criteria - patient_id, online_code, date_created, an email + name + date-of-birth combination, or a fuzzy name search.
      parameters:
      - name: patient_id
        in: query
        required: false
        schema:
          type: string
      - name: online_code
        in: query
        required: false
        schema:
          type: string
      - name: email
        in: query
        required: false
        schema:
          type: string
      - name: first_name
        in: query
        required: false
        schema:
          type: string
      - name: last_name
        in: query
        required: false
        schema:
          type: string
      - name: date_of_birth
        in: query
        required: false
        schema:
          type: string
          format: date
      - name: fuzzy_search
        in: query
        required: false
        schema:
          type: boolean
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/PageLength'
      - name: deceased
        in: query
        required: false
        schema:
          type: boolean
      responses:
        '200':
          description: A status envelope whose data contains matching patients.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /getCases:
    get:
      operationId: getCases
      tags:
      - Patients
      summary: Get cases for a patient
      parameters:
      - name: patient_id
        in: query
        required: true
        schema:
          type: string
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/PageLength'
      - $ref: '#/components/parameters/LastModified'
      responses:
        '200':
          description: A status envelope whose data contains the patient's cases.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /getAllCases:
    get:
      operationId: getAllCases
      tags:
      - Patients
      summary: Get all cases
      parameters:
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/PageLength'
      - $ref: '#/components/parameters/LastModified'
      responses:
        '200':
          description: A status envelope whose data contains cases across patients.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /addPatient:
    post:
      operationId: addPatient
      tags:
      - Patients
      summary: Add a patient
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/AddPatientRequest'
      responses:
        '200':
          description: A status envelope containing the created patient.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /editPatient:
    post:
      operationId: editPatient
      tags:
      - Patients
      summary: Edit a patient
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
              - api_key
              - patient_id
              properties:
                api_key:
                  type: string
                patient_id:
                  type: string
                first_name:
                  type: string
                last_name:
                  type: string
                nickname:
                  type: string
                email:
                  type: string
                date_of_birth:
                  type: string
                  format: date
                notes:
                  type: string
                status:
                  type: string
      responses:
        '200':
          description: A status envelope containing the updated patient.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /getTreatmentNotes:
    get:
      operationId: getTreatmentNotes
      tags:
      - Patients
      summary: Get treatment notes for a patient
      parameters:
      - name: patient_id
        in: query
        required: true
        schema:
          type: string
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/PageLength'
      - $ref: '#/components/parameters/LastModified'
      responses:
        '200':
          description: A status envelope whose data contains treatment notes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /getAllTreatmentNotes:
    get:
      operationId: getAllTreatmentNotes
      tags:
      - Patients
      summary: Get all treatment notes
      parameters:
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/PageLength'
      - $ref: '#/components/parameters/LastModified'
      - name: practitioner_id
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: A status envelope whose data contains treatment notes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /addTreatmentNote:
    post:
      operationId: addTreatmentNote
      tags:
      - Patients
      summary: Add a treatment note
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
              - api_key
              - patient_id
              - case_id
              - practitioner_id
              - date
              - notes
              properties:
                api_key:
                  type: string
                patient_id:
                  type: string
                case_id:
                  type: string
                practitioner_id:
                  type: string
                date:
                  type: string
                  format: date
                notes:
                  type: string
                appt_id:
                  type: string
      responses:
        '200':
          description: A status envelope containing the created treatment note.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /getPatientFiles:
    get:
      operationId: getPatientFiles
      tags:
      - Patients
      summary: Get patient files
      parameters:
      - name: patient_id
        in: query
        required: true
        schema:
          type: string
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/PageLength'
      - $ref: '#/components/parameters/LastModified'
      responses:
        '200':
          description: A status envelope whose data contains patient files.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /getFileUrl:
    get:
      operationId: getFileUrl
      tags:
      - Patients
      summary: Get a file URL
      parameters:
      - name: patient_id
        in: query
        required: true
        schema:
          type: string
      - name: file_id
        in: query
        required: true
        schema:
          type: string
      responses:
        '200':
          description: A status envelope containing a downloadable file URL.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /addCase:
    post:
      operationId: addCase
      tags:
      - Patients
      summary: Add a case
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
              - api_key
              - patient_id
              properties:
                api_key:
                  type: string
                patient_id:
                  type: string
                title:
                  type: string
                start_date:
                  type: string
                  format: date
                notes:
                  type: string
                primary_provider_id:
                  type: string
      responses:
        '200':
          description: A status envelope containing the created case.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Envelope'
  /updatePatientMedicareDetails:
    post:
      operationId: updatePatientMedicareDetails
      tags:
      - Patients
      summary: Update patient Medicare details
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
              - api_key
              - patient_id
              properties:
                api_key:
                  type: string
                patient_id:
                  type: string
                medicare_no:
                  type: string
                medicare_irn:
                  type: string
                expiry_date:
                  type: string
                  format: date
      responses:
        '200':
          description: A status envelope confirming the update.
          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'
    AddPatientRequest:
      type: object
      required:
      - api_key
      - first_name
      - last_name
      - date_of_birth
      properties:
        api_key:
          type: string
        first_name:
          type: string
        last_name:
          type: string
        date_of_birth:
          type: string
          format: date
        email:
          type: string
        client_notes:
          type: string
        alert_notes:
          type: string
    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".'