splose MCP by usefulapi
Read splose patients, appointments, invoices, cases; book and cancel appointments, record payments.
Should I use this
Quality & Safety
Findings (2)
- LOWin splose_list_cancellation_reasons
- LOWin splose_get_practitioner_availability
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"splose": {
"url": "https://splose.usefulapi.io/mcp"
}
}
}Remote endpoints
https://splose.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (36)
🟢splose_get_account
The organisation and the practitioner who owns the API key, plus the key's expiry date. Good first call. GET /me.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_list_patients(id_gt, id_lt, update_gt, update_lt, include_archived, ...)
Patients (clients) of the practice, filtered, in id order, as short rows: id, name, email, birthdate, phones, tags, alert, archived. Use splose_get_patient for the full record. HEALTH DATA: only look people up when the user asks. GET /patients.
Input Schema
{
"type": "object",
"properties": {
"id_gt": {
"description": "Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"id_lt": {
"description": "Only objects with an id less than this: the previous page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"update_gt": {
"description": "Only objects updated after this date or date-time (UTC).",
"type": "string"
},
"update_lt": {
"description": "Only objects updated before this date or date-time (UTC).",
"type": "string"
},
"include_archived": {
"description": "true to include archived objects (default false).",
"type": "boolean"
},
"ids": {
"description": "Only these patient ids (max 100).",
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"firstname": {
"description": "Patient first name.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"lastname": {
"description": "Patient last name.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"email": {
"description": "Patient email.",
"type": "string",
"minLength": 3,
"maxLength": 320
},
"birthdate": {
"description": "Patient birth date, yyyy-mm-dd.",
"type": "string"
},
"phoneNumber": {
"description": "Phone number without the country code.",
"type": "string",
"minLength": 3,
"maxLength": 32
},
"patientTag": {
"description": "A patient tag, e.g. Self-managed.",
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_get_patient(patient_id)
One patient in full: contact details, address, NDIS number and plan info, Medicare/health fund, emergency contact, tags and custom fields. HEALTH DATA. GET /patients/{id}.
Input Schema
{
"type": "object",
"properties": {
"patient_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Patient id."
}
},
"required": [
"patient_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_list_appointments(id_gt, id_lt, update_gt, update_lt, include_archived, ...)
Appointments in id order: start/end (UTC), service, location, practitioner, price, note and the per-patient status (Arrived, Did not arrive, Cancelled, Completed, cancellation reason, invoice id). Filter by time window, patient, practitioner or status. GET /appointments.
Input Schema
{
"type": "object",
"properties": {
"id_gt": {
"description": "Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"id_lt": {
"description": "Only objects with an id less than this: the previous page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"update_gt": {
"description": "Only objects updated after this date or date-time (UTC).",
"type": "string"
},
"update_lt": {
"description": "Only objects updated before this date or date-time (UTC).",
"type": "string"
},
"include_archived": {
"description": "true to include archived objects (default false).",
"type": "boolean"
},
"start_gt": {
"description": "Only appointments starting after this date or date-time.",
"type": "string"
},
"start_lt": {
"description": "Only appointments starting before this date or date-time.",
"type": "string"
},
"patientId": {
"description": "Only appointments of this patient.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"practitionerId": {
"description": "Only appointments of this practitioner.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"status": {
"description": "Patient status of the appointment.",
"type": "string",
"enum": [
"Arrived",
"Did not arrive",
"Cancelled",
"Completed"
]
},
"status_update_gt": {
"description": "Only appointments whose status changed after this date or date-time.",
"type": "string"
},
"status_update_lt": {
"description": "Only appointments whose status changed before this date or date-time.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_get_appointment(appointment_id)
One appointment in full, with each patient's status, case, invoice and cancellation details. GET /appointments/{id}.
Input Schema
{
"type": "object",
"properties": {
"appointment_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Appointment id."
}
},
"required": [
"appointment_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_list_practitioners(id_gt, id_lt, update_gt, update_lt, include_archived, ...)
Practitioners (staff): name, email, profession, role, active flag, online-booking flag, timezone and their location/service connections. GET /practitioners.
Input Schema
{
"type": "object",
"properties": {
"id_gt": {
"description": "Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"id_lt": {
"description": "Only objects with an id less than this: the previous page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"update_gt": {
"description": "Only objects updated after this date or date-time (UTC).",
"type": "string"
},
"update_lt": {
"description": "Only objects updated before this date or date-time (UTC).",
"type": "string"
},
"include_archived": {
"description": "true to include archived objects (default false).",
"type": "boolean"
},
"firstname": {
"description": "Practitioner first name.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"lastname": {
"description": "Practitioner last name.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"email": {
"description": "Practitioner email.",
"type": "string",
"minLength": 3,
"maxLength": 320
},
"isActive": {
"description": "true = only active practitioners, false = only inactive.",
"type": "boolean"
},
"roleName": {
"description": "A predefined or custom role name.",
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_get_practitioner(practitioner_id)
One practitioner in full, including provider numbers and connections. GET /practitioners/{id}.
Input Schema
{
"type": "object",
"properties": {
"practitioner_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Practitioner id."
}
},
"required": [
"practitioner_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_list_locations(id_gt, id_lt, update_gt, update_lt, include_archived, ...)
Practice locations: title, address, phone, email, timezone, online-booking flag and the ids of the services offered there. GET /locations.
Input Schema
{
"type": "object",
"properties": {
"id_gt": {
"description": "Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"id_lt": {
"description": "Only objects with an id less than this: the previous page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"update_gt": {
"description": "Only objects updated after this date or date-time (UTC).",
"type": "string"
},
"update_lt": {
"description": "Only objects updated before this date or date-time (UTC).",
"type": "string"
},
"include_archived": {
"description": "true to include archived objects (default false).",
"type": "boolean"
},
"title": {
"description": "Location title.",
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_get_location(location_id)
One location in full. GET /locations/{id}.
Input Schema
{
"type": "object",
"properties": {
"location_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Location id."
}
},
"required": [
"location_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_list_services(id_gt, id_lt, update_gt, update_lt, include_archived, ...)
The service catalogue: name, type, code, duration (minutes), unit (Hour or Each), price, tax type, group size and tags. GET /services.
Input Schema
{
"type": "object",
"properties": {
"id_gt": {
"description": "Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"id_lt": {
"description": "Only objects with an id less than this: the previous page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"update_gt": {
"description": "Only objects updated after this date or date-time (UTC).",
"type": "string"
},
"update_lt": {
"description": "Only objects updated before this date or date-time (UTC).",
"type": "string"
},
"include_archived": {
"description": "true to include archived objects (default false).",
"type": "boolean"
},
"name": {
"description": "Service name.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"type": {
"description": "Service type.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"code": {
"description": "Service code.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"serviceTag": {
"description": "A service tag.",
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_get_service(service_id)
One service in full, including provider-travel pricing. GET /services/{id}.
Input Schema
{
"type": "object",
"properties": {
"service_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Service id."
}
},
"required": [
"service_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_list_contacts(id_gt, id_lt, update_gt, update_lt, include_archived, ...)
Contacts (GPs, plan managers, referrers, invoice recipients): name, type, email, address, phones and the ids of their patients, invoices and cases. GET /contacts.
Input Schema
{
"type": "object",
"properties": {
"id_gt": {
"description": "Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"id_lt": {
"description": "Only objects with an id less than this: the previous page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"update_gt": {
"description": "Only objects updated after this date or date-time (UTC).",
"type": "string"
},
"update_lt": {
"description": "Only objects updated before this date or date-time (UTC).",
"type": "string"
},
"include_archived": {
"description": "true to include archived objects (default false).",
"type": "boolean"
},
"firstname": {
"description": "Contact first name.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"lastname": {
"description": "Contact last name.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"email": {
"description": "Contact email.",
"type": "string",
"minLength": 3,
"maxLength": 320
},
"phoneNumber": {
"description": "Phone number without the country code.",
"type": "string",
"minLength": 3,
"maxLength": 32
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_get_contact(contact_id)
One contact in full. GET /contacts/{id}.
Input Schema
{
"type": "object",
"properties": {
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Contact id."
}
},
"required": [
"contact_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_list_cases(id_gt, id_lt, update_gt, update_lt, include_archived, ...)
Cases (funding referrals and plans): case number, budget, hours or appointment allowance, issue and expiry dates, tracking type, open flag and utilisation alert. HEALTH/FUNDING DATA. GET /cases.
Input Schema
{
"type": "object",
"properties": {
"id_gt": {
"description": "Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"id_lt": {
"description": "Only objects with an id less than this: the previous page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"update_gt": {
"description": "Only objects updated after this date or date-time (UTC).",
"type": "string"
},
"update_lt": {
"description": "Only objects updated before this date or date-time (UTC).",
"type": "string"
},
"include_archived": {
"description": "true to include archived objects (default false).",
"type": "boolean"
},
"patientId": {
"description": "Only cases of this patient.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"practitionerId": {
"description": "Only cases of this practitioner.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"contactId": {
"description": "Only cases referred by / billed to this contact.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"trackType": {
"description": "How the case is tracked.",
"type": "string",
"enum": [
"Appointments",
"Hours",
"Budget"
]
},
"status": {
"description": "Case status.",
"type": "string",
"enum": [
"Open",
"Closed",
"Expired"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_get_case(case_id)
One case in full, with its appointment connections. GET /cases/{id}.
Input Schema
{
"type": "object",
"properties": {
"case_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Case id."
}
},
"required": [
"case_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_list_invoices(id_gt, id_lt, update_gt, update_lt, include_archived, ...)
Invoices: number, issue/due dates, patient, contact, location, practitioner, subtotal, tax, total, paid amount, status (Draft, Awaiting Payment, Paid), line items and payment ids. Use status=Awaiting Payment for what is owed. GET /invoices.
Input Schema
{
"type": "object",
"properties": {
"id_gt": {
"description": "Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"id_lt": {
"description": "Only objects with an id less than this: the previous page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"update_gt": {
"description": "Only objects updated after this date or date-time (UTC).",
"type": "string"
},
"update_lt": {
"description": "Only objects updated before this date or date-time (UTC).",
"type": "string"
},
"include_archived": {
"description": "true to include archived objects (default false).",
"type": "boolean"
},
"patientId": {
"description": "Only invoices of this patient.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"locationId": {
"description": "Only invoices created at this location.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"practitionerId": {
"description": "Only invoices created by this practitioner.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"status": {
"description": "Invoice status.",
"type": "string",
"enum": [
"Draft",
"Awaiting Payment",
"Paid"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_get_invoice(invoice_id)
One invoice in full with its line items and payments. GET /invoices/{id}.
Input Schema
{
"type": "object",
"properties": {
"invoice_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Invoice id."
}
},
"required": [
"invoice_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_list_payments(id_gt, id_lt, update_gt, update_lt, include_archived, ...)
Payments received: payment number, amount, date, patient, location, payment method, the invoices each payment settles and credit allocations. GET /payments.
Input Schema
{
"type": "object",
"properties": {
"id_gt": {
"description": "Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"id_lt": {
"description": "Only objects with an id less than this: the previous page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"update_gt": {
"description": "Only objects updated after this date or date-time (UTC).",
"type": "string"
},
"update_lt": {
"description": "Only objects updated before this date or date-time (UTC).",
"type": "string"
},
"include_archived": {
"description": "true to include archived objects (default false).",
"type": "boolean"
},
"patientId": {
"description": "Only payments of this patient.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"locationId": {
"description": "Only payments created at this location.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_get_payment(payment_id)
One payment in full. GET /payments/{id}.
Input Schema
{
"type": "object",
"properties": {
"payment_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Payment id."
}
},
"required": [
"payment_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_list_payment_methods(id_gt, id_lt, update_gt, update_lt, include_archived)
Payment methods (cash, card, bank transfer and so on) with their ids, needed to record a payment. GET /payment-methods.
Input Schema
{
"type": "object",
"properties": {
"id_gt": {
"description": "Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"id_lt": {
"description": "Only objects with an id less than this: the previous page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"update_gt": {
"description": "Only objects updated after this date or date-time (UTC).",
"type": "string"
},
"update_lt": {
"description": "Only objects updated before this date or date-time (UTC).",
"type": "string"
},
"include_archived": {
"description": "true to include archived objects (default false).",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_list_credit_notes(id_gt, id_lt, update_gt, update_lt, patientId, ...)
Credit notes: number, invoice, patient, subtotal, tax, total, sent status, items and allocations. GET /credit-notes.
Input Schema
{
"type": "object",
"properties": {
"id_gt": {
"description": "Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"id_lt": {
"description": "Only objects with an id less than this: the previous page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"update_gt": {
"description": "Only objects updated after this date or date-time (UTC).",
"type": "string"
},
"update_lt": {
"description": "Only objects updated before this date or date-time (UTC).",
"type": "string"
},
"patientId": {
"description": "Only credit notes of this patient.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"invoiceId": {
"description": "Only credit notes of this invoice.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"practitionerId": {
"description": "Only credit notes created by this practitioner.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"sentStatus": {
"description": "Sent status.",
"type": "string",
"enum": [
"Sent",
"Viewed"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_list_waitlist(id_gt, id_lt, update_gt, update_lt, include_archived, ...)
Waitlist entries: patient, practitioner, location, wanted services, preferred days and time, tags and active flag. GET /waitlists.
Input Schema
{
"type": "object",
"properties": {
"id_gt": {
"description": "Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"id_lt": {
"description": "Only objects with an id less than this: the previous page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"update_gt": {
"description": "Only objects updated after this date or date-time (UTC).",
"type": "string"
},
"update_lt": {
"description": "Only objects updated before this date or date-time (UTC).",
"type": "string"
},
"include_archived": {
"description": "true to include archived objects (default false).",
"type": "boolean"
},
"practitionerId": {
"description": "Only items for this practitioner.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"userGroupId": {
"description": "Only items for this practitioner group.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"locationId": {
"description": "Only items for this location.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"patientId": {
"description": "Only items of this patient.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"dateAddedGt": {
"description": "Only items added after this date.",
"type": "string"
},
"dateAddedLt": {
"description": "Only items added before this date.",
"type": "string"
},
"isActive": {
"description": "true = still waiting, false = closed.",
"type": "boolean"
},
"serviceIds": {
"description": "Only items waiting for these services.",
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_list_patient_forms(id_gt, id_lt, update_gt, update_lt, include_archived, ...)
Forms sent to patients: title, status (Incomplete, In progress, Completed), patient, appointment, template and submission time. The form content is included. GET /patient-forms.
Input Schema
{
"type": "object",
"properties": {
"id_gt": {
"description": "Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"id_lt": {
"description": "Only objects with an id less than this: the previous page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"update_gt": {
"description": "Only objects updated after this date or date-time (UTC).",
"type": "string"
},
"update_lt": {
"description": "Only objects updated before this date or date-time (UTC).",
"type": "string"
},
"include_archived": {
"description": "true to include archived objects (default false).",
"type": "boolean"
},
"patientId": {
"description": "Only forms of this patient.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"templateId": {
"description": "Only forms from this template.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_list_support_activities(id_gt, id_lt, update_gt, update_lt, include_archived, ...)
Non-appointment billable activities (NDIS support activities): patient, practitioner, service, item code, quantity, price, invoice id. GET /support-activities.
Input Schema
{
"type": "object",
"properties": {
"id_gt": {
"description": "Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"id_lt": {
"description": "Only objects with an id less than this: the previous page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"update_gt": {
"description": "Only objects updated after this date or date-time (UTC).",
"type": "string"
},
"update_lt": {
"description": "Only objects updated before this date or date-time (UTC).",
"type": "string"
},
"include_archived": {
"description": "true to include archived objects (default false).",
"type": "boolean"
},
"start_gt": {
"description": "Only activities starting after this date or date-time.",
"type": "string"
},
"start_lt": {
"description": "Only activities starting before this date or date-time.",
"type": "string"
},
"patientId": {
"description": "Only activities of this patient.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_list_busy_times(id_gt, id_lt, update_gt, update_lt, include_archived, ...)
Blocked-out time in practitioner calendars (leave, admin time): start/end, location, practitioners, type and note. GET /busy-times.
Input Schema
{
"type": "object",
"properties": {
"id_gt": {
"description": "Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"id_lt": {
"description": "Only objects with an id less than this: the previous page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"update_gt": {
"description": "Only objects updated after this date or date-time (UTC).",
"type": "string"
},
"update_lt": {
"description": "Only objects updated before this date or date-time (UTC).",
"type": "string"
},
"include_archived": {
"description": "true to include archived objects (default false).",
"type": "boolean"
},
"start_gt": {
"description": "Only busy times starting after this date or date-time.",
"type": "string"
},
"start_lt": {
"description": "Only busy times starting before this date or date-time.",
"type": "string"
},
"busyTimeTypeId": {
"description": "Only busy times of this type.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"practitionerId": {
"description": "Only busy times of this practitioner.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_list_cancellation_reasons(id_gt, id_lt, update_gt, update_lt, include_archived)
Cancellation reasons with their ids, needed to cancel an appointment. GET /cancellation-reasons.
Input Schema
{
"type": "object",
"properties": {
"id_gt": {
"description": "Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"id_lt": {
"description": "Only objects with an id less than this: the previous page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"update_gt": {
"description": "Only objects updated after this date or date-time (UTC).",
"type": "string"
},
"update_lt": {
"description": "Only objects updated before this date or date-time (UTC).",
"type": "string"
},
"include_archived": {
"description": "true to include archived objects (default false).",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_list_custom_fields
The custom fields defined for patients: id, name, type (short text, dropdown, date and so on), required flag and options. GET /custom-field/.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_get_practitioner_availability(practitioner_id, startDate, endDate, locationId)
A practitioner's working-hours availability per date and location (start/end time, weekly or fortnightly repeat). The window is at most 100 days. This is the roster, not the open slots: use splose_find_free_slots for bookable times. GET /availabilities/{practitionerId}.
Input Schema
{
"type": "object",
"properties": {
"practitioner_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Practitioner id."
},
"startDate": {
"type": "string",
"description": "First date of the window."
},
"endDate": {
"type": "string",
"description": "Last date of the window, at most 100 days after startDate."
},
"locationId": {
"description": "Only this location.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"practitioner_id",
"startDate",
"endDate"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢splose_find_free_slots(serviceId, locationId, practitionerIds, from, to, ...)
Bookable free slots for one or more practitioners at a location for one patient service, between from and to (the window is at most 7 days). Returns, per practitioner, the start/end of each open slot in UTC. Read-only. GET /free-slots.
Input Schema
{
"type": "object",
"properties": {
"serviceId": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Service id (splose_list_services)."
},
"locationId": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Location id (splose_list_locations)."
},
"practitionerIds": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"description": "One or more practitioner ids."
},
"from": {
"type": "string",
"description": "Start of the search window (UTC)."
},
"to": {
"description": "End of the search window, up to 7 days after from.",
"type": "string"
},
"interval": {
"description": "Slot step in minutes (default 15).",
"type": "integer",
"minimum": 5,
"maximum": 240
}
},
"required": [
"serviceId",
"locationId",
"practitionerIds",
"from"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴splose_create_appointment(start, end, serviceId, locationId, practitionerId, ...)
WRITE: books ONE appointment for one patient with one practitioner, service and location, from start to end (UTC). Splose may send the patient its normal booking confirmation or reminders according to the practice's settings, and the appointment can later be invoiced. Check splose_find_free_slots first. Not idempotent: calling twice books twice. POST /appointments.
Input Schema
{
"type": "object",
"properties": {
"start": {
"type": "string",
"description": "Appointment start (UTC)."
},
"end": {
"type": "string",
"description": "Appointment end (UTC), after start."
},
"serviceId": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Service id."
},
"locationId": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Location id."
},
"practitionerId": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Practitioner id."
},
"patientId": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Patient id."
},
"caseId": {
"description": "Case (funding plan) id to attach.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"note": {
"description": "Appointment note.",
"type": "string",
"maxLength": 5000
}
},
"required": [
"start",
"end",
"serviceId",
"locationId",
"practitionerId",
"patientId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴splose_update_appointment(appointment_id, start, end, serviceId, locationId, ...)
WRITE: changes the time, service, location, practitioner, case or patient of ONE existing appointment; send only the fields to change. Splose may notify the patient of a change according to the practice's settings. Same input twice gives the same result. PUT /appointments/{id}.
Input Schema
{
"type": "object",
"properties": {
"appointment_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Appointment id."
},
"start": {
"description": "New start (UTC).",
"type": "string"
},
"end": {
"description": "New end (UTC).",
"type": "string"
},
"serviceId": {
"description": "New service id.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"locationId": {
"description": "New location id.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"practitionerId": {
"description": "New practitioner id.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"caseId": {
"description": "New case id.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"patientId": {
"description": "New patient id.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"appointment_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴splose_cancel_appointment(appointment_id, reasonId, note, patient_id, confirm)
WRITE: cancels ONE appointment with a cancellation reason (ids from splose_list_cancellation_reasons) and an optional note. The reason's billable rate may create a cancellation charge, and the patient may be notified per the practice's settings. For a group appointment pass patient_id to cancel only that patient's place; without it the whole appointment is cancelled. Cannot be undone through this server: confirm with the user first and pass confirm: true. POST /appointments/{id}/cancellation or /appointments/{id}/patients/{patientId}/cancellation.
Input Schema
{
"type": "object",
"properties": {
"appointment_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Appointment id."
},
"reasonId": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Cancellation reason id."
},
"note": {
"description": "Optional cancellation note.",
"type": "string",
"maxLength": 5000
},
"patient_id": {
"description": "Group appointments only: cancel just this patient's participation.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"confirm": {
"type": "boolean",
"const": true,
"description": "Must be true: the user has confirmed this cancellation (it may charge a fee and notify the patient)."
}
},
"required": [
"appointment_id",
"reasonId",
"confirm"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡splose_mark_patient_arrived(appointment_id, patient_id)
WRITE: marks the patient of ONE appointment as arrived (check-in). For a group appointment pass patient_id to mark just that patient. Marking twice has the same effect. POST /appointments/{id}/arrival or /appointments/{id}/patients/{patientId}/arrival.
Input Schema
{
"type": "object",
"properties": {
"appointment_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Appointment id."
},
"patient_id": {
"description": "Group appointments only: the patient who arrived.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"appointment_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡splose_create_patient(firstname, lastname, middleName, preferredName, title, ...)
WRITE: adds ONE new patient record (first and last name required). Search with splose_list_patients first to avoid a duplicate. Patient messaging follows the practice's settings and communicationPreference. Not idempotent: calling twice creates two patients. HEALTH DATA: only enter what the user supplied. POST /patients.
Input Schema
{
"type": "object",
"properties": {
"firstname": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "First name."
},
"lastname": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Last name."
},
"middleName": {
"type": "string",
"maxLength": 100
},
"preferredName": {
"type": "string",
"maxLength": 100
},
"title": {
"description": "e.g. Mr., Ms., Dr.",
"type": "string",
"maxLength": 30
},
"email": {
"type": "string",
"maxLength": 320,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"sex": {
"type": "string",
"maxLength": 50
},
"genderIdentity": {
"type": "string",
"maxLength": 100
},
"pronouns": {
"type": "string",
"maxLength": 50
},
"birthdate": {
"description": "Birth date, yyyy-mm-dd.",
"type": "string"
},
"timezone": {
"description": "IANA timezone, e.g. Australia/Adelaide.",
"type": "string",
"maxLength": 64
},
"phoneNumbers": {
"maxItems": 5,
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"Mobile",
"Home",
"Work",
"Fax",
"Other"
]
},
"code": {
"description": "Country code, e.g. +61.",
"type": "string",
"maxLength": 8
},
"phoneNumber": {
"type": "string",
"minLength": 3,
"maxLength": 32,
"description": "Number without the country code."
}
},
"required": [
"phoneNumber"
],
"additionalProperties": false
}
},
"addressL1": {
"type": "string",
"maxLength": 200
},
"addressL2": {
"type": "string",
"maxLength": 200
},
"city": {
"type": "string",
"maxLength": 100
},
"state": {
"type": "string",
"maxLength": 50
},
"postalCode": {
"type": "string",
"maxLength": 20
},
"country": {
"type": "string",
"maxLength": 100
},
"ndisNumber": {
"description": "NDIS participant number.",
"type": "string",
"maxLength": 20
},
"medicareNum": {
"type": "string",
"maxLength": 20
},
"irn": {
"description": "Medicare reference number.",
"type": "string",
"maxLength": 5
},
"emergencyContactName": {
"type": "string",
"maxLength": 200
},
"emergencyContactNumber": {
"type": "string",
"maxLength": 32
},
"emergencyContactRelationship": {
"type": "string",
"maxLength": 100
},
"alert": {
"description": "Alert message shown on the patient record.",
"type": "string",
"maxLength": 5000
},
"extraInfo": {
"type": "string",
"maxLength": 5000
},
"invoiceRecipientId": {
"description": "Contact id that receives the invoices.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"communicationPreference": {
"description": "Defaults to the organisation's preference.",
"type": "string",
"enum": [
"NONE",
"SMS",
"SMS_EMAIL",
"EMAIL"
]
}
},
"required": [
"firstname",
"lastname"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡splose_create_contact(type, name, email, title, firstName, ...)
WRITE: adds ONE contact (GP, plan manager, referrer, payer). type, name and email are required (type is Splose's contact type, e.g. Standard; see splose_list_contacts for the values in use). Not idempotent: calling twice creates two contacts. POST /contacts.
Input Schema
{
"type": "object",
"properties": {
"type": {
"type": "string",
"minLength": 1,
"maxLength": 50,
"description": "Contact type, e.g. Standard (copy the value from an existing contact)."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Display name, e.g. a plan manager's business name."
},
"email": {
"type": "string",
"maxLength": 320,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"title": {
"type": "string",
"maxLength": 30
},
"firstName": {
"type": "string",
"maxLength": 100
},
"lastName": {
"type": "string",
"maxLength": 100
},
"preferredName": {
"type": "string",
"maxLength": 100
},
"occupation": {
"type": "string",
"maxLength": 100
},
"companyName": {
"type": "string",
"maxLength": 200
},
"providerNumber": {
"type": "string",
"maxLength": 50
},
"doctorType": {
"type": "string",
"enum": [
"GP",
"Specialist"
]
},
"addressL1": {
"type": "string",
"maxLength": 200
},
"addressL2": {
"type": "string",
"maxLength": 200
},
"suburb": {
"type": "string",
"maxLength": 100
},
"state": {
"type": "string",
"maxLength": 50
},
"postalCode": {
"type": "string",
"maxLength": 20
},
"country": {
"type": "string",
"maxLength": 100
},
"phoneNumbers": {
"maxItems": 5,
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"Mobile",
"Home",
"Work",
"Fax",
"Other"
]
},
"code": {
"description": "Country code, e.g. +61.",
"type": "string",
"maxLength": 8
},
"phoneNumber": {
"type": "string",
"minLength": 3,
"maxLength": 32,
"description": "Number without the country code."
}
},
"required": [
"phoneNumber"
],
"additionalProperties": false
}
}
},
"required": [
"type",
"name",
"email"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴splose_record_payment(invoiceId, patientId, locationId, paymentMethodId, amount, ...)
WRITE, MONEY: records ONE payment received (cash, card, transfer) against ONE invoice; it moves the invoice towards Paid and is shown in the patient's account. It does NOT charge anyone's card. amount must not exceed what is owed (check splose_get_invoice). Not idempotent: calling twice records two payments, and this server cannot delete a payment, so confirm the details with the user first and pass confirm: true. Ids come from splose_get_invoice and splose_list_payment_methods. POST /payments.
Input Schema
{
"type": "object",
"properties": {
"invoiceId": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Invoice id the payment settles."
},
"patientId": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Patient id of the invoice."
},
"locationId": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Location id."
},
"paymentMethodId": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Payment method id (splose_list_payment_methods)."
},
"amount": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000000,
"description": "Amount paid, in dollars."
},
"paymentDate": {
"type": "string",
"description": "Date the money was received."
},
"confirm": {
"type": "boolean",
"const": true,
"description": "Must be true: the user has confirmed the invoice, amount and payment method."
}
},
"required": [
"invoiceId",
"patientId",
"locationId",
"paymentMethodId",
"amount",
"paymentDate",
"confirm"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence