Developers

Designed for beauty, built for growth.

Build on the PatientNow APIs

REST APIs for med-spa and aesthetics practices. Read and write patients, appointments, services, treatments and more — the same data that powers PatientNow. Pick the API for your product and make your first call in minutes.

Choose your API

Three APIs on the PatientNow platform. Pick the one that matches your product.

🌿

PatientNow Essentials (PNE)

The full customer-facing API: customers, scheduling, clinical & treatments, commerce & inventory, staff, and event webhooks.

VISH

A slimmed-down API customized for VISH customers — a focused subset covering appointments, companies, employees, services, orders and formulas.

🚀

PatientNow Pro (PNP)

The PatientNow Pro REST API — patients, appointments, scheduling availability, waitlists, billing, and reference data, all scoped to your practice ID. Uses token-based auth (no gateway apikey required).

What you can build

👤

Patient & customer records

Sync patient profiles, manage contact and marketing opt-ins, and power booking front-ends. Available across all three APIs.

📅

Scheduling

Read appointments, find available time slots by provider and service, manage waitlists, check in, and start or complete services. Available across all three APIs.

💉

Clinical & treatments

Capture SOAP notes, injections, laser treatments, vitals, allergies, medications and chronic conditions. PNE only.

🛍️

Commerce & inventory

Manage products, services, packages, memberships, gift certificates, orders, coupons and purchase orders. PNE only.

🧑‍⚕️

Staff & operations

Work with employees, departments, time cards, goals, security profiles and work schedules. PNE and VISH.

🔔

Event webhooks

Register webhooks to be notified when data changes, so your integration stays in sync without polling. PNE only.

From zero to first call

Pick the track for your API — either way, under ten minutes.

PNE & VISH

  1. Get credentials — a username and password authorized for API access, plus a gateway apikey for the EnvisionCloud gateway.
  2. Send both?apikey=YOUR_API_KEY on every query string; Authorization: Basic base64(user:pass) header on every request.
  3. Call an endpointGET /api/v1/status confirms connectivity for PNE. VISH starts with GET /api/v1/companies (no status endpoint).

PNE quickstart → · VISH quickstart →
How PNE & VISH auth works →

PatientNow Pro

  1. Get your token — obtain an API token for your PatientNow Pro account and note your practiceId.
  2. Send the tokenAuthorization: YOUR_TOKEN header on every request. No gateway key and no Base64 encoding.
  3. Call an endpointGET /practices/{practiceId}/patients lists patients; a 200 OK means you're in.

PNP quickstart →
How PatientNow Pro auth works →

Your first request

Select the tab for your API.

PNE — confirm connectivity

curl "https://api.envisiongo.com/api/v1/status?apikey=YOUR_API_KEY" \
  -u "USERNAME:PASSWORD"
const token = btoa("USERNAME:PASSWORD");
const res = await fetch(
  "https://api.envisiongo.com/api/v1/status?apikey=YOUR_API_KEY",
  { headers: { Authorization: `Basic ${token}` } }
);
console.log(await res.json());
import requests
from requests.auth import HTTPBasicAuth

res = requests.get(
    "https://api.envisiongo.com/api/v1/status",
    params={"apikey": "YOUR_API_KEY"},
    auth=HTTPBasicAuth("USERNAME", "PASSWORD"),
)
print(res.json())
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;

var http = new HttpClient { BaseAddress = new Uri("https://api.envisiongo.com/api/v1/") };
var token = Convert.ToBase64String(Encoding.UTF8.GetBytes("USERNAME:PASSWORD"));
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", token);

var res = await http.GetAsync("status?apikey=YOUR_API_KEY");
Console.WriteLine(await res.Content.ReadAsStringAsync());

PatientNow Pro — list patients

curl "https://backend-production.patientnow.net/backend/patientnowpro/practices/YOUR_PRACTICE_ID/patients" \
  -H "Authorization: YOUR_TOKEN"
const base = "https://backend-production.patientnow.net/backend/patientnowpro";
const res = await fetch(`${base}/practices/YOUR_PRACTICE_ID/patients`, {
  headers: { Authorization: "YOUR_TOKEN" },
});
console.log(await res.json());
import requests

base = "https://backend-production.patientnow.net/backend/patientnowpro"
s = requests.Session()
s.headers.update({"Authorization": "YOUR_TOKEN"})
res = s.get(f"{base}/practices/YOUR_PRACTICE_ID/patients")
print(res.json())
using System;
using System.Net.Http;

var http = new HttpClient {
  BaseAddress = new Uri("https://backend-production.patientnow.net/backend/patientnowpro/")
};
http.DefaultRequestHeaders.Add("Authorization", "YOUR_TOKEN");

var res = await http.GetAsync("practices/YOUR_PRACTICE_ID/patients");
Console.WriteLine(await res.Content.ReadAsStringAsync());
⚠️ No sandbox — writes are live

All three APIs write to live practice data immediately. There is no sandbox or test environment. Test with records you can clean up, and confirm the account behind your credentials before running any write operation.