SchedulinqDocs
Naar Schedulinq

Referentie

Elk endpoint van de Schedulinq API — parameters, request bodies, antwoorden, foutmeldingen en het recht dat elk nodig heeft — gemaakt uit de API-beschrijving.

openapi.json downloaden

OpenAPI 3.1 · versie v1 · API-beschrijving van 4 oktober 2026

De live API levert dezelfde beschrijving op https://api.schedulinq.com/api/v1/openapi.json.

Basisadres

https://api.schedulinq.com/api/v1, alleen over HTTPS. Elk verzoek draagt een API-sleutel in de header Authorization; zie Authenticatie.

Conventies

  • Namen zijn camelCase; id's zijn UUID's.
  • Tijden zijn ISO 8601 met hun offset, in de tijdzone van je organisatie, en een afspraak noemt ook zijn timeZone.
  • Waarden van een opsomming zijn in HOOFDLETTERS.
  • Een ontbrekend veld betekent "niet ingesteld". De API laat een veld weg in plaats van null te sturen.
  • Een request body met een veld dat de API niet kent, wordt geweigerd met een 400 die het veld noemt (errors.validation.unknownField), zodat een typfout nooit onopgemerkt blijft.

Pagina's

Lijsten worden per pagina opgehaald met een cursor:

  • limit bepaalt de grootte van een pagina, van 1 tot 100 (standaard 25);
  • cursor is de nextCursor van de vorige pagina, precies zoals je hem kreeg;
  • een pagina antwoordt { "data": [...], "hasMore": true, "nextCursor": "..." }.

Pagina's staan op volgorde van aanmaken. Stop als hasMore false is.

Headers bij elk antwoord

Elk antwoord draagt X-Request-Id, en elk geauthenticeerd antwoord de drie RateLimit-*-headers (zie Limieten). De endpoints hieronder noemen alleen hun eigen headers.

Request-id's

Stuur je eigen X-Request-Id mee (1 tot 128 tekens uit A-Z, a-z, 0-9, ., _ en -) om een verzoek in je eigen logs terug te vinden; anders maakt de API er een. Elke foutmelding herhaalt hem als requestId. Noem hem als je mailt naar support@schedulinq.com.

De beschrijvingen per endpoint zijn in het Engels, net als de API zelf. Er is hier geen console om verzoeken uit te proberen: gebruik curl, of importeer de API-beschrijving in een programma zoals Postman.

Fouten bij elk endpoint

Naast de fouten per endpoint kan elk endpoint antwoorden met:

Users

The organisation's colleagues and the invitations they have not accepted yet.

List colleagues

GET/api/v1/users

Scope: users:read

The organisation's colleagues (active and switched off) and its open invitations, oldest first. Archived colleagues and expired, accepted or withdrawn invitations are left out.

Parameters

limit
queryinteger · int32Optioneel

How many to return, 1 to 100.

cursor
querystringOptioneel

The nextCursor of the previous page.

Voorbeeldverzoek

curl "https://api.schedulinq.com/api/v1/users?limit=25" \
  -H "Authorization: Bearer $SCHEDULINQ_API_KEY"

Antwoorden

200 · OK

Geeft een pagina terug van User

{
  "data": [
    {
      "admin": false,
      "calendarConnected": true,
      "createdAt": "2026-10-01T08:30:00Z",
      "customFields": {
        "bedrijf": "Installatiebedrijf Jansen"
      },
      "email": "sanne@installatiebedrijf-jansen.example",
      "firstName": "Sanne",
      "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e03",
      "invitationExpiresAt": "2026-10-08T08:30:00Z",
      "invitationId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e05",
      "lastName": "de Vries",
      "metadata": {
        "campaignId": "C-42"
      },
      "name": "Sanne de Vries",
      "roleId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e04",
      "schedulable": true,
      "status": "ACTIVE"
    }
  ],
  "hasMore": false,
  "nextCursor": "MjAyNi0xMC0wMVQwODozMDowMFp8M2YwYzhhNTItNmIxZS00ZDdhLTljM2UtMWEyYjNjNGQ1ZTAz"
}

400 · Fouten

Invite a colleague

POST/api/v1/users

Scope: users:write · Idempotency-Key verplicht

Invites a colleague by e-mail with one of the roles this key may assign; Schedulinq sends the invitation mail. Idempotent by e-mail too: a colleague or a pending invitation with this address in this organisation is answered with 200 and left as it is (no mail). Without users:read a 200 is a receipt: the status, the id, the address and an invitation's expiry. Every call that passes the request checks counts against the organisation's hourly colleague-invitation budget (200 by default), repeats included. A seat is never bought.

Parameters

Idempotency-Key
headerstringVerplicht

A unique value per user action; a retry with the same value and body answers the first call again and sends nothing.

hoogstens 255 tekens

Request body

customFields
map van anyOptioneel

The colleague's custom fields, by key (Settings → Custom fields, colleague fields). Types are checked; required fields are not enforced here. An unknown key is refused.

