Build secure and scalable custom apps for Online Booking. Our flexible API provides many options for availability and booking. <br<br Take the API for a test drive.
Bring your own key. This API needs your own OnSched Consumer API key - get one from the provider, add it once below, and the proxy injects it on every call. Your OmniStream plan covers the unified SDK, key storage, and proxy - the provider's own rate limits still apply to your key.
This is a community listing. If you own this API, you can request ownership.
npm install omnistream-sdkimport { OmniClient } from "omnistream-sdk";
const omni = new OmniClient({ token: process.env.OMNI_KEY! });
// One key reaches every API on the marketplace.
const data = await omni.call("onsched/getconsumer_v1_appointments");One install, one key - the same client calls every API on the marketplace.
id of business location
Filter by email address
Filter by lastname or part of it
Filter by phone number or part of it
Filter by service
Filter by calendar
Filter by resource
Filter by customer
Filter by service allocation
Format YYYY-MM-DD. Filter by on/after startDate
Format YYYY-MM-DD. Filter on/before endDate
Filter by status: IN, BK, CN, RE, RS
Filter by the email of who booked
Starting row of page, default 0
Page limit, default 20, max 100
Get Appointments
Create Appointment
Get Custom Fields Labels
Get Custom Fields List
Get Appointment
/**
* OnSchedConsumerAPI - generated by OmniStream from OnSched Consumer API's OpenAPI spec.
* One typed method per endpoint. A single Omni key reaches the API.
*/
const DEFAULT_BASE = "https://grid.skinvaults.online/v1/proxy/onsched";
export class OnSchedConsumerAPIError extends Error {
status: number;
code?: string;
constructor(status: number, code: string | undefined, message?: string) {
super(message || `OnSchedConsumerAPI error ${status}`);
this.name = "OnSchedConsumerAPIError";
this.status = status;
this.code = code;
}
}
export interface OnSchedConsumerAPIOptions {
baseUrl?: string;
fetch?: typeof fetch;
timeoutMs?: number;
}
export class OnSchedConsumerAPI {
/** @param token Your OmniStream key (one key for every API). */
constructor(private token: string, private opts: OnSchedConsumerAPIOptions = {}) {
if (!token) throw new Error("OnSchedConsumerAPI: token is required");
}
rateLimit: { remainingMinute?: number; remainingDay?: number } | null = null;
private async _request(method: string, path: string, { params, body }: { params?: Record<string, unknown>; body?: unknown } = {}): Promise<any> {
const f = this.opts.fetch ?? globalThis.fetch;
const url = new URL((this.opts.baseUrl ?? DEFAULT_BASE).replace(/\/+$/, "") + path);
if (params) for (const [k, v] of Object.entries(params)) if (v != null) url.searchParams.set(k, String(v));
const headers: Record<string, string> = { "x-omni-key": this.token };
if (body !== undefined) headers["content-type"] = "application/json";
const res = await f(url, { method, headers, body: body !== undefined ? JSON.stringify(body) : undefined });
this.rateLimit = {
remainingMinute: Number(res.headers.get("x-ratelimit-remaining-minute")) || undefined,
remainingDay: Number(res.headers.get("x-ratelimit-remaining-day")) || undefined,
};
const data = await res.json().catch(() => ({}));
if (!res.ok) throw new OnSchedConsumerAPIError(res.status, data?.error?.code, data?.error?.message);
return data.data ?? data;
}
/** Get Appointments */
getconsumerV1Appointments(params: { "locationId"?: string; "email"?: string; "lastname"?: string; "phone"?: string; "serviceId"?: string; "calendarId"?: string; "resourceId"?: string; "customerId"?: string; "serviceAllocationId"?: string; "startDate"?: string; "endDate"?: string; "status"?: string; "bookedBy"?: string; "offset"?: number; "limit"?: number }): Promise<any> {
return this._request("GET", "/consumer/v1/appointments", { params });
}
/** Create Appointment */
postconsumerV1Appointments(body: unknown, params: { "completeBooking"?: string }): Promise<any> {
return this._request("POST", "/consumer/v1/appointments", { body, params });
}
/** Get Custom Fields Labels */
getconsumerV1AppointmentsBookingfields(params: { "locationId"?: string }): Promise<any> {
return this._request("GET", "/consumer/v1/appointments/bookingfields", { params });
}
/** Get Custom Fields List */
getconsumerV1AppointmentsCustomfields(params: { "locationId"?: string }): Promise<any> {
return this._request("GET", "/consumer/v1/appointments/customfields", { params });
}
/** Get Appointment */
getconsumerV1AppointmentsId(params: { "id": string }): Promise<any> {
return this._request("GET", "/consumer/v1/appointments/{id}", { params });
}
/** Delete Appointment */
deleteconsumerV1AppointmentsId(params: { "id": string }): Promise<any> {
return this._request("DELETE", "/consumer/v1/appointments/{id}", { params });
}
/** Book Appointment */
putconsumerV1AppointmentsIdBook(body: unknown, params: { "id": string }): Promise<any> {
return this._request("PUT", "/consumer/v1/appointments/{id}/book", { body, params });
}
/** Cancel Appointment */
putconsumerV1AppointmentsIdCancel(params: { "id": string }): Promise<any> {
return this._request("PUT", "/consumer/v1/appointments/{id}/cancel", { params });
}
/** Confirm Appointment */
putconsumerV1AppointmentsIdConfirm(params: { "id": number; "undo"?: boolean }): Promise<any> {
return this._request("PUT", "/consumer/v1/appointments/{id}/confirm", { params });
}
/** Set NoShow Status */
putconsumerV1AppointmentsIdNoshow(body: unknown, params: { "id": number }): Promise<any> {
return this._request("PUT", "/consumer/v1/appointments/{id}/noshow", { body, params });
}
/** Reschedule Appointment */
putconsumerV1AppointmentsIdReschedule(body: unknown, params: { "id": string }): Promise<any> {
return this._request("PUT", "/consumer/v1/appointments/{id}/reschedule", { body, params });
}
/** Reserve Appointment */
putconsumerV1AppointmentsIdReserve(body: unknown, params: { "id": string; "sendNotifications"?: boolean }): Promise<any> {
return this._request("PUT", "/consumer/v1/appointments/{id}/reserve", { body, params });
}
/** Get Available Times */
getconsumerV1AvailabilityServiceidStartdateEnd(params: { "serviceId": string; "startDate": string; "endDate": string; "startTime"?: number; "endTime"?: number; "locationId"?: string; "resourceId"?: string; "resourceGroupId"?: string; "resourceIds"?: string; "roundRobin"?: string; "duration"?: number; "interval"?: number; "timezoneName"?: string; "tzOffset"?: number; "destination"?: string; "dayAvailabilityStartDate"?: string; "dayAvailability"?: number; "firstDayAvailable"?: boolean }): Promise<any> {
return this._request("GET", "/consumer/v1/availability/{serviceId}/{startDate}/{endDate}", { params });
}
/** Get Available Days */
getconsumerV1AvailabilityServiceidStartdateEnd(params: { "serviceId": string; "startDate": string; "endDate": string; "locationId"?: string; "resourceId"?: string; "tzOffset"?: number }): Promise<any> {
return this._request("GET", "/consumer/v1/availability/{serviceId}/{startDate}/{endDate}/days", { params });
}
/** Get Unavailable Times */
getconsumerV1AvailabilityServiceidStartdateEnd(params: { "serviceId": string; "startDate": string; "endDate": string; "locationId"?: string; "resourceId"?: string; "duration"?: number; "tzOffset"?: number; "skipTimePastUnavailability"?: boolean }): Promise<any> {
return this._request("GET", "/consumer/v1/availability/{serviceId}/{startDate}/{endDate}/unavailable", { params });
}
/** List Customers */
getconsumerV1Customers(params: { "locationId"?: string; "groupId"?: string; "email"?: string; "lastname"?: string; "deleted"?: boolean; "offset"?: number; "limit"?: number }): Promise<any> {
return this._request("GET", "/consumer/v1/customers", { params });
}
/** Create Customer */
postconsumerV1Customers(body: unknown): Promise<any> {
return this._request("POST", "/consumer/v1/customers", { body });
}
/** Get Customer Booking Fields */
getconsumerV1CustomersBookingfields(params: { "locationId"?: string }): Promise<any> {
return this._request("GET", "/consumer/v1/customers/bookingfields", { params });
}
/** List Country Codes */
getconsumerV1CustomersCountries(): Promise<any> {
return this._request("GET", "/consumer/v1/customers/countries", {});
}
/** Get Customer Custom Fields */
getconsumerV1CustomersCustomfields(params: { "locationId"?: string; "leadQuestions"?: boolean }): Promise<any> {
return this._request("GET", "/consumer/v1/customers/customfields", { params });
}
/** List Country States */
getconsumerV1CustomersStates(params: { "country"?: string }): Promise<any> {
return this._request("GET", "/consumer/v1/customers/states", { params });
}
/** Get Customer */
getconsumerV1CustomersId(params: { "id": string }): Promise<any> {
return this._request("GET", "/consumer/v1/customers/{id}", { params });
}
/** Update Customer */
putconsumerV1CustomersId(body: unknown, params: { "id": string }): Promise<any> {
return this._request("PUT", "/consumer/v1/customers/{id}", { body, params });
}
/** Delete Customer */
deleteconsumerV1CustomersId(params: { "id": string }): Promise<any> {
return this._request("DELETE", "/consumer/v1/customers/{id}", { params });
}
/** List Locations */
getconsumerV1Locations(params: { "name"?: string; "nearestTo"?: string; "proximity"?: number; "units"?: string; "serviceId"?: string; "friendlyId"?: string; "regionId"?: string; "ignorePrimary"?: boolean; "offset"?: number; "limit"?: number }): Promise<any> {
return this._request("GET", "/consumer/v1/locations", { params });
}
/** Get Location */
getconsumerV1LocationsId(params: { "id": string }): Promise<any> {
return this._request("GET", "/consumer/v1/locations/{id}", { params });
}
/** List Resource Groups */
getconsumerV1Resourcegroups(params: { "locationId"?: string; "deleted"?: boolean; "offset"?: number; "limit"?: number }): Promise<any> {
return this._request("GET", "/consumer/v1/resourcegroups", { params });
}
/** Get Resource Group */
getconsumerV1ResourcegroupsId(params: { "id": string }): Promise<any> {
return this._request("GET", "/consumer/v1/resourcegroups/{id}", { params });
}
/** List Resources */
getconsumerV1Resources(params: { "locationId"?: string; "resourceGroupId"?: number; "email"?: string; "name"?: string; "sortOrder"?: string; "offset"?: number; "limit"?: number }): Promise<any> {
return this._request("GET", "/consumer/v1/resources", { params });
}
/** Get Resource */
getconsumerV1ResourcesId(params: { "id": number }): Promise<any> {
return this._request("GET", "/consumer/v1/resources/{id}", { params });
}
/** Get Resource Linked Services */
getconsumerV1ResourcesIdServices(params: { "id": number; "offset"?: number; "limit"?: number }): Promise<any> {
return this._request("GET", "/consumer/v1/resources/{id}/services", { params });
}
/** List Service Groups */
getconsumerV1Servicegroups(params: { "locationId"?: string; "offset"?: number; "limit"?: number }): Promise<any> {
return this._request("GET", "/consumer/v1/servicegroups", { params });
}
/** Get Service Group */
getconsumerV1ServicegroupsId(params: { "id": number }): Promise<any> {
return this._request("GET", "/consumer/v1/servicegroups/{id}", { params });
}
/** List Services */
getconsumerV1Services(params: { "locationId"?: string; "serviceGroupId"?: number; "defaultService"?: boolean; "allLocations"?: boolean; "scope"?: string; "name"?: string; "serviceId"?: string; "offset"?: number; "limit"?: number; "sortOrder"?: string; "sortDescending"?: boolean }): Promise<any> {
return this._request("GET", "/consumer/v1/services", { params });
}
/** Get Service Allocation */
getconsumerV1ServicesAllocationsId(params: { "id": string }): Promise<any> {
return this._request("GET", "/consumer/v1/services/allocations/{id}", { params });
}
/** Get Service */
getconsumerV1ServicesId(params: { "id": number }): Promise<any> {
return this._request("GET", "/consumer/v1/services/{id}", { params });
}
/** List Service Allocations */
getconsumerV1ServicesIdAllocations(params: { "id": string; "locationId"?: string; "resourceId"?: string; "startDate"?: string; "endDate"?: string; "offset"?: number; "limit"?: number }): Promise<any> {
return this._request("GET", "/consumer/v1/services/{id}/allocations", { params });
}
/** List Resources for Service */
getconsumerV1ServicesIdResources(params: { "id": string; "locationId"?: string; "offset"?: number; "limit"?: number }): Promise<any> {
return this._request("GET", "/consumer/v1/services/{id}/resources", { params });
}
}
export default OnSchedConsumerAPI;
No reviews yet. Be the first to rate this API.
Yes. OnSched Consumer API uses bearer authentication, so you bring your own key from the provider. You store it once on OmniStream and the proxy injects it into every call, so your code only ever sends your Omni key.
Build secure and scalable custom apps for Online Booking. Our flexible API provides many options for availability and booking. <br<br Take the API for a test drive. It exposes 38 endpoints over GET, POST, DELETE, PUT, including GET /consumer/v1/appointments, POST /consumer/v1/appointments, GET /consumer/v1/appointments/bookingfields.
Install the OmniStream SDK for your language and call OnSched Consumer API through it. The client is generated from this API's OpenAPI spec, so parameters and responses are fully typed, and the same client also calls every other API in the marketplace.
You can start on the free plan. OmniStream charges for the unified SDK, key storage and proxy rather than for OnSched Consumer API itself, and OnSched Consumer API's own rate limits still apply to your provider key.
Notion: The official Notion API - read and write pages, databases, blocks, comments, and users, plus workspace search.
Delete Appointment
Book Appointment
Cancel Appointment
Confirm Appointment
Set NoShow Status
Reschedule Appointment
Reserve Appointment
Get Available Times
Get Available Days
Get Unavailable Times
List Customers
Create Customer
Get Customer Booking Fields
List Country Codes
Get Customer Custom Fields
List Country States
Get Customer
Update Customer
Delete Customer
List Locations
Get Location
List Resource Groups
Get Resource Group
List Resources
Get Resource
Get Resource Linked Services
List Service Groups
Get Service Group
List Services
Get Service Allocation
Get Service
List Service Allocations
List Resources for Service