REST API reference

GlossGenius API

14 endpoints for GlossGenius. Each one is a POST with a JSON body, called with your API key.

Base URL
https://cotlet.dev/api/v1/glossgenius
Connects with
Your GlossGenius account (Account Owner, or a team member with calendar, client and reports permissions)
Integration page
GlossGenius
GlossGenius Endpoints
Endpoint Access Description
list_appointments read Appointments in a date range with client, services, provider, deposit and confirmation.
get_appointment read Full appointment: services, duration, address, notes, deposit requirement and confirmation.
list_services read Your service menu with duration, price, and the team members who offer each service.
find_open_slots read Open times for a service on your calendar, after working hours, personal blocks and gap time.
find_client read Search clients by name, email or phone.
get_client read Client profile: contact details, birthday, notes and appointment history.
list_waitlist read Active waitlist entries with client, service and the time they asked for.
get_sales_summary read Sales Report totals: services, retail, gratuity, cash and check, taxes, refunds and card fees.
book_appointment write Book a client into a time on your calendar. GlossGenius notifies the client if you ask it to.
reschedule_appointment write Move an appointment to a new time or provider.
cancel_appointment write Cancel one appointment, or this and all future appointments if it repeats.
add_client write Create a client profile. Nothing is sent to the client.
add_client_note write Save a note or formula to a client profile. Notes are private to your business.
block_time write Add a personal time block so clients cannot book you then.

POST https://cotlet.dev/api/v1/glossgenius/list_appointments

Returns the appointments on your GlossGenius calendar in start order, past and future. Cancelled appointments are removed from the calendar, so they are not returned. Another team member's calendar needs the calendar permission for that person.

Parameters

Parameters: list_appointments
NameTypeDescription
from required date First day, inclusive.
to date Last day, inclusive. Default: same as from.
provider_id string Team member ID from list_services. Default: you.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/glossgenius/list_appointments \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"from":"2026-10-01"}'
Python
result = client.call("glossgenius", "list_appointments", {"from":"2026-10-01"})
Node.js
const result = await cotlet.call('glossgenius', 'list_appointments', {"from":"2026-10-01"});
CLI
cotlet call glossgenius list_appointments --data '{"from":"2026-10-01"}'

Example response

{
  "appointments": [
    {
      "appointment_id": "ap_771920",
      "start": "2026-10-12T11:00:00-04:00",
      "end": "2026-10-12T12:00:00-04:00",
      "client": {
        "client_id": "cl_50377",
        "name": "Jess T."
      },
      "services": [
        "Root Touch-up"
      ],
      "provider": "Sam",
      "deposit_required": false,
      "confirmed": true
    },
    {
      "appointment_id": "ap_771935",
      "start": "2026-10-13T14:00:00-04:00",
      "end": "2026-10-13T14:45:00-04:00",
      "client": {
        "client_id": "cl_48213",
        "name": "Maya R."
      },
      "services": [
        "Gel Manicure"
      ],
      "provider": "Sam",
      "deposit_required": true,
      "confirmed": false
    }
  ]
}

POST https://cotlet.dev/api/v1/glossgenius/get_appointment

Returns one appointment with the fields GlossGenius lets you edit on it: provider, date and time, service duration, services, address, notes, deposit requirement and appointment confirmation. The price shown is the service price; adjustments are made at checkout.

Parameters

Parameters: get_appointment
NameTypeDescription
appointment_id required string Appointment ID from list_appointments.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/glossgenius/get_appointment \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"appointment_id":"appointment_8c41d2"}'
Python
result = client.call("glossgenius", "get_appointment", {"appointment_id":"appointment_8c41d2"})
Node.js
const result = await cotlet.call('glossgenius', 'get_appointment', {"appointment_id":"appointment_8c41d2"});
CLI
cotlet call glossgenius get_appointment --data '{"appointment_id":"appointment_8c41d2"}'

Example response