hoogstens 30 sleutels

email
string · emailVerplicht

The colleague's e-mail address; the invitation goes there. At most 100 characters.

minstens 0 tekens · hoogstens 100 tekens

firstName
stringVerplicht

First name, at most 100 characters.

minstens 0 tekens · hoogstens 100 tekens

lastName
stringVerplicht

Last name, at most 100 characters.

minstens 0 tekens · hoogstens 100 tekens

locale
stringOptioneel

The language of the invitation mail and the page it opens. Absent = the organisation's language.

Een van: en, nl, de, fr, es, it, pl, ar

metadata
map van stringOptioneel

Kenmerken: the CRM's references, kept on the invitation. Keys are 1 to 40 characters of a-z, A-Z, 0-9 and _; values are strings on one line, at most 500 characters; at most 20 keys with a value.

hoogstens 40 sleutels

roleId
string · uuidVerplicht

The role the colleague gets on accepting: one of the roles this API key may assign (GET /api/v1/roles).

{
  "customFields": {
    "bedrijf": "Loodgieter Bakker"
  },
  "email": "piet+ov@loodgieter-bakker.example",
  "firstName": "Piet",
  "lastName": "Bakker",
  "locale": "nl",
  "metadata": {
    "campaignId": "C-42"
  },
  "roleId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e04"
}

Voorbeeldverzoek

IDEMPOTENCY_KEY=$(uuidgen)   # once per action; to retry, run only the curl line again (same key)
curl -X POST https://api.schedulinq.com/api/v1/users \
  -H "Authorization: Bearer $SCHEDULINQ_API_KEY" \
  -H "Idempotency-Key: $IDEMPOTENCY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "customFields": {
    "bedrijf": "Loodgieter Bakker"
  },
  "email": "piet+ov@loodgieter-bakker.example",
  "firstName": "Piet",
  "lastName": "Bakker",
  "locale": "nl",
  "metadata": {
    "campaignId": "C-42"
  },
  "roleId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e04"
}'

Antwoorden

200 · The address already belongs to a colleague (ACTIVE or INACTIVE) or a pending invitation (INVITED) here; nothing changed, nothing was sent.

Geeft terug User

Voorbeeld · active

{
  "email": "sanne@installatiebedrijf-jansen.example",
  "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e03",
  "status": "ACTIVE"
}

Voorbeeld · invited

{
  "email": "piet+ov@loodgieter-bakker.example",
  "invitationExpiresAt": "2026-10-08T09:12:00Z",
  "invitationId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e05",
  "status": "INVITED"
}

Headers: Idempotent-Replayed

201 · A new invitation was sent (also when it replaced an expired one).

Geeft terug User

{
  "admin": false,
  "createdAt": "2026-10-01T09:12:00Z",
  "customFields": {
    "bedrijf": "Loodgieter Bakker"
  },
  "email": "piet+ov@loodgieter-bakker.example",
  "firstName": "Piet",
  "invitationExpiresAt": "2026-10-08T09:12:00Z",
  "invitationId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e05",
  "lastName": "Bakker",
  "metadata": {
    "campaignId": "C-42"
  },
  "name": "Piet Bakker",
  "roleId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e04",
  "status": "INVITED"
}

Headers: Idempotent-Replayed

400 · Fouten

402 · Fouten

403 · Fouten

409 · Fouten

422 · Fouten

429 · Fouten

  • errors.api.colleagueInvitationLimit — The organisation has sent the maximum number of colleague invitations through the API for now. Wait for the number of seconds in Retry-After and try again.

Resend a colleague invitation

POST/api/v1/users/invitations/{id}/resend

Scope: users:write · Idempotency-Key verplicht

Sends the invitation again with a new link, valid seven more days; the previous link stops working. Only for an invitation this key could have made: never an admin invitation, and only one whose role is among the key's. An expired invitation is renewed (and needs a seat) until the nightly clean-up removes it; after that, create it again. At most 3 resends of one invitation an hour.

Parameters

Idempotency-Key
headerstringVerplicht

A unique value per user action; a retry with the same value answers the first call again and sends nothing.

hoogstens 255 tekens

id
pathstring · uuidVerplicht

The invitation's id (invitationId).

Voorbeeldverzoek

IDEMPOTENCY_KEY=$(uuidgen)   # once per action; to retry, run only the curl line again (same key)
curl -X POST https://api.schedulinq.com/api/v1/users/invitations/3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e05/resend \
  -H "Authorization: Bearer $SCHEDULINQ_API_KEY" \
  -H "Idempotency-Key: $IDEMPOTENCY_KEY"

Antwoorden

200 · Sent again. Without users:read a receipt: the status, the invitation's id, the address and the new expiry.

Geeft terug User

{
  "email": "piet+ov@loodgieter-bakker.example",
  "invitationExpiresAt": "2026-10-08T09:12:00Z",
  "invitationId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e05",
  "status": "INVITED"
}

