openapi: 3.0.3
info:
title: WellnessLiving Appointments Reports API
description: Curated, representative subset of WellnessLiving's official production API (RESTful, JSON-over-HTTPS). WellnessLiving is business-management software for fitness studios, gyms, spas, and salons; this API is the same one its own web and mobile clients (Achieve, Elevate) call, and is published for approved partners via an official OpenAPI document at github.com/wellnessliving/openapi (324 paths across 45+ resource areas as of the 2026-06-20 build). Endpoints below are grounded in that official spec and in the public github.com/wellnessliving/wl-sdk (PHP) and wl-sdk-js SDKs; this file selects roughly four representative endpoints per logical API area rather than reproducing the full catalog. Every WellnessLiving API resource is a `.json`-suffixed endpoint whose path is derived deterministically from the SDK model class's namespace (e.g. the PHP class `WellnessLiving\Wl\Staff\StaffElementModel` serves `/Wl/Staff/StaffElement.json`). Legacy numbered variants of several endpoints exist for backward compatibility (e.g. `Finish47`, `ServiceList52`, `Purchase72`) and are omitted here in favor of their current unsuffixed counterpart.
version: 1.1.20260620071011
contact:
name: WellnessLiving Support
email: support@wellnessliving.com
url: https://www.wellnessliving.com/support
license:
name: Proprietary
url: https://www.wellnessliving.com/knowledge-sharing/terms-of-use/
termsOfService: https://www.wellnessliving.com/knowledge-sharing/terms-of-use/
servers:
- url: https://us.wellnessliving.com
description: Production - United States data center
- url: https://au.wellnessliving.com
description: Production - Australia data center
- url: https://staging.wellnessliving.com
description: Staging (pre-release QA branch)
- url: https://demo.wellnessliving.com
description: Demo/trunk (active development branch)
security:
- BearerAuth: []
tags:
- name: Reports
paths:
/Wl/Report/Data.json:
get:
operationId: get_Wl_Report_Data
summary: Gets data of required report.
description: 'Loads the specified report for the given business, applying filter, sort, and pagination parameters,
and returns the report rows and totals.'
tags:
- Reports
parameters:
- $ref: '#/components/parameters/XErrorRules'
- name: i_page
in: query
required: true
schema:
type: integer
description: The page of results to show, starting at zero. The API will return 256 results per page.
- name: id_report
in: query
required: true
schema:
type: string
description: Enumerated/coded value (see WellnessLiving *Sid constant classes).
description: "The report ID.\nThe following reports are currently available via the API:\n
\n - [RsReportSid::LOGIN_LIST](#/components/schemas/RsReportSid) - A"
- name: id_report_group
in: query
required: true
schema:
type: string
description: Enumerated/coded value (see WellnessLiving *Sid constant classes).
description: The report group ID.
- name: id_report_page
in: query
required: false
schema:
type: string
description: Enumerated/coded value (see WellnessLiving *Sid constant classes).
description: 'The report page ID. One of the [RsReportPageSid](#/components/schemas/RsReportPageSid) constants.
If set, the collection of that page will be used, ot'
- name: id_report_view
in: query
required: true
schema:
type: string
description: Enumerated/coded value (see WellnessLiving *Sid constant classes).
description: The report view ID. One of the [RsReportChartViewSid](#/components/schemas/RsReportChartViewSid) constants.
- name: k_business
in: query
required: true
schema:
type: string
description: The key of business for which the report must be generated.
- name: s_filter
in: query
required: true
schema:
type: string
description: Filter settings in encoded format.
- name: s_sort
in: query
required: true
schema:
type: string
description: The field to use for sorting report data.
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: object
properties:
a_data:
description: The `a_data` field.
nullable: true
a_total:
description: The `a_total` field.
nullable: true
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationError'
'500':
$ref: '#/components/responses/ServerError'
/Wl/Report/PageData.json:
get:
operationId: get_Wl_Report_PageData
summary: Gets data of required report collection.
description: 'Loads all reports belonging to the specified report page collection for the given business, applying shared
filter, sort, group, and view parameters, and returns the data for each report keyed by report ID.'
tags:
- Reports
parameters:
- $ref: '#/components/parameters/XErrorRules'
- name: a_page
in: query
required: true
schema:
type: array
items:
type: string
description: 'The page of results to show for each report in collection, starting at zero (set by default). The API will return
256 results per page. Key is report'
- name: id_report_group
in: query
required: true
schema:
type: string
description: Enumerated/coded value (see WellnessLiving *Sid constant classes).
description: 'The report group ID. One of the [RsReportGroupSid](#/components/schemas/RsReportGroupSid) constants that describes the time
period (day, week, month,'
- name: id_report_page
in: query
required: true
schema:
type: string
description: Enumerated/coded value (see WellnessLiving *Sid constant classes).
description: 'The report page ID. One of the [RsReportPageSid](#/components/schemas/RsReportPageSid) constants.
The collection of that page will be used to get list'
- name: id_report_view
in: query
required: true
schema:
type: string
description: Enumerated/coded value (see WellnessLiving *Sid constant classes).
description: The report view ID. One of the [RsReportChartViewSid](#/components/schemas/RsReportChartViewSid) constants.
- name: k_business
in: query
required: true
schema:
type: string
description: The key of business for which the report collection must be generated.
- name: s_filter
in: query
required: true
schema:
type: string
description: Filter settings in encoded format.
- name: s_sort
in: query
required: true
schema:
type: string
description: The field to use for sorting report data.
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: object
properties:
a_data:
description: The `a_data` field.
nullable: true
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationError'
'500':
$ref: '#/components/responses/ServerError'
/Wl/Report/Access.json:
get:
operationId: get_Wl_Report_Access
summary: Checks access to given report.
description: 'Accepts either `id_report` (first-generation reports) or `cid_report` (second-generation reports), but not both,
and returns `has_access` indicating whether the current user may view the report in the given business.'
tags:
- Reports
parameters:
- $ref: '#/components/parameters/XErrorRules'
- name: cid_report
in: query
required: true
schema:
type: string
description: Enumerated/coded value (see WellnessLiving *Sid constant classes).
description: 'Report CID.
It''s used mostly for second generation reports.
For first generation reports use `id_report` instead.
Only one of these two fields shoul'
- name: id_report
in: query
required: true
schema:
type: string
description: Enumerated/coded value (see WellnessLiving *Sid constant classes).
description: 'Report ID.
It''s used mostly for first generation reports.
For second generation reports use `cid_report` instead.
Only one of these two fields shoul'
- name: k_business
in: query
required: true
schema:
type: string
description: ID of business for which access must be checked.
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: object
properties:
has_access:
description: The `has_access` field.
nullable: true
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationError'
'500':
$ref: '#/components/responses/ServerError'
components:
parameters:
XErrorRules:
name: X-Error-Rules
in: header
required: false
schema:
type: string
description: Opt in to mapping internal API error statuses to real 4xx HTTP codes. By default the API always answers HTTP 200 even on error, with the failure encoded in the JSON body; setting this header (e.g. to `default`) makes the gateway translate matched error statuses to 400/403/404 responses instead.
responses:
ServerError:
description: Unexpected server error.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
ValidationError:
description: The request payload failed field-level validation.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
Unauthorized:
description: Missing, expired, or invalid Bearer token / session.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
BadRequest:
description: 'Client-side error: invalid input, failed validation, throttling, or other request error (only returned as an HTTP status when `X-Error-Rules` opts in; otherwise encoded in a 200 body).'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
NotFound:
description: The requested resource does not exist.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
Forbidden:
description: Authenticated but not permitted to access this business, location, or resource.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
schemas:
ErrorResponse:
type: object
description: Standard WellnessLiving API error response shape.
properties:
status:
type: string
description: Machine-readable status/error code string (e.g. `access-denied`, `not-found`).
text_message:
type: string
description: Human-readable error message.
a_field:
type: object
additionalProperties: true
description: Per-field validation errors, when the failure is a 422-style validation error.
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: 'The officially published OpenAPI declares a JWT Bearer scheme: sign in via `POST /Core/Passport/Login/Enter/Enter.json`, then mint a token with `GET /Core/Passport/Enter/Jwt/JwtToken.json` and send it as `Authorization: Bearer `. The underlying PHP/JS SDKs additionally support the legacy scheme: a registered Application ID + secret code sign a per-request HMAC (SHA3-based) placed in the `Authorization:` header alongside session cookies established by the `Notepad`/`Enter` model pair. Both schemes require WellnessLiving''s Integrations Team to first approve API access, sign an NDA and API Agreement, and issue application credentials.'