{
  "appointment_id": "ap_771935",
  "start": "2026-10-13T14:00:00-04:00",
  "end": "2026-10-13T14:45:00-04:00",
  "client": {
    "client_id": "cl_48213",
    "name": "Maya R."
  },
  "services": [
    {
      "name": "Gel Manicure",
      "duration_minutes": 45,
      "price": 55
    }
  ],
  "provider": "Sam",
  "address": "Studio, 12 Example St",
  "notes": "Prefers short nails.",
  "deposit_required": true,
  "confirmed": false
}

POST https://cotlet.dev/api/v1/glossgenius/list_services

Returns every service on your menu with its ID, duration and price, plus the team members who offer it. Use the IDs in find_open_slots and book_appointment. Team member IDs from here go into every provider_id parameter.

Parameters

No parameters.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/glossgenius/list_services \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("glossgenius", "list_services")
Node.js
const result = await cotlet.call('glossgenius', 'list_services');
CLI
cotlet call glossgenius list_services

Example response

{
  "services": [
    {
      "service_id": "sv_1092",
      "name": "Gel Manicure",
      "duration_minutes": 60,
      "price": 55,
      "providers": [
        {
          "provider_id": "tm_207",
          "name": "Sam"
        }
      ]
    },
    {
      "service_id": "sv_1104",
      "name": "Root Touch-up",
      "duration_minutes": 60,
      "price": 85,
      "providers": [
        {
          "provider_id": "tm_207",
          "name": "Sam"
        },
        {
          "provider_id": "tm_311",
          "name": "Ria"
        }
      ]
    }
  ]
}

POST https://cotlet.dev/api/v1/glossgenius/find_open_slots

Returns start times in your working hours that are free for the combined length of the services, in start order. Appointments, personal time blocks and gap time are taken out. GlossGenius can still book outside these times, so this tool only suggests them.

Parameters

Parameters: find_open_slots
NameTypeDescription
service_ids required string[] One or more service IDs from list_services.
from required date First day to search.
to date Last day to search. Default: same as from.
provider_id string Team member ID from list_services. Default: you.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/glossgenius/find_open_slots \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"service_ids":["service ids"],"from":"2026-10-01"}'
Python
result = client.call("glossgenius", "find_open_slots", {"service_ids":["service ids"],"from":"2026-10-01"})
Node.js
const result = await cotlet.call('glossgenius', 'find_open_slots', {"service_ids":["service ids"],"from":"2026-10-01"});
CLI
cotlet call glossgenius find_open_slots --data '{"service_ids":["service ids"],"from":"2026-10-01"}'

Example response

{
  "slots": [
    {
      "start": "2026-10-15T15:30:00-04:00",
      "end": "2026-10-15T16:30:00-04:00",
      "provider_id": "tm_207"
    },
    {
      "start": "2026-10-15T16:30:00-04:00",
      "end": "2026-10-15T17:30:00-04:00",
      "provider_id": "tm_207"
    }
  ]
}

POST https://cotlet.dev/api/v1/glossgenius/find_client

Returns matching client profiles with ID, name, email and phone. Client profiles are private to your business. A team member without client permission gets a permission error.

Parameters

Parameters: find_client
NameTypeDescription
query required string Name, email or phone.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/glossgenius/find_client \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"query"}'
Python
result = client.call("glossgenius", "find_client", {"query":"query"})
Node.js
const result = await cotlet.call('glossgenius', 'find_client', {"query":"query"});
CLI
cotlet call glossgenius find_client --data '{"query":"query"}'

Example response

{
  "clients": [
    {
      "client_id": "cl_48213",
      "name": "Maya R.",
      "email": "maya@example.com",
      "phone": "+1 555 0100"
    }
  ]
}

Get client

read

POST https://cotlet.dev/api/v1/glossgenius/get_client

Returns the client profile with contact details, birthday, saved notes and past and upcoming appointments. Notes include the ones you added under Notes and Forms. Whether the client is banned from online booking is included.