Headers: Idempotent-Replayed

400 · Fouten

402 · Fouten

403 · Fouten

404 · Fouten

409 · Fouten

422 · Fouten

429 · Fouten

  • errors.api.colleagueInvitationLimit — The organisation has sent the maximum number of colleague invitations through the API for now. Wait for the number of seconds in Retry-After and try again.

Services

The services (appointment types) the organisation offers.

List services

GET/api/v1/services

Scope: services:read

The organisation's services, oldest first. Archived services are left out.

Parameters

limit
queryinteger · int32Optioneel

How many to return, 1 to 100.

cursor
querystringOptioneel

The nextCursor of the previous page.

Voorbeeldverzoek

curl "https://api.schedulinq.com/api/v1/services?limit=25" \
  -H "Authorization: Bearer $SCHEDULINQ_API_KEY"

Antwoorden

200 · OK

Geeft een pagina terug van Service

{
  "data": [
    {
      "colleagueIds": [
        "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e03"
      ],
      "createdAt": "2026-09-01T08:00:00Z",
      "durationMinutes": 60,
      "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
      "identifier": "offertebezoek",
      "name": "Offertebezoek",
      "names": {
        "en": "Quote visit",
        "nl": "Offertebezoek"
      }
    }
  ],
  "hasMore": false,
  "nextCursor": "MjAyNi0wOS0wMVQwODowMDowMFp8M2YwYzhhNTItNmIxZS00ZDdhLTljM2UtMWEyYjNjNGQ1ZTAx"
}

400 · Fouten

Roles

The roles an API key with users:write may give a colleague it invites.

List assignable roles

GET/api/v1/roles

Scope: users:write

The roles this API key may assign, oldest first. A role deleted since the key was made is left out.

Parameters

limit
queryinteger · int32Optioneel

How many to return, 1 to 100.

cursor
querystringOptioneel

The nextCursor of the previous page.

Voorbeeldverzoek

curl "https://api.schedulinq.com/api/v1/roles?limit=25" \
  -H "Authorization: Bearer $SCHEDULINQ_API_KEY"

Antwoorden

200 · OK

Geeft een pagina terug van Role

{
  "data": [
    {
      "createdAt": "2026-09-01T08:00:00Z",
      "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e04",
      "name": "Leadkoper"
    }
  ],
  "hasMore": false,
  "nextCursor": "MjAyNi0wOS0wMVQwODowMDowMFp8M2YwYzhhNTItNmIxZS00ZDdhLTljM2UtMWEyYjNjNGQ1ZTA0"
}

400 · Fouten

Open Schedulinq's planner from your CRM, for one customer.

POST/api/v1/planning-links

Scope: planning_links:write · Idempotency-Key verplicht

A one-time link that opens Schedulinq's planner for this customer, on this service and colleague — or, without a colleague, on everyone who does the service. Create one per click and send the colleague's browser to url at once: it works for 15 minutes, for the first colleague who opens it. The customer is an existing one by id, or found by e-mail address or created; the kenmerken are copied onto every appointment booked from the link.

Parameters

Idempotency-Key
headerstringVerplicht

A unique value per planning link; a retry with the same value and body answers the first link again.

hoogstens 255 tekens

Request body

address
AddressOptioneel

Where the appointment happens, when at the customer's. Never stored on the customer.

Velden tonen · Address
city
stringOptioneel

City.

minstens 0 tekens · hoogstens 100 tekens

country
stringOptioneel

ISO 3166-1 alpha-2 country code; the organisation's country when absent.

line1
stringOptioneel

Street and house number.

minstens 0 tekens · hoogstens 255 tekens

postalCode
stringOptioneel

Postal code.

minstens 0 tekens · hoogstens 20 tekens

appointmentTypeId
string · uuidOptioneel

The service the planner opens on (GET /api/v1/services).

customer
CustomerInputVerplicht

The customer.

Velden tonen · CustomerInput
companyName
stringOptioneel

Company name; required for a BUSINESS.

minstens 0 tekens · hoogstens 255 tekens

customerType
stringOptioneel

PERSON (the default) or BUSINESS.

Een van: PERSON, BUSINESS

email
string · emailOptioneel

E-mail address, required without an id: how the customer is found, and where the invitation goes.

minstens 0 tekens · hoogstens 255 tekens

firstName
stringOptioneel

First name; for a BUSINESS, the contact person's.

minstens 0 tekens · hoogstens 100 tekens

id
string · uuidOptioneel

An existing customer of the organisation, by its id (customerId on an appointment, an invitation or a planning link). Send it alone: with an id, no other field.

lastName
stringOptioneel

Last name; required for a PERSON. For a BUSINESS, the contact person's.

minstens 0 tekens · hoogstens 100 tekens

phone
stringOptioneel

Phone number: E.164 (a + and the country code), or national in the organisation's country.

minstens 0 tekens · hoogstens 20 tekens

metadata
map van stringOptioneel

