API Reference
The WCONLINE API provides a single read endpoint, GET /api, that exports
appointments, cancellations, client report forms (CRFs), availability, and
orphaned appointments for a given date. It’s used by reporting and
data-warehouse integrations.
Base URL
Section titled “Base URL”Every request is made against your center’s own WCONLINE domain. The examples
below use the demo center https://demo.mywconline.com — replace it with your
own domain (e.g. https://yourschool.mywconline.com or your custom domain).
Authentication
Section titled “Authentication”Authenticate with the API key configured under Global System Settings → Area Tools → API Configuration. Send it as a bearer token:
Authorization: Bearer {api_key}IP allowlist
Section titled “IP allowlist”If you configure one or more IP addresses on the API Configuration page, requests
from any other address are rejected with 403. Leaving the allowlist empty
disables the IP restriction.
Rate limiting
Section titled “Rate limiting”The endpoint is limited to 300 requests per hour per API key. Exceeding it
returns 429 Too Many Requests.
The export endpoint
Section titled “The export endpoint”GET /api?type={type}&date={date}Returns a JSON array of records for the requested date. All values are
returned as strings; boolean-style fields are either "YES" or an empty
string "". When no records match, an empty array [] is returned.
Query parameters
Section titled “Query parameters”| Parameter | Required | Description |
|---|---|---|
type | Yes | The kind of records to export (case-insensitive). One of the values in the table below. |
date | Yes | The date to export. Both YYYYMMDD and YYYY-MM-DD are accepted. |
type values
Section titled “type values”type | Returns | Row format |
|---|---|---|
APPT | Appointments on the date | Appointment |
CANCELED | Cancellations on the date | Canceled |
CRF | Client report forms filed for the date | Client report form |
ORPHAN | Appointments with no matching CRF | Appointment |
AVAIL | Open (available) appointment slots per visible schedule | Availability |
CUSTOM | Tenant-defined export with dynamic columns | Custom |
Example
Section titled “Example”GET https://demo.mywconline.com/api?type=APPT&date=2025-04-01Authorization: Bearer 7bff5c9d-ff7e-410f-b39f-b8da03017470[ { "Appointment ID": "sc6f1a2b3c4d5e", "First Name": "Jordan", "Last Name": "Rivera", "Email Address": "jrivera@example.edu", "Schedule Title": "Main Writing Center", "Staff or Resource": "Alex T.", "Date": "2025-04-01", "Start Time": "9:00 am", "End Time": "9:30 am", "Walk-In": "", "No-Show": "", "Placeholder": "", "Online": "ONLINE", "Focus": "Brainstorming" }]Dates and times
Section titled “Dates and times”All dates and times in API responses are returned in your institution’s time
zone — the one configured under Global System Settings →
General Settings — rather than in
UTC. Times use a 12-hour format (e.g. 9:00 am).
Response formats
Section titled “Response formats”Every value is a string. Boolean-style fields are "YES" or "".
Appointment
Section titled “Appointment”Returned for type=APPT and type=ORPHAN (orphans are appointments with no
matching CRF).
| Field | Description |
|---|---|
Appointment ID | The appointment’s unique ID. |
First Name | Reflects your center’s “first name” field label (default First Name). |
Last Name | Reflects your center’s “last name” field label (default Last Name). |
Email Address | The client’s email address. |
Schedule Title | The schedule the appointment is on. |
Staff or Resource | The staff member or resource. |
Date | The appointment date (YYYY-MM-DD). |
Start Time | e.g. 9:00 am. |
End Time | e.g. 9:30 am. |
Walk-In | "YES" for a walk-in/drop-in appointment, otherwise "". |
No-Show | "YES" if the appointment was missed, otherwise "". |
Placeholder | "YES" for a placeholder appointment, otherwise "". |
Online | "ONLINE", "ETUTORING", or "". |
Focus | The appointment focus, or "" if none. |
Canceled
Section titled “Canceled”Returned for type=CANCELED. Includes every Appointment field
above, plus:
| Field | Description |
|---|---|
Canceled By | The name of the person who canceled, or "". |
Canceled Date | When the cancellation happened (center timezone), or "". |
Client report form
Section titled “Client report form”Returned for type=CRF.
| Field | Description |
|---|---|
Report ID | The report’s unique ID. |
Appointment ID | The originating appointment ID when the report is tied to a scheduled appointment, otherwise "". |
First Name | The client’s first name. |
Last Name | The client’s last name. |
Email Address | The client’s email address. |
Schedule Title | The schedule the report is on. |
Staff or Resource | The staff member or resource. |
Date | The report date (YYYY-MM-DD). |
Start Time | e.g. 9:00 am. |
End Time | e.g. 9:30 am. |
Length | Appointment length in minutes. |
Off-Schedule? | "YES" for an off-schedule report, otherwise "". |
Availability
Section titled “Availability”Returned for type=AVAIL.
| Field | Description |
|---|---|
Schedule Title | The schedule the open slot is on. |
Date | The slot date (YYYY-MM-DD). |
Start Time | e.g. 9:00 am. |
Resource | The staff member or resource the slot is open on. |
Custom
Section titled “Custom”Returned for type=CUSTOM. The columns are dynamic — they’re defined by your
center’s custom-export configuration and reflect your renamed field labels,
custom form questions, and language settings. Because of this, there’s no fixed
schema: every value is a string and the keys are whatever your custom export
selects (e.g. "Member ID", "Email Address", the text of a registration
question, "Appointment Date", "Last Login").
Status codes
Section titled “Status codes”| Code | Meaning |
|---|---|
200 | Success — a JSON array of records (empty [] if none matched). |
403 | Authentication failed (missing or invalid bearer token), or the caller’s IP is not on the allowlist. |
404 | No API key is configured for this center. |
422 | The request parameters failed validation. |
429 | Rate limit exceeded (300 requests per hour per API key). |
Errors return a JSON body with a message, and — for validation failures — an
errors object keyed by field name:
{ "message": "The given data was invalid.", "errors": { "type": ["The selected type is invalid."] }}