Parameters

Parameters: get_client
NameTypeDescription
client_id required string Client ID from find_client.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/glossgenius/get_client \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"client_id":"client_8c41d2"}'
Python
result = client.call("glossgenius", "get_client", {"client_id":"client_8c41d2"})
Node.js
const result = await cotlet.call('glossgenius', 'get_client', {"client_id":"client_8c41d2"});
CLI
cotlet call glossgenius get_client --data '{"client_id":"client_8c41d2"}'

Example response

{
  "client_id": "cl_50377",
  "name": "Jess T.",
  "email": "jess@example.com",
  "phone": "+1 555 0101",
  "birthday": "1990-03-14",
  "banned_from_online_booking": false,
  "notes": [
    {
      "note_id": "nt_9001",
      "text": "Prefers a cooler tone.",
      "created": "2026-09-02"
    }
  ],
  "appointments": [
    {
      "appointment_id": "ap_771920",
      "start": "2026-10-12T11:00:00-04:00",
      "services": [
        "Root Touch-up"
      ]
    }
  ]
}

POST https://cotlet.dev/api/v1/glossgenius/list_waitlist

Returns the active waitlist entries from the Calendar, in the order GlossGenius lists them, each with the client, service, requested time and note. Expired entries are not shown, because GlossGenius does not show them in the app. A client can join the waitlist for any day and time.

Parameters

Parameters: list_waitlist
NameTypeDescription
provider_id string Team member ID from list_services. Default: you.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/glossgenius/list_waitlist \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"provider_id":"tm_207"}'
Python
result = client.call("glossgenius", "list_waitlist", {"provider_id":"tm_207"})
Node.js
const result = await cotlet.call('glossgenius', 'list_waitlist', {"provider_id":"tm_207"});
CLI
cotlet call glossgenius list_waitlist --data '{"provider_id":"tm_207"}'

Example response

{
  "entries": [
    {
      "entry_id": "wl_3302",
      "client": {
        "client_id": "cl_48213",
        "name": "Maya R."
      },
      "service": "Gel Manicure",
      "requested_start": "2026-10-16T14:00:00-04:00",
      "requested_end": "2026-10-16T17:00:00-04:00",
      "note": "Any time after 2pm works."
    },
    {
      "entry_id": "wl_3318",
      "client": {
        "client_id": "cl_50377",
        "name": "Jess T."
      },
      "service": "Root Touch-up",
      "requested_start": "2026-10-16T10:00:00-04:00",
      "requested_end": "2026-10-16T12:00:00-04:00",
      "note": ""
    }
  ]
}

POST https://cotlet.dev/api/v1/glossgenius/get_sales_summary

Returns the figures of the Sales Report for the period: service and retail sales, gratuity collected, cash and check amounts, taxes paid, refunds given and card transaction fees. It needs the View Reports permission. It returns nothing while the account is paused, cancelled or disabled.

Parameters

Parameters: get_sales_summary
NameTypeDescription
from required date First day, inclusive.
to required date Last day, inclusive.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/glossgenius/get_sales_summary \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"from":"2026-10-06","to":"2026-10-12"}'
Python
result = client.call("glossgenius", "get_sales_summary", {"from":"2026-10-06","to":"2026-10-12"})
Node.js
const result = await cotlet.call('glossgenius', 'get_sales_summary', {"from":"2026-10-06","to":"2026-10-12"});
CLI
cotlet call glossgenius get_sales_summary --data '{"from":"2026-10-06","to":"2026-10-12"}'

Example response

{
  "from": "2026-10-05",
  "to": "2026-10-11",
  "services_sales": 4120,
  "retail_sales": 310,
  "total_sales": 4430,
  "gratuity": 655,
  "cash_and_check": 420,
  "taxes": 24.8,
  "refunds": 55,
  "card_fees": 128.45
}

Book appointment