Kenmerken: the CRM's references, copied onto every appointment booked from the link. Keys are 1 to 40 characters of a-z, A-Z, 0-9 and _; values are strings on one line, at most 500 characters; at most 20 keys with a value.

hoogstens 40 sleutels

returnUrl
stringOptioneel

Where "Back to CRM" goes after the booking: an https URL whose origin is on the organisation's list of allowed return addresses.

minstens 0 tekens · hoogstens 2048 tekens

user
ColleagueRefOptioneel

The colleague the planner opens on; the caller may still book another. Absent: the planner opens on every colleague who does the service.

Velden tonen · ColleagueRef
email
string · emailOptioneel

The colleague's e-mail address; matched whatever its case.

minstens 0 tekens · hoogstens 255 tekens

id
string · uuidOptioneel

The colleague's id (GET /api/v1/users).

{
  "appointmentTypeId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
  "customer": {
    "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e06"
  },
  "metadata": {
    "campaignId": "C-42",
    "dealId": "D-123"
  },
  "returnUrl": "https://crm.example.com/deals/D-123"
}

Voorbeeldverzoek

IDEMPOTENCY_KEY=$(uuidgen)   # once per action; to retry, run only the curl line again (same key)
curl -X POST https://api.schedulinq.com/api/v1/planning-links \
  -H "Authorization: Bearer $SCHEDULINQ_API_KEY" \
  -H "Idempotency-Key: $IDEMPOTENCY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "appointmentTypeId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
  "customer": {
    "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e06"
  },
  "metadata": {
    "campaignId": "C-42",
    "dealId": "D-123"
  },
  "returnUrl": "https://crm.example.com/deals/D-123"
}'

Antwoorden

201 · Created

Geeft terug PlanningLink

{
  "customerId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e06",
  "expiresAt": "2026-10-14T09:15:00+02:00",
  "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e07",
  "url": "https://app.schedulinq.com/plan-link#EXAMPLE-TOKEN",
  "userId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e03"
}

Headers: Idempotent-Replayed

400 · Fouten

404 · Fouten

409 · Fouten

422 · Fouten

Invitations

Invitations a customer books an appointment with.

List invitations by kenmerken

GET/api/v1/invitations

Scope: invitations:read

The organisation's invitations carrying every kenmerk asked for, oldest first. A single pass: to reconcile, run the lookup again; follow changes through webhooks.

Parameters

status
querystringOptioneel

Only invitations in this status.

Een van: PENDING, USED, CANCELLED, EXPIRED

metadata[<key>]
querymap van stringVerplicht

Kenmerken to look up by, as metadata[]=; at least one, all must match. Brackets may be sent raw or as %5B and %5D.

limit
queryintegerOptioneel

How many to return, 1 to 100.

cursor
querystringOptioneel

The nextCursor of the previous page.

Voorbeeldverzoek

curl --globoff "https://api.schedulinq.com/api/v1/invitations?metadata[dealId]=D-123&limit=25" \
  -H "Authorization: Bearer $SCHEDULINQ_API_KEY"

Antwoorden

200 · OK

Geeft een pagina terug van Invitation

{
  "data": [
    {
      "address": {
        "city": "Amsterdam",
        "country": "NL",
        "line1": "Keizersgracht 100",
        "postalCode": "1015 AA"
      },
      "bookingPageClosed": false,
      "bookingUrl": "https://schedulinq.com/i/EXAMPLE-INVITATION",
      "colleagues": [
        {
          "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
          "name": "Offertebezoek"
        }
      ],
      "createdAt": "2026-10-01T09:00:00+02:00",
      "customerId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e06",
      "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e08",
      "initialEmailDeferred": false,
      "lineageRootId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09",
      "location": {
        "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
        "name": "Offertebezoek"
      },
      "locationMode": "VIDEO",
      "metadata": {
        "campaignId": "C-42",
        "dealId": "D-123"
      },
      "rescheduledFromAppointmentId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09",
      "service": {
        "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
        "name": "Offertebezoek"
      },
      "status": "PENDING",
      "updatedAt": "2026-10-01T09:00:00+02:00",
      "validUntil": "2026-10-31"
    }
  ],
  "hasMore": false,
  "nextCursor": "MjAyNi0xMC0wMVQwODozMDowMFp8M2YwYzhhNTItNmIxZS00ZDdhLTljM2UtMWEyYjNjNGQ1ZTA4"
}

400 · Fouten

Send an invitation

POST/api/v1/invitations

Scope: invitations:write · Idempotency-Key verplicht

Sends the customer an invitation to book this service with one of these colleagues: the booking page offers the times any of them is free. The first message is queued at once. The name and the duration are the service's (plus its add-ons). The customer is an existing one by id, or found by e-mail address or created. A second invitation for the same customer and service is simply another invitation. bookingUrl is in this answer only: keep it.

Parameters

Idempotency-Key
headerstringVerplicht

A unique value per invitation; a retry with the same value and body answers the first invitation again and sends nothing.

hoogstens 255 tekens

Request body

addOns
lijst van AddOnRefOptioneel

Add-ons of the service, pinned on the invitation; each id once.

Velden tonen · AddOnRef
id
string · uuidVerplicht

The add-on's id (GET /api/v1/services).

quantity
integer · int32Optioneel

How many, 1 to 99; above 1 only for an add-on that allows several. Absent = 1.

minstens 1 · hoogstens 99

address
AddressOptioneel

Where the appointment happens, when at the customer's. Never stored on the customer.

Velden tonen · Address
city
stringOptioneel

City.

minstens 0 tekens · hoogstens 100 tekens

country
stringOptioneel

ISO 3166-1 alpha-2 country code; the organisation's country when absent.

line1
stringOptioneel

Street and house number.

minstens 0 tekens · hoogstens 255 tekens

postalCode
stringOptioneel

Postal code.

minstens 0 tekens · hoogstens 20 tekens

appointmentTypeId
string · uuidVerplicht

The service (GET /api/v1/services).

customer
CustomerInputVerplicht

The customer.

Velden tonen · CustomerInput
companyName
stringOptioneel

Company name; required for a BUSINESS.

minstens 0 tekens · hoogstens 255 tekens

customerType
stringOptioneel

PERSON (the default) or BUSINESS.

Een van: PERSON, BUSINESS

email
string · emailOptioneel

E-mail address, required without an id: how the customer is found, and where the invitation goes.

minstens 0 tekens · hoogstens 255 tekens

firstName
stringOptioneel

First name; for a BUSINESS, the contact person's.

minstens 0 tekens · hoogstens 100 tekens

id
string · uuidOptioneel

An existing customer of the organisation, by its id (customerId on an appointment, an invitation or a planning link). Send it alone: with an id, no other field.

lastName
stringOptioneel

Last name; required for a PERSON. For a BUSINESS, the contact person's.

minstens 0 tekens · hoogstens 100 tekens

phone
stringOptioneel

Phone number: E.164 (a + and the country code), or national in the organisation's country.

minstens 0 tekens · hoogstens 20 tekens

metadata
map van stringOptioneel

Kenmerken: the CRM's references, copied onto the appointment the customer books. Keys are 1 to 40 characters of a-z, A-Z, 0-9 and _; values are strings on one line, at most 500 characters; at most 20 keys with a value.

hoogstens 40 sleutels

users
lijst van ColleagueRefVerplicht

The colleagues the customer may book with, each by id or by e-mail address and each once. The booking page offers the times any of them is free; the appointment is booked with one of them. Every one must be active, schedulable and do the service and its add-ons.

minstens 1 items · hoogstens 100 items

Velden tonen · ColleagueRef
email
string · emailOptioneel

The colleague's e-mail address; matched whatever its case.

minstens 0 tekens · hoogstens 255 tekens

id
string · uuidOptioneel

The colleague's id (GET /api/v1/users).

validUntil
string · dateOptioneel

The last day the invitation can be booked, in the organisation's time zone. Absent = the organisation's default.

{
  "address": {
    "city": "Amsterdam",
    "country": "NL",
    "line1": "Keizersgracht 100",
    "postalCode": "1015 AA"
  },
  "appointmentTypeId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
  "customer": {
    "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e06"
  },
  "metadata": {
    "campaignId": "C-42",
    "dealId": "D-123"
  },
  "users": [
    {
      "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e03"
    }
  ]
}

Voorbeeldverzoek

IDEMPOTENCY_KEY=$(uuidgen)   # once per action; to retry, run only the curl line again (same key)
curl -X POST https://api.schedulinq.com/api/v1/invitations \
  -H "Authorization: Bearer $SCHEDULINQ_API_KEY" \
  -H "Idempotency-Key: $IDEMPOTENCY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "address": {
    "city": "Amsterdam",
    "country": "NL",
    "line1": "Keizersgracht 100",
    "postalCode": "1015 AA"
  },
  "appointmentTypeId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
  "customer": {
    "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e06"
  },
  "metadata": {
    "campaignId": "C-42",
    "dealId": "D-123"
  },
  "users": [
    {
      "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e03"
    }
  ]
}'

Antwoorden

201 · Created

Geeft terug Invitation

{
  "address": {
    "city": "Amsterdam",
    "country": "NL",
    "line1": "Keizersgracht 100",
    "postalCode": "1015 AA"
  },
  "bookingPageClosed": false,
  "bookingUrl": "https://schedulinq.com/i/EXAMPLE-INVITATION",
  "colleagues": [
    {
      "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
      "name": "Offertebezoek"
    }
  ],
  "createdAt": "2026-10-01T09:00:00+02:00",
  "customerId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e06",
  "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e08",
  "initialEmailDeferred": false,
  "lineageRootId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09",
  "location": {
    "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
    "name": "Offertebezoek"
  },
  "locationMode": "VIDEO",
  "metadata": {
    "campaignId": "C-42",
    "dealId": "D-123"
  },
  "rescheduledFromAppointmentId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09",
  "service": {
    "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
    "name": "Offertebezoek"
  },
  "status": "PENDING",
  "updatedAt": "2026-10-01T09:00:00+02:00",
  "validUntil": "2026-10-31"
}