write Confirm

POST https://cotlet.dev/api/v1/glossgenius/book_appointment

Creates one appointment and returns its ID, time and services. GlossGenius allows booking any day and time, even outside working hours, so call find_open_slots first. It books one appointment, not a repeating series. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: book_appointment
NameTypeDescription
client_id required string Client ID from find_client.
service_ids required string[] Service IDs from list_services.
start required datetime ISO 8601 with time zone.
provider_id string Team member ID from list_services. Default: you.
notes string Appointment notes.
notify_client boolean Notify the client of the booking. Default: true.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/glossgenius/book_appointment \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"client_id":"cl_48213","service_ids":["sv_1092"],"start":"2026-10-15T15:30:00-04:00","provider_id":"tm_207","notify_client":true}'
Python
result = client.call("glossgenius", "book_appointment", {"client_id":"cl_48213","service_ids":["sv_1092"],"start":"2026-10-15T15:30:00-04:00","provider_id":"tm_207","notify_client":True})
Node.js
const result = await cotlet.call('glossgenius', 'book_appointment', {"client_id":"cl_48213","service_ids":["sv_1092"],"start":"2026-10-15T15:30:00-04:00","provider_id":"tm_207","notify_client":true});
CLI
cotlet call glossgenius book_appointment --data '{"client_id":"cl_48213","service_ids":["sv_1092"],"start":"2026-10-15T15:30:00-04:00","provider_id":"tm_207","notify_client":true}'

Example response

{
  "appointment_id": "ap_771904",
  "status": "booked",
  "start": "2026-10-15T15:30:00-04:00",
  "end": "2026-10-15T16:30:00-04:00",
  "services": [
    {
      "name": "Gel Manicure",
      "price": 55
    }
  ],
  "provider": "Sam",
  "deposit_required": false,
  "client_notified": true
}

Reschedule appointment

write Confirm

POST https://cotlet.dev/api/v1/glossgenius/reschedule_appointment

Changes the date, time and optionally the provider of one appointment, and returns the old and new time. It does not change the price; GlossGenius adjusts prices at checkout. Moving to another team member needs calendar access to that person. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: reschedule_appointment
NameTypeDescription
appointment_id required string Appointment ID from list_appointments.
start required datetime New start, ISO 8601 with time zone.
provider_id string Team member ID from list_services. Default: you.
notify_client boolean Notify the client by email and text. Default: true.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/glossgenius/reschedule_appointment \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"appointment_id":"ap_771920","start":"2026-10-20T09:00:00-04:00","notify_client":true}'
Python
result = client.call("glossgenius", "reschedule_appointment", {"appointment_id":"ap_771920","start":"2026-10-20T09:00:00-04:00","notify_client":True})
Node.js
const result = await cotlet.call('glossgenius', 'reschedule_appointment', {"appointment_id":"ap_771920","start":"2026-10-20T09:00:00-04:00","notify_client":true});
CLI
cotlet call glossgenius reschedule_appointment --data '{"appointment_id":"ap_771920","start":"2026-10-20T09:00:00-04:00","notify_client":true}'

Example response

{
  "appointment_id": "ap_771920",
  "status": "rescheduled",
  "previous_start": "2026-10-12T11:00:00-04:00",
  "start": "2026-10-20T11:00:00-04:00",
  "end": "2026-10-20T12:00:00-04:00",
  "provider": "Sam",
  "client_notified": true
}

Cancel appointment

write Confirm

POST https://cotlet.dev/api/v1/glossgenius/cancel_appointment

Cancels the appointment and removes it from your calendar, or the whole repeating series with whole_series. With notify_client on, GlossGenius emails and texts the client about the cancellation. Cancelling cannot be undone with Cotlet; book the client again with book_appointment. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: cancel_appointment
NameTypeDescription
appointment_id required string Appointment ID from list_appointments.
scope enum this_one or whole_series. Default: this_one.
notify_client boolean Notify the client by email and text. Default: true.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/glossgenius/cancel_appointment \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"appointment_id":"appointment_8c41d2"}'
Python
result = client.call("glossgenius", "cancel_appointment", {"appointment_id":"appointment_8c41d2"})
Node.js
const result = await cotlet.call('glossgenius', 'cancel_appointment', {"appointment_id":"appointment_8c41d2"});
CLI
cotlet call glossgenius cancel_appointment --data '{"appointment_id":"appointment_8c41d2"}'

Example response

{
  "appointment_id": "ap_771935",
  "status": "cancelled",
  "scope": "this_one",
  "client_notified": true
}

Add client

write

POST https://cotlet.dev/api/v1/glossgenius/add_client

Creates a profile and returns its client ID. It reaches no one: GlossGenius sends client notifications only for bookings and changes, to the contact details on the profile, so check that they are right. This call does not ask for your OK; delete the profile in GlossGenius to undo it.

Parameters

Parameters: add_client
NameTypeDescription
name required string First and last name.
email string Client email. Email or phone is required.
phone string Client mobile number that can receive texts. Email or phone is required.
birthday date Client birthday.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/glossgenius/add_client \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Jane Doe"}'
Python
result = client.call("glossgenius", "add_client", {"name":"Jane Doe"})
Node.js
const result = await cotlet.call('glossgenius', 'add_client', {"name":"Jane Doe"});
CLI
cotlet call glossgenius add_client --data '{"name":"Jane Doe"}'

Example response

{
  "client_id": "cl_50412",
  "name": "Dana K.",
  "email": "dana@example.com",
  "phone": null
}

POST https://cotlet.dev/api/v1/glossgenius/add_client_note

Adds a blank note under Notes and Forms on the client profile and returns its ID. It reaches no one, because client profiles are private to your business, so it does not ask for your OK. Delete the note in the client profile to undo it.

Parameters

Parameters: add_client_note
NameTypeDescription
client_id required string Client ID from find_client.
text required string Note text.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/glossgenius/add_client_note \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"client_id":"client_8c41d2","text":"text"}'
Python
result = client.call("glossgenius", "add_client_note", {"client_id":"client_8c41d2","text":"text"})
Node.js
const result = await cotlet.call('glossgenius', 'add_client_note', {"client_id":"client_8c41d2","text":"text"});
CLI
cotlet call glossgenius add_client_note --data '{"client_id":"client_8c41d2","text":"text"}'

Example response

{
  "note_id": "nt_9014",
  "client_id": "cl_50377",
  "saved": true
}

Block time

write Confirm

POST https://cotlet.dev/api/v1/glossgenius/block_time

Adds one personal block to the calendar, so clients cannot book you online during it. It does not touch appointments already on the calendar; run list_appointments for the same range first. It adds one block, not a repeating one. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: block_time
NameTypeDescription
start required datetime ISO 8601 with time zone.
end required datetime ISO 8601 with time zone.
description string For example "Vacation" or "Lunch break". Clients do not see it.
provider_id string Team member ID from list_services. Default: you.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/glossgenius/block_time \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"start":"2026-10-01T09:00:00Z","end":"2026-10-01T09:00:00Z"}'
Python
result = client.call("glossgenius", "block_time", {"start":"2026-10-01T09:00:00Z","end":"2026-10-01T09:00:00Z"})
Node.js
const result = await cotlet.call('glossgenius', 'block_time', {"start":"2026-10-01T09:00:00Z","end":"2026-10-01T09:00:00Z"});
CLI
cotlet call glossgenius block_time --data '{"start":"2026-10-01T09:00:00Z","end":"2026-10-01T09:00:00Z"}'

Example response

{
  "block_id": "bl_6120",
  "start": "2026-10-16T09:00:00-04:00",
  "end": "2026-10-16T18:00:00-04:00",
  "description": "Day off",
  "provider": "Sam"
}