Headers: Idempotent-Replayed

400 · Fouten

404 · Fouten

409 · Fouten

422 · Fouten

429 · Fouten

Get an invitation

GET/api/v1/invitations/{id}

Scope: invitations:read

One invitation of the organisation, with the appointments booked from it.

Parameters

id
pathstring · uuidVerplicht

The invitation's id.

Voorbeeldverzoek

curl https://api.schedulinq.com/api/v1/invitations/3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e08 \
  -H "Authorization: Bearer $SCHEDULINQ_API_KEY"

Antwoorden

200 · OK

Geeft terug Invitation

{
  "address": {
    "city": "Amsterdam",
    "country": "NL",
    "line1": "Keizersgracht 100",
    "postalCode": "1015 AA"
  },
  "bookingPageClosed": false,
  "bookingUrl": "https://schedulinq.com/i/EXAMPLE-INVITATION",
  "colleagues": [
    {
      "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
      "name": "Offertebezoek"
    }
  ],
  "createdAt": "2026-10-01T09:00:00+02:00",
  "customerId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e06",
  "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e08",
  "initialEmailDeferred": false,
  "lineageRootId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09",
  "location": {
    "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
    "name": "Offertebezoek"
  },
  "locationMode": "VIDEO",
  "metadata": {
    "campaignId": "C-42",
    "dealId": "D-123"
  },
  "rescheduledFromAppointmentId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09",
  "service": {
    "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
    "name": "Offertebezoek"
  },
  "status": "PENDING",
  "updatedAt": "2026-10-01T09:00:00+02:00",
  "validUntil": "2026-10-31"
}

404 · Fouten

Appointments

The organisation's appointments, read back by kenmerken.

List appointments by kenmerken

GET/api/v1/appointments

Scope: appointments:read

The organisation's appointments carrying every kenmerk asked for, oldest first. A single pass: to reconcile, run the lookup again; follow changes through webhooks.

Parameters

status
querystringOptioneel

Only appointments in this status.

Een van: PENDING, CONFIRMED, COMPLETED, NO_SHOW, CANCELLED

from
querystring · date-timeOptioneel

Only appointments starting at or after this moment (an offset date-time; send + as %2B, or use Z).

to
querystring · date-timeOptioneel

Only appointments starting before this moment.

metadata[<key>]
querymap van stringVerplicht

Kenmerken to look up by, as metadata[]=; at least one, all must match. Brackets may be sent raw or as %5B and %5D.

limit
queryintegerOptioneel

How many to return, 1 to 100.

cursor
querystringOptioneel

The nextCursor of the previous page.

Voorbeeldverzoek

curl --globoff "https://api.schedulinq.com/api/v1/appointments?from=2026-10-01T00:00:00Z&to=2026-11-01T00:00:00Z&metadata[dealId]=D-123&limit=25" \
  -H "Authorization: Bearer $SCHEDULINQ_API_KEY"

Antwoorden

200 · OK

Geeft een pagina terug van Appointment

{
  "data": [
    {
      "address": {
        "city": "Amsterdam",
        "country": "NL",
        "line1": "Keizersgracht 100",
        "postalCode": "1015 AA"
      },
      "cancellationReason": "Ziek",
      "cancelledAt": "2026-10-12T15:30:00+02:00",
      "cancelledBy": "CUSTOMER",
      "colleagues": [
        {
          "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
          "name": "Offertebezoek"
        }
      ],
      "createdAt": "2026-10-01T09:00:00+02:00",
      "customerId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e06",
      "end": "2026-10-14T11:00:00+02:00",
      "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09",
      "invitationId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e08",
      "lineageRootId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09",
      "location": {
        "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
        "name": "Offertebezoek"
      },
      "locationMode": "AT_CUSTOMER",
      "meetingProvider": "GOOGLE_MEET",
      "meetingUrl": "https://meet.google.com/abc-defg-hij",
      "metadata": {
        "campaignId": "C-42",
        "dealId": "D-123"
      },
      "planningLinkId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e07",
      "rescheduledFromId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09",
      "service": {
        "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
        "name": "Offertebezoek"
      },
      "start": "2026-10-14T10:00:00+02:00",
      "status": "CONFIRMED",
      "timeZone": "Europe/Amsterdam",
      "updatedAt": "2026-10-01T09:00:00+02:00"
    }
  ],
  "hasMore": false,
  "nextCursor": "MjAyNi0xMC0wMVQwODozMDowMFp8M2YwYzhhNTItNmIxZS00ZDdhLTljM2UtMWEyYjNjNGQ1ZTA5"
}

400 · Fouten

Get an appointment

GET/api/v1/appointments/{id}

Scope: appointments:read

One appointment of the organisation.

Parameters

id
pathstring · uuidVerplicht

The appointment's id.

Voorbeeldverzoek

curl https://api.schedulinq.com/api/v1/appointments/3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09 \
  -H "Authorization: Bearer $SCHEDULINQ_API_KEY"

Antwoorden

200 · OK

Geeft terug Appointment

{
  "address": {
    "city": "Amsterdam",
    "country": "NL",
    "line1": "Keizersgracht 100",
    "postalCode": "1015 AA"
  },
  "cancellationReason": "Ziek",
  "cancelledAt": "2026-10-12T15:30:00+02:00",
  "cancelledBy": "CUSTOMER",
  "colleagues": [
    {
      "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
      "name": "Offertebezoek"
    }
  ],
  "createdAt": "2026-10-01T09:00:00+02:00",
  "customerId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e06",
  "end": "2026-10-14T11:00:00+02:00",
  "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09",
  "invitationId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e08",
  "lineageRootId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09",
  "location": {
    "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
    "name": "Offertebezoek"
  },
  "locationMode": "AT_CUSTOMER",
  "meetingProvider": "GOOGLE_MEET",
  "meetingUrl": "https://meet.google.com/abc-defg-hij",
  "metadata": {
    "campaignId": "C-42",
    "dealId": "D-123"
  },
  "planningLinkId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e07",
  "rescheduledFromId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09",
  "service": {
    "id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
    "name": "Offertebezoek"
  },
  "start": "2026-10-14T10:00:00+02:00",
  "status": "CONFIRMED",
  "timeZone": "Europe/Amsterdam",
  "updatedAt": "2026-10-01T09:00:00+02:00"
}

404 · Fouten

Schema's

User

admin
booleanOptioneel

Whether the colleague is (or will be) an admin of the organisation.

calendarConnected
booleanOptioneel

Whether the colleague has a calendar connected that Schedulinq reads. Absent on an invitation.

createdAt
string · date-timeOptioneel

When the colleague was added, or the invitation sent.

customFields
map van anyOptioneel

The colleague's custom fields, by key; only fields that still exist.

email
stringOptioneel

E-mail address.

firstName
stringOptioneel

First name.

id
string · uuidOptioneel

The colleague's id. Absent on an invitation.

invitationExpiresAt
string · date-timeOptioneel

When an invitation stops being valid. Present only while status is INVITED.

invitationId
string · uuidOptioneel

The invitation's id. Present only while status is INVITED.

lastName
stringOptioneel

Last name. Absent when the colleague has none.

metadata
map van stringOptioneel

Kenmerken the invitation was created with through the API. Present only on an invitation that has them.

name
stringOptioneel

First and last name.

roleId
string · uuidOptioneel

The colleague's role. Absent for an admin and for an invitation without a role.

schedulable
booleanOptioneel

Whether customers can be booked with this colleague. Absent on an invitation.

status
stringOptioneel

ACTIVE, INACTIVE or INVITED.

Een van: ACTIVE, INACTIVE, INVITED

Service

colleagueIds
lijst van string · uuidOptioneel

The colleagues who perform the service.

createdAt
string · date-timeOptioneel

When the service was created.

durationMinutes
integer · int32Optioneel

How long the service takes, in minutes. Absent when it has no length of its own.

id
string · uuidOptioneel

The service's id.

identifier
stringOptioneel

The identifier the organisation gave the service.

name
stringOptioneel

The name in the organisation's own language.

names
map van stringOptioneel

The name per language, by language code.

Role

createdAt
string · date-timeOptioneel

When the role was created.

id
string · uuidOptioneel

The role's id.

name
stringOptioneel

The role's name.

customerId
string · uuidOptioneel

The customer: the one named by id, or the one found or created.

expiresAt
string · date-timeOptioneel

Until when the link can be opened, in the organisation's time zone.

id
string · uuidOptioneel

The link's id; appointments booked from it carry it as planningLinkId.

url
stringOptioneel

The one-time URL. Never store it, never show it in a list: mint a new one per click.

userId
string · uuidOptioneel

The colleague the planner opens on; absent when the link names none.

Invitation

address
AddressOptioneel

Where the appointment happens; absent when the customer gives it.

Velden tonen · Address
city
stringOptioneel

City.

minstens 0 tekens · hoogstens 100 tekens

country
stringOptioneel

ISO 3166-1 alpha-2 country code; the organisation's country when absent.

line1
stringOptioneel

Street and house number.

minstens 0 tekens · hoogstens 255 tekens

postalCode
stringOptioneel

Postal code.

minstens 0 tekens · hoogstens 20 tekens

appointmentIds
lijst van string · uuidOptioneel

The appointments booked from this invitation, earliest first; [] while none.

bookingPageClosed
booleanOptioneel

In the create's answer: true while the organisation's booking page takes no bookings; the first message is then queued but not sent.

bookingUrl
stringOptioneel

The customer's booking link. Only in the answer to the create; keep it from there.

colleagues
lijst van NamedRefOptioneel

The colleagues the customer can book with, by name.

Velden tonen · NamedRef
id
string · uuidOptioneel

Its id.

name
stringOptioneel

Its name.

createdAt
string · date-timeOptioneel

When it was created.

customerId
string · uuidOptioneel

The customer.

id
string · uuidOptioneel

The invitation's id.

initialEmailDeferred
booleanOptioneel

In the create's answer: true when the first message was not sent because the customer has no e-mail address.

lineageRootId
string · uuidOptioneel

When the invitation moves an earlier booking: the first appointment of that booking.

location
NamedRefOptioneel

The organisation's location the appointment is pinned to; absent when none.

Velden tonen · NamedRef
id
string · uuidOptioneel

Its id.

name
stringOptioneel

Its name.

locationMode
stringOptioneel

VIDEO or PHONE when the invitation is for a call; absent for a visit.

Een van: AT_CUSTOMER, ON_LOCATION, VIDEO, PHONE

metadata
map van stringOptioneel

Kenmerken, in key order; {} when none.

rescheduledFromAppointmentId
string · uuidOptioneel

When the invitation moves an earlier booking: the cancelled appointment it replaces.

service
NamedRefOptioneel

The service.

Velden tonen · NamedRef
id
string · uuidOptioneel

Its id.

name
stringOptioneel

Its name.

status
stringOptioneel

PENDING (can be booked), USED (booked), CANCELLED or EXPIRED.

Een van: PENDING, USED, CANCELLED, EXPIRED

updatedAt
string · date-timeOptioneel

When it last changed.

validUntil
string · dateOptioneel

The last day it can be booked, in the organisation's time zone. Absent = no end date.

Appointment

address
AddressOptioneel

Where it happens; absent for a call.

Velden tonen · Address
city
stringOptioneel

City.

minstens 0 tekens · hoogstens 100 tekens

country
stringOptioneel

ISO 3166-1 alpha-2 country code; the organisation's country when absent.

line1
stringOptioneel

Street and house number.

minstens 0 tekens · hoogstens 255 tekens

postalCode
stringOptioneel

Postal code.

minstens 0 tekens · hoogstens 20 tekens

cancellationReason
stringOptioneel

The reason given when it was cancelled, if any.

cancelledAt
string · date-timeOptioneel

When it was cancelled; absent unless CANCELLED.

cancelledBy
stringOptioneel

Who cancelled it: CUSTOMER, STAFF, SYSTEM, or STAFF_RESCHEDULE (cancelled by a colleague to be booked again); absent unless CANCELLED.

Een van: CUSTOMER, STAFF, SYSTEM, STAFF_RESCHEDULE

colleagues
lijst van NamedRefOptioneel

The colleagues booked, by name.

Velden tonen · NamedRef
id
string · uuidOptioneel

Its id.

name
stringOptioneel

Its name.

createdAt
string · date-timeOptioneel

When it was created.

customerId
string · uuidOptioneel

The customer; absent for an appointment without one.

end
string · date-timeOptioneel

The end, in the organisation's time zone.

id
string · uuidOptioneel

The appointment's id.

invitationId
string · uuidOptioneel

The invitation it was booked from, if any.

lineageRootId
string · uuidOptioneel

The first appointment of the booking this one moves; absent when it was booked, not moved.

location
NamedRefOptioneel

The organisation's location it happens at; absent when none.

Velden tonen · NamedRef
id
string · uuidOptioneel

Its id.

name
stringOptioneel

Its name.

locationMode
stringOptioneel

AT_CUSTOMER, ON_LOCATION, VIDEO or PHONE.

Een van: AT_CUSTOMER, ON_LOCATION, VIDEO, PHONE

meetingProvider
stringOptioneel

Who made the meeting link: GOOGLE_MEET, TEAMS or MANUAL.

Een van: GOOGLE_MEET, TEAMS, MANUAL

meetingUrl
stringOptioneel

A video call's meeting link; absent until one exists.

metadata
map van stringOptioneel

Kenmerken, in key order; {} when none.

planningLinkId
string · uuidOptioneel

The planning link it was booked from, if any.

rescheduledFromId
string · uuidOptioneel

The appointment this one replaced when it was moved.

service
NamedRefOptioneel

The service.

Velden tonen · NamedRef
id
string · uuidOptioneel

Its id.

name
stringOptioneel

Its name.

start
string · date-timeOptioneel

The start, in the organisation's time zone.

status
stringOptioneel

CONFIRMED, COMPLETED or CANCELLED (PENDING and NO_SHOW are reserved).

Een van: PENDING, CONFIRMED, COMPLETED, NO_SHOW, CANCELLED

timeZone
stringOptioneel

The organisation's time zone (IANA).

updatedAt
string · date-timeOptioneel

When it last changed.

Laatst bijgewerkt op 2 oktober 2026