{
  "components": {
    "headers": {
      "Idempotent-Replayed": {
        "description": "true when this answer is the stored answer to an earlier request with the same Idempotency-Key.",
        "schema": {
          "example": "true",
          "type": "string"
        }
      },
      "RateLimit-Limit": {
        "description": "The requests this API key may make per window.",
        "schema": {
          "example": 300,
          "type": "integer"
        }
      },
      "RateLimit-Remaining": {
        "description": "The requests left in the current window.",
        "schema": {
          "example": 299,
          "type": "integer"
        }
      },
      "RateLimit-Reset": {
        "description": "Seconds until the window is full again.",
        "schema": {
          "example": 60,
          "type": "integer"
        }
      },
      "Retry-After": {
        "description": "Seconds to wait before trying again.",
        "schema": {
          "example": 12,
          "type": "integer"
        }
      },
      "X-Request-Id": {
        "description": "The request's id: the X-Request-Id you sent when it was valid, else one we made. Quote it to support.",
        "schema": {
          "example": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b",
          "type": "string"
        }
      }
    },
    "schemas": {
      "AddOnRef": {
        "description": "An add-on of the service, pinned on the invitation.",
        "properties": {
          "id": {"description":"The add-on's id (GET /api/v1/services).","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e02","format":"uuid","type":"string"},
          "quantity": {"description":"How many, 1 to 99; above 1 only for an add-on that allows several. Absent = 1.","example":1,"format":"int32","maximum":99,"minimum":1,"type":"integer"}
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "Address": {
        "description": "An address. line1 holds the street and the house number.",
        "properties": {
          "city": {"description":"City.","example":"Amsterdam","maxLength":100,"minLength":0,"type":"string"},
          "country": {"description":"ISO 3166-1 alpha-2 country code; the organisation's country when absent.","example":"NL","type":"string"},
          "line1": {"description":"Street and house number.","example":"Keizersgracht 100","maxLength":255,"minLength":0,"type":"string"},
          "postalCode": {"description":"Postal code.","example":"1015 AA","maxLength":20,"minLength":0,"type":"string"}
        },
        "type": "object"
      },
      "Appointment": {
        "description": "An appointment.",
        "properties": {
          "address": {"$ref":"#/components/schemas/Address","description":"Where it happens; absent for a call."},
          "cancellationReason": {"description":"The reason given when it was cancelled, if any.","example":"Ziek","type":"string"},
          "cancelledAt": {"description":"When it was cancelled; absent unless CANCELLED.","example":"2026-10-12T15:30:00+02:00","format":"date-time","type":"string"},
          "cancelledBy": {"description":"Who cancelled it: CUSTOMER, STAFF, SYSTEM, or STAFF_RESCHEDULE (cancelled by a colleague to be booked again); absent unless CANCELLED.","enum":["CUSTOMER","STAFF","SYSTEM","STAFF_RESCHEDULE"],"example":"CUSTOMER","type":"string"},
          "colleagues": {"description":"The colleagues booked, by name.","items":{"$ref":"#/components/schemas/NamedRef"},"type":"array"},
          "createdAt": {"description":"When it was created.","example":"2026-10-01T09:00:00+02:00","format":"date-time","type":"string"},
          "customerId": {"description":"The customer; absent for an appointment without one.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e06","format":"uuid","type":"string"},
          "end": {"description":"The end, in the organisation's time zone.","example":"2026-10-14T11:00:00+02:00","format":"date-time","type":"string"},
          "id": {"description":"The appointment's id.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09","format":"uuid","type":"string"},
          "invitationId": {"description":"The invitation it was booked from, if any.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e08","format":"uuid","type":"string"},
          "lineageRootId": {"description":"The first appointment of the booking this one moves; absent when it was booked, not moved.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09","format":"uuid","type":"string"},
          "location": {"$ref":"#/components/schemas/NamedRef","description":"The organisation's location it happens at; absent when none."},
          "locationMode": {"description":"AT_CUSTOMER, ON_LOCATION, VIDEO or PHONE.","enum":["AT_CUSTOMER","ON_LOCATION","VIDEO","PHONE"],"example":"AT_CUSTOMER","type":"string"},
          "meetingProvider": {"description":"Who made the meeting link: GOOGLE_MEET, TEAMS or MANUAL.","enum":["GOOGLE_MEET","TEAMS","MANUAL"],"example":"GOOGLE_MEET","type":"string"},
          "meetingUrl": {"description":"A video call's meeting link; absent until one exists.","example":"https://meet.google.com/abc-defg-hij","type":"string"},
          "metadata": {"additionalProperties":{"type":"string"},"description":"Kenmerken, in key order; {} when none.","example":{"campaignId":"C-42","dealId":"D-123"},"type":"object"},
          "planningLinkId": {"description":"The planning link it was booked from, if any.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e07","format":"uuid","type":"string"},
          "rescheduledFromId": {"description":"The appointment this one replaced when it was moved.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09","format":"uuid","type":"string"},
          "service": {"$ref":"#/components/schemas/NamedRef","description":"The service."},
          "start": {"description":"The start, in the organisation's time zone.","example":"2026-10-14T10:00:00+02:00","format":"date-time","type":"string"},
          "status": {"description":"CONFIRMED, COMPLETED or CANCELLED (PENDING and NO_SHOW are reserved).","enum":["PENDING","CONFIRMED","COMPLETED","NO_SHOW","CANCELLED"],"example":"CONFIRMED","type":"string"},
          "timeZone": {"description":"The organisation's time zone (IANA).","example":"Europe/Amsterdam","type":"string"},
          "updatedAt": {"description":"When it last changed.","example":"2026-10-01T09:00:00+02:00","format":"date-time","type":"string"}
        },
        "type": "object"
      },
      "AppointmentList": {
        "description": "One page of appointments, oldest first.",
        "properties": {
          "data": {"description":"The appointments on this page.","items":{"$ref":"#/components/schemas/Appointment"},"type":"array"},
          "hasMore": {"description":"Whether another page follows.","example":false,"type":"boolean"},
          "nextCursor": {"description":"Pass as cursor to get the next page. Absent on the last page.","example":"MjAyNi0xMC0wMVQwODozMDowMFp8M2YwYzhhNTItNmIxZS00ZDdhLTljM2UtMWEyYjNjNGQ1ZTA5","type":"string"}
        },
        "type": "object"
      },
      "ColleagueRef": {
        "description": "A colleague of the organisation, by id or by e-mail address: exactly one of the two. The colleague must be active and schedulable.",
        "properties": {
          "email": {"description":"The colleague's e-mail address; matched whatever its case.","example":"sanne@installatiebedrijf-jansen.example","format":"email","maxLength":255,"minLength":0,"type":"string"},
          "id": {"description":"The colleague's id (GET /api/v1/users).","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e03","format":"uuid","type":"string"}
        },
        "type": "object"
      },
      "CreateInvitationRequest": {
        "description": "An invitation: the customer gets a link to book this service with one of these colleagues.",
        "properties": {
          "addOns": {"description":"Add-ons of the service, pinned on the invitation; each id once.","items":{"$ref":"#/components/schemas/AddOnRef"},"type":"array"},
          "address": {"$ref":"#/components/schemas/Address","description":"Where the appointment happens, when at the customer's. Never stored on the customer."},
          "appointmentTypeId": {"description":"The service (GET /api/v1/services).","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01","format":"uuid","type":"string"},
          "customer": {"$ref":"#/components/schemas/CustomerInput","description":"The customer."},
          "metadata": {"additionalProperties":{"$ref":"#/components/schemas/MetadataValue"},"description":"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.","example":{"campaignId":"C-42","dealId":"D-123"},"maxProperties":40,"type":"object"},
          "users": {"description":"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.","items":{"$ref":"#/components/schemas/ColleagueRef"},"maxItems":100,"minItems":1,"type":"array"},
          "validUntil": {"description":"The last day the invitation can be booked, in the organisation's time zone. Absent = the organisation's default.","example":"2026-10-31","format":"date","type":"string"}
        },
        "required": [
          "appointmentTypeId",
          "customer",
          "users"
        ],
        "type": "object"
      },
      "CreatePlanningLinkRequest": {
        "description": "A planning link: the planner, opened for this customer.",
        "properties": {
          "address": {"$ref":"#/components/schemas/Address","description":"Where the appointment happens, when at the customer's. Never stored on the customer."},
          "appointmentTypeId": {"description":"The service the planner opens on (GET /api/v1/services).","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01","format":"uuid","type":"string"},
          "customer": {"$ref":"#/components/schemas/CustomerInput","description":"The customer."},
          "metadata": {"additionalProperties":{"$ref":"#/components/schemas/MetadataValue"},"description":"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.","example":{"campaignId":"C-42","dealId":"D-123"},"maxProperties":40,"type":"object"},
          "returnUrl": {"description":"Where \"Back to CRM\" goes after the booking: an https URL whose origin is on the organisation's list of allowed return addresses.","example":"https://crm.example.com/deals/D-123","maxLength":2048,"minLength":0,"type":"string"},
          "user": {"$ref":"#/components/schemas/ColleagueRef","description":"The colleague the planner opens on; the caller may still book another. Absent: the planner opens on every colleague who does the service."}
        },
        "required": [
          "customer"
        ],
        "type": "object"
      },
      "CustomerInput": {
        "description": "The customer: an existing customer by id alone, or its details — found by e-mail address (whatever its case) or created. On a customer found by e-mail only empty names and an empty phone number are filled in.",
        "properties": {
          "companyName": {"description":"Company name; required for a BUSINESS.","example":"Jansen Installaties","maxLength":255,"minLength":0,"type":"string"},
          "customerType": {"description":"PERSON (the default) or BUSINESS.","enum":["PERSON","BUSINESS"],"example":"PERSON","type":"string"},
          "email": {"description":"E-mail address, required without an id: how the customer is found, and where the invitation goes.","example":"jan.jansen@example.com","format":"email","maxLength":255,"minLength":0,"type":"string"},
          "firstName": {"description":"First name; for a BUSINESS, the contact person's.","example":"Jan","maxLength":100,"minLength":0,"type":"string"},
          "id": {"description":"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.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e06","format":"uuid","type":"string"},
          "lastName": {"description":"Last name; required for a PERSON. For a BUSINESS, the contact person's.","example":"Jansen","maxLength":100,"minLength":0,"type":"string"},
          "phone": {"description":"Phone number: E.164 (a + and the country code), or national in the organisation's country.","maxLength":20,"minLength":0,"type":"string"}
        },
        "type": "object"
      },
      "Invitation": {
        "description": "A customer invitation: a link the customer books an appointment with.",
        "properties": {
          "address": {"$ref":"#/components/schemas/Address","description":"Where the appointment happens; absent when the customer gives it."},
          "appointmentIds": {"description":"The appointments booked from this invitation, earliest first; [] while none.","items":{"format":"uuid","type":"string"},"type":"array"},
          "bookingPageClosed": {"description":"In the create's answer: true while the organisation's booking page takes no bookings; the first message is then queued but not sent.","example":false,"type":"boolean"},
          "bookingUrl": {"description":"The customer's booking link. Only in the answer to the create; keep it from there.","example":"https://schedulinq.com/i/EXAMPLE-INVITATION","type":"string"},
          "colleagues": {"description":"The colleagues the customer can book with, by name.","items":{"$ref":"#/components/schemas/NamedRef"},"type":"array"},
          "createdAt": {"description":"When it was created.","example":"2026-10-01T09:00:00+02:00","format":"date-time","type":"string"},
          "customerId": {"description":"The customer.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e06","format":"uuid","type":"string"},
          "id": {"description":"The invitation's id.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e08","format":"uuid","type":"string"},
          "initialEmailDeferred": {"description":"In the create's answer: true when the first message was not sent because the customer has no e-mail address.","example":false,"type":"boolean"},
          "lineageRootId": {"description":"When the invitation moves an earlier booking: the first appointment of that booking.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09","format":"uuid","type":"string"},
          "location": {"$ref":"#/components/schemas/NamedRef","description":"The organisation's location the appointment is pinned to; absent when none."},
          "locationMode": {"description":"VIDEO or PHONE when the invitation is for a call; absent for a visit.","enum":["AT_CUSTOMER","ON_LOCATION","VIDEO","PHONE"],"example":"VIDEO","type":"string"},
          "metadata": {"additionalProperties":{"type":"string"},"description":"Kenmerken, in key order; {} when none.","example":{"campaignId":"C-42","dealId":"D-123"},"type":"object"},
          "rescheduledFromAppointmentId": {"description":"When the invitation moves an earlier booking: the cancelled appointment it replaces.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09","format":"uuid","type":"string"},
          "service": {"$ref":"#/components/schemas/NamedRef","description":"The service."},
          "status": {"description":"PENDING (can be booked), USED (booked), CANCELLED or EXPIRED.","enum":["PENDING","USED","CANCELLED","EXPIRED"],"example":"PENDING","type":"string"},
          "updatedAt": {"description":"When it last changed.","example":"2026-10-01T09:00:00+02:00","format":"date-time","type":"string"},
          "validUntil": {"description":"The last day it can be booked, in the organisation's time zone. Absent = no end date.","example":"2026-10-31","format":"date","type":"string"}
        },
        "type": "object"
      },
      "InvitationList": {
        "description": "One page of invitations, oldest first.",
        "properties": {
          "data": {"description":"The invitations on this page.","items":{"$ref":"#/components/schemas/Invitation"},"type":"array"},
          "hasMore": {"description":"Whether another page follows.","example":false,"type":"boolean"},
          "nextCursor": {"description":"Pass as cursor to get the next page. Absent on the last page.","example":"MjAyNi0xMC0wMVQwODozMDowMFp8M2YwYzhhNTItNmIxZS00ZDdhLTljM2UtMWEyYjNjNGQ1ZTA4","type":"string"}
        },
        "type": "object"
      },
      "MetadataValue": {
        "description": "A kenmerk value.",
        "maxLength": 500,
        "type": "string"
      },
      "NamedRef": {
        "description": "Something by id, with its name in the organisation's language.",
        "properties": {
          "id": {"description":"Its id.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01","format":"uuid","type":"string"},
          "name": {"description":"Its name.","example":"Offertebezoek","type":"string"}
        },
        "type": "object"
      },
      "NewUser": {
        "description": "A colleague to invite by e-mail. Schedulinq sends the invitation.",
        "properties": {
          "customFields": {"additionalProperties":{},"description":"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.","example":{"bedrijf":"Loodgieter Bakker"},"maxProperties":30,"type":"object"},
          "email": {"description":"The colleague's e-mail address; the invitation goes there. At most 100 characters.","example":"piet+ov@loodgieter-bakker.example","format":"email","maxLength":100,"minLength":0,"type":"string"},
          "firstName": {"description":"First name, at most 100 characters.","example":"Piet","maxLength":100,"minLength":0,"type":"string"},
          "lastName": {"description":"Last name, at most 100 characters.","example":"Bakker","maxLength":100,"minLength":0,"type":"string"},
          "locale": {"description":"The language of the invitation mail and the page it opens. Absent = the organisation's language.","enum":["en","nl","de","fr","es","it","pl","ar"],"example":"nl","type":"string"},
          "metadata": {"additionalProperties":{"$ref":"#/components/schemas/MetadataValue"},"description":"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.","example":{"campaignId":"C-42"},"maxProperties":40,"type":"object"},
          "roleId": {"description":"The role the colleague gets on accepting: one of the roles this API key may assign (GET /api/v1/roles).","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e04","format":"uuid","type":"string"}
        },
        "required": [
          "email",
          "firstName",
          "lastName",
          "roleId"
        ],
        "type": "object"
      },
      "PlanningLink": {
        "description": "A planning link. Open url in the colleague's browser right away: it works for 15 minutes and for one colleague.",
        "properties": {
          "customerId": {"description":"The customer: the one named by id, or the one found or created.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e06","format":"uuid","type":"string"},
          "expiresAt": {"description":"Until when the link can be opened, in the organisation's time zone.","example":"2026-10-14T09:15:00+02:00","format":"date-time","type":"string"},
          "id": {"description":"The link's id; appointments booked from it carry it as planningLinkId.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e07","format":"uuid","type":"string"},
          "url": {"description":"The one-time URL. Never store it, never show it in a list: mint a new one per click.","example":"https://app.schedulinq.com/plan-link#EXAMPLE-TOKEN","type":"string"},
          "userId": {"description":"The colleague the planner opens on; absent when the link names none.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e03","format":"uuid","type":"string"}
        },
        "type": "object"
      },
      "Problem": {
        "description": "What went wrong, as RFC 9457 problem details.",
        "properties": {
          "code": {"description":"The problem's code; a stable key, safe to branch on.","example":"errors.api.apiKeyMissing","type":"string"},
          "detail": {"description":"An English sentence for a developer.","example":"Send your API key in the Authorization header: Authorization: Bearer sq_live_...","type":"string"},
          "errors": {"description":"The fields that were refused, at most 50.","items":{"$ref":"#/components/schemas/ProblemFieldError"},"type":"array"},
          "instance": {"description":"The request path (never its query).","example":"/api/v1/users","type":"string"},
          "requestId": {"description":"The request's id, also sent as the X-Request-Id header. Quote it to support.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","type":"string"},
          "requiredScope": {"description":"The scope the API key lacks, on errors.api.insufficientScope.","example":"users:read","type":"string"},
          "status": {"description":"The HTTP status.","example":401,"format":"int32","type":"integer"},
          "title": {"description":"The HTTP status's reason phrase.","example":"Unauthorized","type":"string"},
          "truncated": {"description":"True when more field errors were found than errors holds.","example":true,"type":"boolean"},
          "type": {"description":"A link to the code's entry in the error reference.","example":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyMissing","type":"string"}
        },
        "type": "object"
      },
      "ProblemFieldError": {
        "description": "One field that was refused.",
        "properties": {
          "code": {"description":"The refusal's code; a stable key, safe to branch on.","example":"errors.validation.nameRequired","type":"string"},
          "field": {"description":"The field's path in the request, dotted with indexes (customer.firstName, items[2].name).","example":"name","type":"string"},
          "message": {"description":"An English sentence for a developer; never shown to end users as is.","example":"A name is required.","type":"string"}
        },
        "type": "object"
      },
      "Role": {
        "description": "A role this API key may give a colleague it invites.",
        "properties": {
          "createdAt": {"description":"When the role was created.","example":"2026-09-01T08:00:00Z","format":"date-time","type":"string"},
          "id": {"description":"The role's id.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e04","format":"uuid","type":"string"},
          "name": {"description":"The role's name.","example":"Leadkoper","type":"string"}
        },
        "type": "object"
      },
      "RoleList": {
        "description": "One page of the roles this API key may assign, oldest first.",
        "properties": {
          "data": {"description":"The roles on this page.","items":{"$ref":"#/components/schemas/Role"},"type":"array"},
          "hasMore": {"description":"Whether another page follows.","example":false,"type":"boolean"},
          "nextCursor": {"description":"Pass as cursor to get the next page. Absent on the last page.","example":"MjAyNi0wOS0wMVQwODowMDowMFp8M2YwYzhhNTItNmIxZS00ZDdhLTljM2UtMWEyYjNjNGQ1ZTA0","type":"string"}
        },
        "type": "object"
      },
      "Service": {
        "description": "A service (appointment type) the organisation offers.",
        "properties": {
          "colleagueIds": {"description":"The colleagues who perform the service.","example":["3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e03"],"items":{"format":"uuid","type":"string"},"type":"array"},
          "createdAt": {"description":"When the service was created.","example":"2026-09-01T08:00:00Z","format":"date-time","type":"string"},
          "durationMinutes": {"description":"How long the service takes, in minutes. Absent when it has no length of its own.","example":60,"format":"int32","type":"integer"},
          "id": {"description":"The service's id.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01","format":"uuid","type":"string"},
          "identifier": {"description":"The identifier the organisation gave the service.","example":"offertebezoek","type":"string"},
          "name": {"description":"The name in the organisation's own language.","example":"Offertebezoek","type":"string"},
          "names": {"additionalProperties":{"type":"string"},"description":"The name per language, by language code.","example":{"en":"Quote visit","nl":"Offertebezoek"},"type":"object"}
        },
        "type": "object"
      },
      "ServiceList": {
        "description": "One page of services, oldest first.",
        "properties": {
          "data": {"description":"The services on this page.","items":{"$ref":"#/components/schemas/Service"},"type":"array"},
          "hasMore": {"description":"Whether another page follows.","example":false,"type":"boolean"},
          "nextCursor": {"description":"Pass as cursor to get the next page. Absent on the last page.","example":"MjAyNi0wOS0wMVQwODowMDowMFp8M2YwYzhhNTItNmIxZS00ZDdhLTljM2UtMWEyYjNjNGQ1ZTAx","type":"string"}
        },
        "type": "object"
      },
      "User": {
        "description": "A colleague of the organisation, or an invitation that has not been accepted yet.",
        "properties": {
          "admin": {"description":"Whether the colleague is (or will be) an admin of the organisation.","example":false,"type":"boolean"},
          "calendarConnected": {"description":"Whether the colleague has a calendar connected that Schedulinq reads. Absent on an invitation.","example":true,"type":"boolean"},
          "createdAt": {"description":"When the colleague was added, or the invitation sent.","example":"2026-10-01T08:30:00Z","format":"date-time","type":"string"},
          "customFields": {"additionalProperties":{},"description":"The colleague's custom fields, by key; only fields that still exist.","example":{"bedrijf":"Installatiebedrijf Jansen"},"type":"object"},
          "email": {"description":"E-mail address.","example":"sanne@installatiebedrijf-jansen.example","type":"string"},
          "firstName": {"description":"First name.","example":"Sanne","type":"string"},
          "id": {"description":"The colleague's id. Absent on an invitation.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e03","format":"uuid","type":"string"},
          "invitationExpiresAt": {"description":"When an invitation stops being valid. Present only while status is INVITED.","example":"2026-10-08T08:30:00Z","format":"date-time","type":"string"},
          "invitationId": {"description":"The invitation's id. Present only while status is INVITED.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e05","format":"uuid","type":"string"},
          "lastName": {"description":"Last name. Absent when the colleague has none.","example":"de Vries","type":"string"},
          "metadata": {"additionalProperties":{"type":"string"},"description":"Kenmerken the invitation was created with through the API. Present only on an invitation that has them.","example":{"campaignId":"C-42"},"type":"object"},
          "name": {"description":"First and last name.","example":"Sanne de Vries","type":"string"},
          "roleId": {"description":"The colleague's role. Absent for an admin and for an invitation without a role.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e04","format":"uuid","type":"string"},
          "schedulable": {"description":"Whether customers can be booked with this colleague. Absent on an invitation.","example":true,"type":"boolean"},
          "status": {"description":"ACTIVE, INACTIVE or INVITED.","enum":["ACTIVE","INACTIVE","INVITED"],"example":"ACTIVE","type":"string"}
        },
        "type": "object"
      },
      "UserList": {
        "description": "One page of colleagues and open invitations, oldest first.",
        "properties": {
          "data": {"description":"The colleagues and invitations on this page.","items":{"$ref":"#/components/schemas/User"},"type":"array"},
          "hasMore": {"description":"Whether another page follows.","example":false,"type":"boolean"},
          "nextCursor": {"description":"Pass as cursor to get the next page. Absent on the last page.","example":"MjAyNi0xMC0wMVQwODozMDowMFp8M2YwYzhhNTItNmIxZS00ZDdhLTljM2UtMWEyYjNjNGQ1ZTAz","type":"string"}
        },
        "type": "object"
      }
    },
    "securitySchemes": {
      "apiKey": {
        "bearerFormat": "sq_live_…",
        "description": "An API key an admin creates under Integrations → API, sent as Authorization: Bearer sq_live_…",
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "description": "Book appointments in Schedulinq from your own software. Guides, authentication and the error reference: https://docs.schedulinq.com/en/api/overview",
    "title": "Schedulinq API",
    "version": "v1"
  },
  "openapi": "3.1.0",
  "paths": {
    "/api/v1/appointments": {
      "get": {
        "description": "**Scope:** `appointments:read`\n\nThe organisation's appointments carrying every kenmerk asked for, oldest first. A single pass: to reconcile, run the lookup again; follow changes through webhooks.",
        "operationId": "listAppointments",
        "parameters": [
          {"description":"Only appointments in this status.","in":"query","name":"status","schema":{"enum":["PENDING","CONFIRMED","COMPLETED","NO_SHOW","CANCELLED"],"type":"string"}},
          {"description":"Only appointments starting at or after this moment (an offset date-time; send + as %2B, or use Z).","example":"2026-10-01T00:00:00Z","in":"query","name":"from","schema":{"format":"date-time","type":"string"}},
          {"description":"Only appointments starting before this moment.","example":"2026-11-01T00:00:00Z","in":"query","name":"to","schema":{"format":"date-time","type":"string"}},
          {"description":"Kenmerken to look up by, as metadata[<key>]=<value>; at least one, all must match. Brackets may be sent raw or as %5B and %5D.","explode":true,"in":"query","name":"metadata","required":true,"schema":{"additionalProperties":{"$ref":"#/components/schemas/MetadataValue"},"example":{"dealId":"D-123"},"type":"object"},"style":"deepObject"},
          {"description":"How many to return, 1 to 100.","example":25,"in":"query","name":"limit","schema":{"type":"integer"}},
          {"description":"The nextCursor of the previous page.","in":"query","name":"cursor","schema":{"type":"string"}}
        ],
        "responses": {
          "200": {"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppointmentList"}}},"description":"OK","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},
          "400": {"content":{"application/problem+json":{"examples":{"errors.api.invalidParameter":{"summary":"errors.api.invalidParameter","value":{"code":"errors.api.invalidParameter","detail":"A parameter has a value of the wrong type.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.invalidParameter"}},"errors.api.validationFailed":{"summary":"errors.api.validationFailed","value":{"code":"errors.api.validationFailed","detail":"One or more fields are not valid. The errors list names each field.","errors":[{"code":"errors.validation.limitOutOfRange","field":"limit","message":"limit must be a whole number from 1 to 100."}],"requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.validationFailed"}},"errors.validation.cursorInvalid":{"summary":"errors.validation.cursorInvalid","value":{"code":"errors.validation.cursorInvalid","detail":"The cursor is not valid. Use the nextCursor of a previous page as it was given.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.cursorInvalid"}},"errors.validation.invalidValue":{"summary":"errors.validation.invalidValue","value":{"code":"errors.validation.invalidValue","detail":"This value has the wrong type or format.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.invalidValue"}},"errors.validation.limitOutOfRange":{"summary":"errors.validation.limitOutOfRange","value":{"code":"errors.validation.limitOutOfRange","detail":"limit must be a whole number from 1 to 100.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.limitOutOfRange"}},"errors.validation.metadataFilterRequired":{"summary":"errors.validation.metadataFilterRequired","value":{"code":"errors.validation.metadataFilterRequired","detail":"A list needs at least one metadata filter, for example metadata[dealId]=D-123.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.metadataFilterRequired"}},"errors.validation.unknownField":{"summary":"errors.validation.unknownField","value":{"code":"errors.validation.unknownField","detail":"This field does not exist.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.unknownField"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.validationFailed","errors.api.invalidParameter","errors.validation.metadataFilterRequired","errors.validation.unknownField","errors.validation.invalidValue","errors.validation.limitOutOfRange","errors.validation.cursorInvalid"]},
          "401": {"content":{"application/problem+json":{"examples":{"errors.api.apiKeyExpired":{"summary":"errors.api.apiKeyExpired","value":{"code":"errors.api.apiKeyExpired","detail":"This API key has expired. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyExpired"}},"errors.api.apiKeyInvalid":{"summary":"errors.api.apiKeyInvalid","value":{"code":"errors.api.apiKeyInvalid","detail":"The API key is not valid. Check that you copied the whole key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyInvalid"}},"errors.api.apiKeyMissing":{"summary":"errors.api.apiKeyMissing","value":{"code":"errors.api.apiKeyMissing","detail":"Send your API key in the Authorization header: Authorization: Bearer sq_live_...","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyMissing"}},"errors.api.apiKeyRevoked":{"summary":"errors.api.apiKeyRevoked","value":{"code":"errors.api.apiKeyRevoked","detail":"This API key has been revoked. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyRevoked"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.apiKeyMissing","errors.api.apiKeyInvalid","errors.api.apiKeyRevoked","errors.api.apiKeyExpired"]},
          "403": {"content":{"application/problem+json":{"examples":{"errors.api.insufficientScope":{"summary":"errors.api.insufficientScope","value":{"code":"errors.api.insufficientScope","detail":"This API key does not have the scope appointments:read.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","requiredScope":"appointments:read","status":403,"title":"Forbidden","type":"https://docs.schedulinq.com/en/api/errors#errors.api.insufficientScope"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.insufficientScope"]},
          "429": {"content":{"application/problem+json":{"examples":{"errors.api.rateLimitExceeded":{"summary":"errors.api.rateLimitExceeded","value":{"code":"errors.api.rateLimitExceeded","detail":"Too many requests for this API key. Wait for the number of seconds in Retry-After and try again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.rateLimitExceeded"}},"errors.api.tooManyFailedAuthentications":{"summary":"errors.api.tooManyFailedAuthentications","value":{"code":"errors.api.tooManyFailedAuthentications","detail":"Too many failed authentications from this address. Wait for the number of seconds in Retry-After before trying again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.tooManyFailedAuthentications"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Too Many Requests","headers":{"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.rateLimitExceeded","errors.api.tooManyFailedAuthentications"]},
          "500": {"content":{"application/problem+json":{"examples":{"errors.api.unexpectedError":{"summary":"errors.api.unexpectedError","value":{"code":"errors.api.unexpectedError","detail":"Something went wrong on our side. Try again later; if it keeps happening, contact support with the requestId.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":500,"title":"Internal Server Error","type":"https://docs.schedulinq.com/en/api/errors#errors.api.unexpectedError"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.unexpectedError"]}
        },
        "security": [
          {"apiKey":["appointments:read"]}
        ],
        "summary": "List appointments by kenmerken",
        "tags": [
          "Appointments"
        ],
        "x-required-scope": "appointments:read"
      }
    },
    "/api/v1/appointments/{id}": {
      "get": {
        "description": "**Scope:** `appointments:read`\n\nOne appointment of the organisation.",
        "operationId": "getAppointment",
        "parameters": [
          {"description":"The appointment's id.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}
        ],
        "responses": {
          "200": {"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Appointment"}}},"description":"OK","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},
          "401": {"content":{"application/problem+json":{"examples":{"errors.api.apiKeyExpired":{"summary":"errors.api.apiKeyExpired","value":{"code":"errors.api.apiKeyExpired","detail":"This API key has expired. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyExpired"}},"errors.api.apiKeyInvalid":{"summary":"errors.api.apiKeyInvalid","value":{"code":"errors.api.apiKeyInvalid","detail":"The API key is not valid. Check that you copied the whole key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyInvalid"}},"errors.api.apiKeyMissing":{"summary":"errors.api.apiKeyMissing","value":{"code":"errors.api.apiKeyMissing","detail":"Send your API key in the Authorization header: Authorization: Bearer sq_live_...","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyMissing"}},"errors.api.apiKeyRevoked":{"summary":"errors.api.apiKeyRevoked","value":{"code":"errors.api.apiKeyRevoked","detail":"This API key has been revoked. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyRevoked"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.apiKeyMissing","errors.api.apiKeyInvalid","errors.api.apiKeyRevoked","errors.api.apiKeyExpired"]},
          "403": {"content":{"application/problem+json":{"examples":{"errors.api.insufficientScope":{"summary":"errors.api.insufficientScope","value":{"code":"errors.api.insufficientScope","detail":"This API key does not have the scope appointments:read.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","requiredScope":"appointments:read","status":403,"title":"Forbidden","type":"https://docs.schedulinq.com/en/api/errors#errors.api.insufficientScope"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.insufficientScope"]},
          "404": {"content":{"application/problem+json":{"examples":{"errors.api.appointmentNotFound":{"summary":"errors.api.appointmentNotFound","value":{"code":"errors.api.appointmentNotFound","detail":"This appointment does not exist, or it belongs to another organisation.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":404,"title":"Not Found","type":"https://docs.schedulinq.com/en/api/errors#errors.api.appointmentNotFound"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Found","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.appointmentNotFound"]},
          "429": {"content":{"application/problem+json":{"examples":{"errors.api.rateLimitExceeded":{"summary":"errors.api.rateLimitExceeded","value":{"code":"errors.api.rateLimitExceeded","detail":"Too many requests for this API key. Wait for the number of seconds in Retry-After and try again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.rateLimitExceeded"}},"errors.api.tooManyFailedAuthentications":{"summary":"errors.api.tooManyFailedAuthentications","value":{"code":"errors.api.tooManyFailedAuthentications","detail":"Too many failed authentications from this address. Wait for the number of seconds in Retry-After before trying again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.tooManyFailedAuthentications"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Too Many Requests","headers":{"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.rateLimitExceeded","errors.api.tooManyFailedAuthentications"]},
          "500": {"content":{"application/problem+json":{"examples":{"errors.api.unexpectedError":{"summary":"errors.api.unexpectedError","value":{"code":"errors.api.unexpectedError","detail":"Something went wrong on our side. Try again later; if it keeps happening, contact support with the requestId.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":500,"title":"Internal Server Error","type":"https://docs.schedulinq.com/en/api/errors#errors.api.unexpectedError"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.unexpectedError"]}
        },
        "security": [
          {"apiKey":["appointments:read"]}
        ],
        "summary": "Get an appointment",
        "tags": [
          "Appointments"
        ],
        "x-required-scope": "appointments:read"
      }
    },
    "/api/v1/invitations": {
      "get": {
        "description": "**Scope:** `invitations:read`\n\nThe organisation's invitations carrying every kenmerk asked for, oldest first. A single pass: to reconcile, run the lookup again; follow changes through webhooks.",
        "operationId": "listInvitations",
        "parameters": [
          {"description":"Only invitations in this status.","in":"query","name":"status","schema":{"enum":["PENDING","USED","CANCELLED","EXPIRED"],"type":"string"}},
          {"description":"Kenmerken to look up by, as metadata[<key>]=<value>; at least one, all must match. Brackets may be sent raw or as %5B and %5D.","explode":true,"in":"query","name":"metadata","required":true,"schema":{"additionalProperties":{"$ref":"#/components/schemas/MetadataValue"},"example":{"dealId":"D-123"},"type":"object"},"style":"deepObject"},
          {"description":"How many to return, 1 to 100.","example":25,"in":"query","name":"limit","schema":{"type":"integer"}},
          {"description":"The nextCursor of the previous page.","in":"query","name":"cursor","schema":{"type":"string"}}
        ],
        "responses": {
          "200": {"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationList"}}},"description":"OK","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},
          "400": {"content":{"application/problem+json":{"examples":{"errors.api.invalidParameter":{"summary":"errors.api.invalidParameter","value":{"code":"errors.api.invalidParameter","detail":"A parameter has a value of the wrong type.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.invalidParameter"}},"errors.api.validationFailed":{"summary":"errors.api.validationFailed","value":{"code":"errors.api.validationFailed","detail":"One or more fields are not valid. The errors list names each field.","errors":[{"code":"errors.validation.limitOutOfRange","field":"limit","message":"limit must be a whole number from 1 to 100."}],"requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.validationFailed"}},"errors.validation.cursorInvalid":{"summary":"errors.validation.cursorInvalid","value":{"code":"errors.validation.cursorInvalid","detail":"The cursor is not valid. Use the nextCursor of a previous page as it was given.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.cursorInvalid"}},"errors.validation.invalidValue":{"summary":"errors.validation.invalidValue","value":{"code":"errors.validation.invalidValue","detail":"This value has the wrong type or format.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.invalidValue"}},"errors.validation.limitOutOfRange":{"summary":"errors.validation.limitOutOfRange","value":{"code":"errors.validation.limitOutOfRange","detail":"limit must be a whole number from 1 to 100.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.limitOutOfRange"}},"errors.validation.metadataFilterRequired":{"summary":"errors.validation.metadataFilterRequired","value":{"code":"errors.validation.metadataFilterRequired","detail":"A list needs at least one metadata filter, for example metadata[dealId]=D-123.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.metadataFilterRequired"}},"errors.validation.unknownField":{"summary":"errors.validation.unknownField","value":{"code":"errors.validation.unknownField","detail":"This field does not exist.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.unknownField"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.validationFailed","errors.api.invalidParameter","errors.validation.metadataFilterRequired","errors.validation.unknownField","errors.validation.invalidValue","errors.validation.limitOutOfRange","errors.validation.cursorInvalid"]},
          "401": {"content":{"application/problem+json":{"examples":{"errors.api.apiKeyExpired":{"summary":"errors.api.apiKeyExpired","value":{"code":"errors.api.apiKeyExpired","detail":"This API key has expired. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyExpired"}},"errors.api.apiKeyInvalid":{"summary":"errors.api.apiKeyInvalid","value":{"code":"errors.api.apiKeyInvalid","detail":"The API key is not valid. Check that you copied the whole key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyInvalid"}},"errors.api.apiKeyMissing":{"summary":"errors.api.apiKeyMissing","value":{"code":"errors.api.apiKeyMissing","detail":"Send your API key in the Authorization header: Authorization: Bearer sq_live_...","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyMissing"}},"errors.api.apiKeyRevoked":{"summary":"errors.api.apiKeyRevoked","value":{"code":"errors.api.apiKeyRevoked","detail":"This API key has been revoked. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyRevoked"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.apiKeyMissing","errors.api.apiKeyInvalid","errors.api.apiKeyRevoked","errors.api.apiKeyExpired"]},
          "403": {"content":{"application/problem+json":{"examples":{"errors.api.insufficientScope":{"summary":"errors.api.insufficientScope","value":{"code":"errors.api.insufficientScope","detail":"This API key does not have the scope invitations:read.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","requiredScope":"invitations:read","status":403,"title":"Forbidden","type":"https://docs.schedulinq.com/en/api/errors#errors.api.insufficientScope"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.insufficientScope"]},
          "429": {"content":{"application/problem+json":{"examples":{"errors.api.rateLimitExceeded":{"summary":"errors.api.rateLimitExceeded","value":{"code":"errors.api.rateLimitExceeded","detail":"Too many requests for this API key. Wait for the number of seconds in Retry-After and try again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.rateLimitExceeded"}},"errors.api.tooManyFailedAuthentications":{"summary":"errors.api.tooManyFailedAuthentications","value":{"code":"errors.api.tooManyFailedAuthentications","detail":"Too many failed authentications from this address. Wait for the number of seconds in Retry-After before trying again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.tooManyFailedAuthentications"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Too Many Requests","headers":{"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.rateLimitExceeded","errors.api.tooManyFailedAuthentications"]},
          "500": {"content":{"application/problem+json":{"examples":{"errors.api.unexpectedError":{"summary":"errors.api.unexpectedError","value":{"code":"errors.api.unexpectedError","detail":"Something went wrong on our side. Try again later; if it keeps happening, contact support with the requestId.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":500,"title":"Internal Server Error","type":"https://docs.schedulinq.com/en/api/errors#errors.api.unexpectedError"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.unexpectedError"]}
        },
        "security": [
          {"apiKey":["invitations:read"]}
        ],
        "summary": "List invitations by kenmerken",
        "tags": [
          "Invitations"
        ],
        "x-required-scope": "invitations:read"
      },
      "post": {
        "description": "**Scope:** `invitations:write`\n\nSends 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.",
        "operationId": "createInvitation",
        "parameters": [
          {"description":"A unique value per invitation; a retry with the same value and body answers the first invitation again and sends nothing.","in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string"}}
        ],
        "requestBody": {
          "content": {"application/json":{"examples":{"existingCustomer":{"description":"existingCustomer","summary":"An existing customer by id","value":{"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"}]}},"lead":{"description":"lead","summary":"A customer by e-mail address","value":{"addOns":[{"id":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e02","quantity":1}],"address":{"city":"Amsterdam","country":"NL","line1":"Keizersgracht 100","postalCode":"1015 AA"},"appointmentTypeId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01","customer":{"customerType":"PERSON","email":"jan.jansen@example.com","firstName":"Jan","lastName":"Jansen"},"metadata":{"campaignId":"C-42","dealId":"D-123"},"users":[{"email":"sanne@installatiebedrijf-jansen.example"}]}}},"schema":{"$ref":"#/components/schemas/CreateInvitationRequest"}}},
          "required": true
        },
        "responses": {
          "201": {"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Invitation"}}},"description":"Created","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},
          "400": {"content":{"application/problem+json":{"examples":{"errors.api.idempotencyKeyRequired":{"summary":"errors.api.idempotencyKeyRequired","value":{"code":"errors.api.idempotencyKeyRequired","detail":"Send an Idempotency-Key header with this request, a unique value per operation.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.idempotencyKeyRequired"}},"errors.api.idempotencyKeyTooLong":{"summary":"errors.api.idempotencyKeyTooLong","value":{"code":"errors.api.idempotencyKeyTooLong","detail":"The Idempotency-Key header is longer than 255 characters.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.idempotencyKeyTooLong"}},"errors.api.invalidParameter":{"summary":"errors.api.invalidParameter","value":{"code":"errors.api.invalidParameter","detail":"A parameter has a value of the wrong type.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.invalidParameter"}},"errors.api.validationFailed":{"summary":"errors.api.validationFailed","value":{"code":"errors.api.validationFailed","detail":"One or more fields are not valid. The errors list names each field.","errors":[{"code":"errors.validation.nameRequired","field":"name","message":"A name is required."}],"requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.validationFailed"}},"errors.validation.addOnQuantityInvalid":{"summary":"errors.validation.addOnQuantityInvalid","value":{"code":"errors.validation.addOnQuantityInvalid","detail":"Choose a quantity between 1 and 99 for each add-on.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.addOnQuantityInvalid"}},"errors.validation.addOnRepeated":{"summary":"errors.validation.addOnRepeated","value":{"code":"errors.validation.addOnRepeated","detail":"This add-on is listed more than once.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.addOnRepeated"}},"errors.validation.addressRequired":{"summary":"errors.validation.addressRequired","value":{"code":"errors.validation.addressRequired","detail":"Address is required","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.addressRequired"}},"errors.validation.colleagueIdOrEmail":{"summary":"errors.validation.colleagueIdOrEmail","value":{"code":"errors.validation.colleagueIdOrEmail","detail":"Name the colleague by id or by e-mail address — one of the two.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.colleagueIdOrEmail"}},"errors.validation.colleagueRepeated":{"summary":"errors.validation.colleagueRepeated","value":{"code":"errors.validation.colleagueRepeated","detail":"This colleague is listed more than once.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.colleagueRepeated"}},"errors.validation.companyNameRequired":{"summary":"errors.validation.companyNameRequired","value":{"code":"errors.validation.companyNameRequired","detail":"Company name is required","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.companyNameRequired"}},"errors.validation.customerIdOrDetails":{"summary":"errors.validation.customerIdOrDetails","value":{"code":"errors.validation.customerIdOrDetails","detail":"Name the customer by id alone, or by its details — not both.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.customerIdOrDetails"}},"errors.validation.emailRequired":{"summary":"errors.validation.emailRequired","value":{"code":"errors.validation.emailRequired","detail":"Email is required","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.emailRequired"}},"errors.validation.invitationValidUntilInPast":{"summary":"errors.validation.invitationValidUntilInPast","value":{"code":"errors.validation.invitationValidUntilInPast","detail":"The expiry date cannot be in the past.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.invitationValidUntilInPast"}},"errors.validation.invitationValidUntilTooFar":{"summary":"errors.validation.invitationValidUntilTooFar","value":{"code":"errors.validation.invitationValidUntilTooFar","detail":"The expiry date can be at most ten years ahead.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.invitationValidUntilTooFar"}},"errors.validation.lastNameRequired":{"summary":"errors.validation.lastNameRequired","value":{"code":"errors.validation.lastNameRequired","detail":"Last name is required","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.lastNameRequired"}},"errors.validation.metadataValueInvalid":{"summary":"errors.validation.metadataValueInvalid","value":{"code":"errors.validation.metadataValueInvalid","detail":"A metadata value is a string on one line.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.metadataValueInvalid"}},"errors.validation.phoneInvalid":{"summary":"errors.validation.phoneInvalid","value":{"code":"errors.validation.phoneInvalid","detail":"Invalid phone number","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.phoneInvalid"}},"errors.validation.userRequired":{"summary":"errors.validation.userRequired","value":{"code":"errors.validation.userRequired","detail":"Name at least one colleague.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.userRequired"}},"errors.validation.usersOutOfRange":{"summary":"errors.validation.usersOutOfRange","value":{"code":"errors.validation.usersOutOfRange","detail":"users names 1 to 100 colleagues.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.usersOutOfRange"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.validationFailed","errors.api.invalidParameter","errors.api.idempotencyKeyRequired","errors.api.idempotencyKeyTooLong","errors.validation.userRequired","errors.validation.usersOutOfRange","errors.validation.colleagueIdOrEmail","errors.validation.colleagueRepeated","errors.validation.customerIdOrDetails","errors.validation.emailRequired","errors.validation.addressRequired","errors.validation.phoneInvalid","errors.validation.lastNameRequired","errors.validation.companyNameRequired","errors.validation.invitationValidUntilInPast","errors.validation.invitationValidUntilTooFar","errors.validation.addOnRepeated","errors.validation.addOnQuantityInvalid","errors.validation.metadataValueInvalid"]},
          "401": {"content":{"application/problem+json":{"examples":{"errors.api.apiKeyExpired":{"summary":"errors.api.apiKeyExpired","value":{"code":"errors.api.apiKeyExpired","detail":"This API key has expired. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyExpired"}},"errors.api.apiKeyInvalid":{"summary":"errors.api.apiKeyInvalid","value":{"code":"errors.api.apiKeyInvalid","detail":"The API key is not valid. Check that you copied the whole key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyInvalid"}},"errors.api.apiKeyMissing":{"summary":"errors.api.apiKeyMissing","value":{"code":"errors.api.apiKeyMissing","detail":"Send your API key in the Authorization header: Authorization: Bearer sq_live_...","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyMissing"}},"errors.api.apiKeyRevoked":{"summary":"errors.api.apiKeyRevoked","value":{"code":"errors.api.apiKeyRevoked","detail":"This API key has been revoked. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyRevoked"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.apiKeyMissing","errors.api.apiKeyInvalid","errors.api.apiKeyRevoked","errors.api.apiKeyExpired"]},
          "403": {"content":{"application/problem+json":{"examples":{"errors.api.insufficientScope":{"summary":"errors.api.insufficientScope","value":{"code":"errors.api.insufficientScope","detail":"This API key does not have the scope invitations:write.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","requiredScope":"invitations:write","status":403,"title":"Forbidden","type":"https://docs.schedulinq.com/en/api/errors#errors.api.insufficientScope"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.insufficientScope"]},
          "404": {"content":{"application/problem+json":{"examples":{"errors.api.colleagueNotFound":{"summary":"errors.api.colleagueNotFound","value":{"code":"errors.api.colleagueNotFound","detail":"No colleague of this organisation has this id or e-mail address.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":404,"title":"Not Found","type":"https://docs.schedulinq.com/en/api/errors#errors.api.colleagueNotFound"}},"errors.api.customerNotFound":{"summary":"errors.api.customerNotFound","value":{"code":"errors.api.customerNotFound","detail":"No customer of this organisation has this id.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":404,"title":"Not Found","type":"https://docs.schedulinq.com/en/api/errors#errors.api.customerNotFound"}},"errors.api.serviceNotFound":{"summary":"errors.api.serviceNotFound","value":{"code":"errors.api.serviceNotFound","detail":"This service does not exist, or it is archived.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":404,"title":"Not Found","type":"https://docs.schedulinq.com/en/api/errors#errors.api.serviceNotFound"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Found","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.colleagueNotFound","errors.api.serviceNotFound","errors.api.customerNotFound"]},
          "409": {"content":{"application/problem+json":{"examples":{"errors.api.colleagueNotActive":{"summary":"errors.api.colleagueNotActive","value":{"code":"errors.api.colleagueNotActive","detail":"This colleague can't be booked: they have not accepted their invitation yet, or they are deactivated, archived or not schedulable.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":409,"title":"Conflict","type":"https://docs.schedulinq.com/en/api/errors#errors.api.colleagueNotActive"}},"errors.api.customerDeactivated":{"summary":"errors.api.customerDeactivated","value":{"code":"errors.api.customerDeactivated","detail":"This customer is deactivated and can't book online. Reactivate them in Schedulinq first.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":409,"title":"Conflict","type":"https://docs.schedulinq.com/en/api/errors#errors.api.customerDeactivated"}},"errors.api.duplicateRequestInProgress":{"summary":"errors.api.duplicateRequestInProgress","value":{"code":"errors.api.duplicateRequestInProgress","detail":"A request with this Idempotency-Key is still being processed. Try again in a moment.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":409,"title":"Conflict","type":"https://docs.schedulinq.com/en/api/errors#errors.api.duplicateRequestInProgress"}},"errors.api.organisationScheduledForDeletion":{"summary":"errors.api.organisationScheduledForDeletion","value":{"code":"errors.api.organisationScheduledForDeletion","detail":"This organisation is scheduled for deletion and accepts no changes.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":409,"title":"Conflict","type":"https://docs.schedulinq.com/en/api/errors#errors.api.organisationScheduledForDeletion"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Conflict","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.duplicateRequestInProgress","errors.api.colleagueNotActive","errors.api.customerDeactivated","errors.api.organisationScheduledForDeletion"]},
          "422": {"content":{"application/problem+json":{"examples":{"errors.api.idempotencyKeyReused":{"summary":"errors.api.idempotencyKeyReused","value":{"code":"errors.api.idempotencyKeyReused","detail":"This Idempotency-Key was already used for a different request. Use a new key for a new request.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":422,"title":"Unprocessable Content","type":"https://docs.schedulinq.com/en/api/errors#errors.api.idempotencyKeyReused"}},"errors.validation.addOnNotOffered":{"summary":"errors.validation.addOnNotOffered","value":{"code":"errors.validation.addOnNotOffered","detail":"This add-on does not exist, or it is not offered with this service.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":422,"title":"Unprocessable Content","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.addOnNotOffered"}},"errors.validation.addOnQuantityNotAllowed":{"summary":"errors.validation.addOnQuantityNotAllowed","value":{"code":"errors.validation.addOnQuantityNotAllowed","detail":"This add-on can only be booked once per appointment.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":422,"title":"Unprocessable Content","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.addOnQuantityNotAllowed"}},"errors.validation.serviceHasNoDuration":{"summary":"errors.validation.serviceHasNoDuration","value":{"code":"errors.validation.serviceHasNoDuration","detail":"This service has no duration of its own. Give it one in Schedulinq, or add an add-on with a duration.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":422,"title":"Unprocessable Content","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.serviceHasNoDuration"}},"errors.validation.userCannotDoEveryService":{"summary":"errors.validation.userCannotDoEveryService","value":{"code":"errors.validation.userCannotDoEveryService","detail":"This colleague does not do this service (or one of its add-ons).","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":422,"title":"Unprocessable Content","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.userCannotDoEveryService"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unprocessable Content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.idempotencyKeyReused","errors.validation.userCannotDoEveryService","errors.validation.addOnNotOffered","errors.validation.addOnQuantityNotAllowed","errors.validation.serviceHasNoDuration"]},
          "429": {"content":{"application/problem+json":{"examples":{"errors.api.customerInvitationLimit":{"summary":"errors.api.customerInvitationLimit","value":{"code":"errors.api.customerInvitationLimit","detail":"This customer has received the maximum number of invitations through the API for now. Try again later.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.customerInvitationLimit"}},"errors.api.rateLimitExceeded":{"summary":"errors.api.rateLimitExceeded","value":{"code":"errors.api.rateLimitExceeded","detail":"Too many requests for this API key. Wait for the number of seconds in Retry-After and try again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.rateLimitExceeded"}},"errors.api.tooManyFailedAuthentications":{"summary":"errors.api.tooManyFailedAuthentications","value":{"code":"errors.api.tooManyFailedAuthentications","detail":"Too many failed authentications from this address. Wait for the number of seconds in Retry-After before trying again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.tooManyFailedAuthentications"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Too Many Requests","headers":{"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.rateLimitExceeded","errors.api.tooManyFailedAuthentications","errors.api.customerInvitationLimit"]},
          "500": {"content":{"application/problem+json":{"examples":{"errors.api.unexpectedError":{"summary":"errors.api.unexpectedError","value":{"code":"errors.api.unexpectedError","detail":"Something went wrong on our side. Try again later; if it keeps happening, contact support with the requestId.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":500,"title":"Internal Server Error","type":"https://docs.schedulinq.com/en/api/errors#errors.api.unexpectedError"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.unexpectedError"]}
        },
        "security": [
          {"apiKey":["invitations:write"]}
        ],
        "summary": "Send an invitation",
        "tags": [
          "Invitations"
        ],
        "x-required-scope": "invitations:write"
      }
    },
    "/api/v1/invitations/{id}": {
      "get": {
        "description": "**Scope:** `invitations:read`\n\nOne invitation of the organisation, with the appointments booked from it.",
        "operationId": "getInvitation",
        "parameters": [
          {"description":"The invitation's id.","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e08","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}
        ],
        "responses": {
          "200": {"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Invitation"}}},"description":"OK","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},
          "401": {"content":{"application/problem+json":{"examples":{"errors.api.apiKeyExpired":{"summary":"errors.api.apiKeyExpired","value":{"code":"errors.api.apiKeyExpired","detail":"This API key has expired. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyExpired"}},"errors.api.apiKeyInvalid":{"summary":"errors.api.apiKeyInvalid","value":{"code":"errors.api.apiKeyInvalid","detail":"The API key is not valid. Check that you copied the whole key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyInvalid"}},"errors.api.apiKeyMissing":{"summary":"errors.api.apiKeyMissing","value":{"code":"errors.api.apiKeyMissing","detail":"Send your API key in the Authorization header: Authorization: Bearer sq_live_...","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyMissing"}},"errors.api.apiKeyRevoked":{"summary":"errors.api.apiKeyRevoked","value":{"code":"errors.api.apiKeyRevoked","detail":"This API key has been revoked. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyRevoked"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.apiKeyMissing","errors.api.apiKeyInvalid","errors.api.apiKeyRevoked","errors.api.apiKeyExpired"]},
          "403": {"content":{"application/problem+json":{"examples":{"errors.api.insufficientScope":{"summary":"errors.api.insufficientScope","value":{"code":"errors.api.insufficientScope","detail":"This API key does not have the scope invitations:read.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","requiredScope":"invitations:read","status":403,"title":"Forbidden","type":"https://docs.schedulinq.com/en/api/errors#errors.api.insufficientScope"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.insufficientScope"]},
          "404": {"content":{"application/problem+json":{"examples":{"errors.api.invitationNotFound":{"summary":"errors.api.invitationNotFound","value":{"code":"errors.api.invitationNotFound","detail":"This invitation could not be found.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":404,"title":"Not Found","type":"https://docs.schedulinq.com/en/api/errors#errors.api.invitationNotFound"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Found","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.invitationNotFound"]},
          "429": {"content":{"application/problem+json":{"examples":{"errors.api.rateLimitExceeded":{"summary":"errors.api.rateLimitExceeded","value":{"code":"errors.api.rateLimitExceeded","detail":"Too many requests for this API key. Wait for the number of seconds in Retry-After and try again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.rateLimitExceeded"}},"errors.api.tooManyFailedAuthentications":{"summary":"errors.api.tooManyFailedAuthentications","value":{"code":"errors.api.tooManyFailedAuthentications","detail":"Too many failed authentications from this address. Wait for the number of seconds in Retry-After before trying again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.tooManyFailedAuthentications"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Too Many Requests","headers":{"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.rateLimitExceeded","errors.api.tooManyFailedAuthentications"]},
          "500": {"content":{"application/problem+json":{"examples":{"errors.api.unexpectedError":{"summary":"errors.api.unexpectedError","value":{"code":"errors.api.unexpectedError","detail":"Something went wrong on our side. Try again later; if it keeps happening, contact support with the requestId.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":500,"title":"Internal Server Error","type":"https://docs.schedulinq.com/en/api/errors#errors.api.unexpectedError"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.unexpectedError"]}
        },
        "security": [
          {"apiKey":["invitations:read"]}
        ],
        "summary": "Get an invitation",
        "tags": [
          "Invitations"
        ],
        "x-required-scope": "invitations:read"
      }
    },
    "/api/v1/planning-links": {
      "post": {
        "description": "**Scope:** `planning_links:write`\n\nA 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.",
        "operationId": "createPlanningLink",
        "parameters": [
          {"description":"A unique value per planning link; a retry with the same value and body answers the first link again.","in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string"}}
        ],
        "requestBody": {
          "content": {"application/json":{"examples":{"existingCustomer":{"description":"existingCustomer","summary":"An existing customer by id, every colleague who does the service","value":{"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"}},"lead":{"description":"lead","summary":"A colleague and a customer by e-mail address","value":{"address":{"city":"Amsterdam","country":"NL","line1":"Keizersgracht 100","postalCode":"1015 AA"},"appointmentTypeId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01","customer":{"customerType":"PERSON","email":"jan.jansen@example.com","firstName":"Jan","lastName":"Jansen"},"metadata":{"campaignId":"C-42","dealId":"D-123"},"returnUrl":"https://crm.example.com/deals/D-123","user":{"email":"sanne@installatiebedrijf-jansen.example"}}}},"schema":{"$ref":"#/components/schemas/CreatePlanningLinkRequest"}}},
          "required": true
        },
        "responses": {
          "201": {"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanningLink"}}},"description":"Created","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},
          "400": {"content":{"application/problem+json":{"examples":{"errors.api.idempotencyKeyRequired":{"summary":"errors.api.idempotencyKeyRequired","value":{"code":"errors.api.idempotencyKeyRequired","detail":"Send an Idempotency-Key header with this request, a unique value per operation.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.idempotencyKeyRequired"}},"errors.api.idempotencyKeyTooLong":{"summary":"errors.api.idempotencyKeyTooLong","value":{"code":"errors.api.idempotencyKeyTooLong","detail":"The Idempotency-Key header is longer than 255 characters.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.idempotencyKeyTooLong"}},"errors.api.invalidParameter":{"summary":"errors.api.invalidParameter","value":{"code":"errors.api.invalidParameter","detail":"A parameter has a value of the wrong type.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.invalidParameter"}},"errors.api.validationFailed":{"summary":"errors.api.validationFailed","value":{"code":"errors.api.validationFailed","detail":"One or more fields are not valid. The errors list names each field.","errors":[{"code":"errors.validation.nameRequired","field":"name","message":"A name is required."}],"requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.validationFailed"}},"errors.validation.addressRequired":{"summary":"errors.validation.addressRequired","value":{"code":"errors.validation.addressRequired","detail":"Address is required","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.addressRequired"}},"errors.validation.colleagueIdOrEmail":{"summary":"errors.validation.colleagueIdOrEmail","value":{"code":"errors.validation.colleagueIdOrEmail","detail":"Name the colleague by id or by e-mail address — one of the two.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.colleagueIdOrEmail"}},"errors.validation.companyNameRequired":{"summary":"errors.validation.companyNameRequired","value":{"code":"errors.validation.companyNameRequired","detail":"Company name is required","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.companyNameRequired"}},"errors.validation.customerIdOrDetails":{"summary":"errors.validation.customerIdOrDetails","value":{"code":"errors.validation.customerIdOrDetails","detail":"Name the customer by id alone, or by its details — not both.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.customerIdOrDetails"}},"errors.validation.emailRequired":{"summary":"errors.validation.emailRequired","value":{"code":"errors.validation.emailRequired","detail":"Email is required","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.emailRequired"}},"errors.validation.lastNameRequired":{"summary":"errors.validation.lastNameRequired","value":{"code":"errors.validation.lastNameRequired","detail":"Last name is required","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.lastNameRequired"}},"errors.validation.metadataValueInvalid":{"summary":"errors.validation.metadataValueInvalid","value":{"code":"errors.validation.metadataValueInvalid","detail":"A metadata value is a string on one line.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.metadataValueInvalid"}},"errors.validation.phoneInvalid":{"summary":"errors.validation.phoneInvalid","value":{"code":"errors.validation.phoneInvalid","detail":"Invalid phone number","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.phoneInvalid"}},"errors.validation.redirectUrlInvalid":{"summary":"errors.validation.redirectUrlInvalid","value":{"code":"errors.validation.redirectUrlInvalid","detail":"Enter a full web address starting with https://","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.redirectUrlInvalid"}},"errors.validation.redirectUrlTooLong":{"summary":"errors.validation.redirectUrlTooLong","value":{"code":"errors.validation.redirectUrlTooLong","detail":"The web address must not exceed 2048 characters","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.redirectUrlTooLong"}},"errors.validation.returnUrlOriginNotAllowed":{"summary":"errors.validation.returnUrlOriginNotAllowed","value":{"code":"errors.validation.returnUrlOriginNotAllowed","detail":"This return address is not on the organisation's list of allowed return addresses (Integrations → API).","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.returnUrlOriginNotAllowed"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.validationFailed","errors.api.invalidParameter","errors.api.idempotencyKeyRequired","errors.api.idempotencyKeyTooLong","errors.validation.colleagueIdOrEmail","errors.validation.customerIdOrDetails","errors.validation.emailRequired","errors.validation.redirectUrlInvalid","errors.validation.redirectUrlTooLong","errors.validation.returnUrlOriginNotAllowed","errors.validation.addressRequired","errors.validation.phoneInvalid","errors.validation.lastNameRequired","errors.validation.companyNameRequired","errors.validation.metadataValueInvalid"]},
          "401": {"content":{"application/problem+json":{"examples":{"errors.api.apiKeyExpired":{"summary":"errors.api.apiKeyExpired","value":{"code":"errors.api.apiKeyExpired","detail":"This API key has expired. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyExpired"}},"errors.api.apiKeyInvalid":{"summary":"errors.api.apiKeyInvalid","value":{"code":"errors.api.apiKeyInvalid","detail":"The API key is not valid. Check that you copied the whole key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyInvalid"}},"errors.api.apiKeyMissing":{"summary":"errors.api.apiKeyMissing","value":{"code":"errors.api.apiKeyMissing","detail":"Send your API key in the Authorization header: Authorization: Bearer sq_live_...","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyMissing"}},"errors.api.apiKeyRevoked":{"summary":"errors.api.apiKeyRevoked","value":{"code":"errors.api.apiKeyRevoked","detail":"This API key has been revoked. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyRevoked"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.apiKeyMissing","errors.api.apiKeyInvalid","errors.api.apiKeyRevoked","errors.api.apiKeyExpired"]},
          "403": {"content":{"application/problem+json":{"examples":{"errors.api.insufficientScope":{"summary":"errors.api.insufficientScope","value":{"code":"errors.api.insufficientScope","detail":"This API key does not have the scope planning_links:write.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","requiredScope":"planning_links:write","status":403,"title":"Forbidden","type":"https://docs.schedulinq.com/en/api/errors#errors.api.insufficientScope"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.insufficientScope"]},
          "404": {"content":{"application/problem+json":{"examples":{"errors.api.colleagueNotFound":{"summary":"errors.api.colleagueNotFound","value":{"code":"errors.api.colleagueNotFound","detail":"No colleague of this organisation has this id or e-mail address.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":404,"title":"Not Found","type":"https://docs.schedulinq.com/en/api/errors#errors.api.colleagueNotFound"}},"errors.api.customerNotFound":{"summary":"errors.api.customerNotFound","value":{"code":"errors.api.customerNotFound","detail":"No customer of this organisation has this id.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":404,"title":"Not Found","type":"https://docs.schedulinq.com/en/api/errors#errors.api.customerNotFound"}},"errors.api.serviceNotFound":{"summary":"errors.api.serviceNotFound","value":{"code":"errors.api.serviceNotFound","detail":"This service does not exist, or it is archived.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":404,"title":"Not Found","type":"https://docs.schedulinq.com/en/api/errors#errors.api.serviceNotFound"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Found","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.colleagueNotFound","errors.api.serviceNotFound","errors.api.customerNotFound"]},
          "409": {"content":{"application/problem+json":{"examples":{"errors.api.colleagueNotActive":{"summary":"errors.api.colleagueNotActive","value":{"code":"errors.api.colleagueNotActive","detail":"This colleague can't be booked: they have not accepted their invitation yet, or they are deactivated, archived or not schedulable.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":409,"title":"Conflict","type":"https://docs.schedulinq.com/en/api/errors#errors.api.colleagueNotActive"}},"errors.api.duplicateRequestInProgress":{"summary":"errors.api.duplicateRequestInProgress","value":{"code":"errors.api.duplicateRequestInProgress","detail":"A request with this Idempotency-Key is still being processed. Try again in a moment.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":409,"title":"Conflict","type":"https://docs.schedulinq.com/en/api/errors#errors.api.duplicateRequestInProgress"}},"errors.api.organisationScheduledForDeletion":{"summary":"errors.api.organisationScheduledForDeletion","value":{"code":"errors.api.organisationScheduledForDeletion","detail":"This organisation is scheduled for deletion and accepts no changes.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":409,"title":"Conflict","type":"https://docs.schedulinq.com/en/api/errors#errors.api.organisationScheduledForDeletion"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Conflict","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.duplicateRequestInProgress","errors.api.colleagueNotActive","errors.api.organisationScheduledForDeletion"]},
          "422": {"content":{"application/problem+json":{"examples":{"errors.api.idempotencyKeyReused":{"summary":"errors.api.idempotencyKeyReused","value":{"code":"errors.api.idempotencyKeyReused","detail":"This Idempotency-Key was already used for a different request. Use a new key for a new request.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":422,"title":"Unprocessable Content","type":"https://docs.schedulinq.com/en/api/errors#errors.api.idempotencyKeyReused"}},"errors.validation.userCannotDoEveryService":{"summary":"errors.validation.userCannotDoEveryService","value":{"code":"errors.validation.userCannotDoEveryService","detail":"This colleague does not do this service (or one of its add-ons).","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":422,"title":"Unprocessable Content","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.userCannotDoEveryService"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unprocessable Content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.idempotencyKeyReused","errors.validation.userCannotDoEveryService"]},
          "429": {"content":{"application/problem+json":{"examples":{"errors.api.rateLimitExceeded":{"summary":"errors.api.rateLimitExceeded","value":{"code":"errors.api.rateLimitExceeded","detail":"Too many requests for this API key. Wait for the number of seconds in Retry-After and try again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.rateLimitExceeded"}},"errors.api.tooManyFailedAuthentications":{"summary":"errors.api.tooManyFailedAuthentications","value":{"code":"errors.api.tooManyFailedAuthentications","detail":"Too many failed authentications from this address. Wait for the number of seconds in Retry-After before trying again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.tooManyFailedAuthentications"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Too Many Requests","headers":{"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.rateLimitExceeded","errors.api.tooManyFailedAuthentications"]},
          "500": {"content":{"application/problem+json":{"examples":{"errors.api.unexpectedError":{"summary":"errors.api.unexpectedError","value":{"code":"errors.api.unexpectedError","detail":"Something went wrong on our side. Try again later; if it keeps happening, contact support with the requestId.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":500,"title":"Internal Server Error","type":"https://docs.schedulinq.com/en/api/errors#errors.api.unexpectedError"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.unexpectedError"]}
        },
        "security": [
          {"apiKey":["planning_links:write"]}
        ],
        "summary": "Create a planning link",
        "tags": [
          "Planning links"
        ],
        "x-required-scope": "planning_links:write"
      }
    },
    "/api/v1/roles": {
      "get": {
        "description": "**Scope:** `users:write`\n\nThe roles this API key may assign, oldest first. A role deleted since the key was made is left out.",
        "operationId": "listRoles",
        "parameters": [
          {"description":"How many to return, 1 to 100.","example":25,"in":"query","name":"limit","required":false,"schema":{"format":"int32","type":"integer"}},
          {"description":"The nextCursor of the previous page.","in":"query","name":"cursor","required":false,"schema":{"type":"string"}}
        ],
        "responses": {
          "200": {"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleList"}}},"description":"OK","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},
          "400": {"content":{"application/problem+json":{"examples":{"errors.api.invalidParameter":{"summary":"errors.api.invalidParameter","value":{"code":"errors.api.invalidParameter","detail":"A parameter has a value of the wrong type.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.invalidParameter"}},"errors.api.validationFailed":{"summary":"errors.api.validationFailed","value":{"code":"errors.api.validationFailed","detail":"One or more fields are not valid. The errors list names each field.","errors":[{"code":"errors.validation.limitOutOfRange","field":"limit","message":"limit must be a whole number from 1 to 100."}],"requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.validationFailed"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.validationFailed","errors.api.invalidParameter"]},
          "401": {"content":{"application/problem+json":{"examples":{"errors.api.apiKeyExpired":{"summary":"errors.api.apiKeyExpired","value":{"code":"errors.api.apiKeyExpired","detail":"This API key has expired. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyExpired"}},"errors.api.apiKeyInvalid":{"summary":"errors.api.apiKeyInvalid","value":{"code":"errors.api.apiKeyInvalid","detail":"The API key is not valid. Check that you copied the whole key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyInvalid"}},"errors.api.apiKeyMissing":{"summary":"errors.api.apiKeyMissing","value":{"code":"errors.api.apiKeyMissing","detail":"Send your API key in the Authorization header: Authorization: Bearer sq_live_...","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyMissing"}},"errors.api.apiKeyRevoked":{"summary":"errors.api.apiKeyRevoked","value":{"code":"errors.api.apiKeyRevoked","detail":"This API key has been revoked. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyRevoked"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.apiKeyMissing","errors.api.apiKeyInvalid","errors.api.apiKeyRevoked","errors.api.apiKeyExpired"]},
          "403": {"content":{"application/problem+json":{"examples":{"errors.api.insufficientScope":{"summary":"errors.api.insufficientScope","value":{"code":"errors.api.insufficientScope","detail":"This API key does not have the scope users:write.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","requiredScope":"users:write","status":403,"title":"Forbidden","type":"https://docs.schedulinq.com/en/api/errors#errors.api.insufficientScope"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.insufficientScope"]},
          "429": {"content":{"application/problem+json":{"examples":{"errors.api.rateLimitExceeded":{"summary":"errors.api.rateLimitExceeded","value":{"code":"errors.api.rateLimitExceeded","detail":"Too many requests for this API key. Wait for the number of seconds in Retry-After and try again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.rateLimitExceeded"}},"errors.api.tooManyFailedAuthentications":{"summary":"errors.api.tooManyFailedAuthentications","value":{"code":"errors.api.tooManyFailedAuthentications","detail":"Too many failed authentications from this address. Wait for the number of seconds in Retry-After before trying again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.tooManyFailedAuthentications"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Too Many Requests","headers":{"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.rateLimitExceeded","errors.api.tooManyFailedAuthentications"]},
          "500": {"content":{"application/problem+json":{"examples":{"errors.api.unexpectedError":{"summary":"errors.api.unexpectedError","value":{"code":"errors.api.unexpectedError","detail":"Something went wrong on our side. Try again later; if it keeps happening, contact support with the requestId.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":500,"title":"Internal Server Error","type":"https://docs.schedulinq.com/en/api/errors#errors.api.unexpectedError"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.unexpectedError"]}
        },
        "security": [
          {"apiKey":["users:write"]}
        ],
        "summary": "List assignable roles",
        "tags": [
          "Roles"
        ],
        "x-required-scope": "users:write"
      }
    },
    "/api/v1/services": {
      "get": {
        "description": "**Scope:** `services:read`\n\nThe organisation's services, oldest first. Archived services are left out.",
        "operationId": "listServices",
        "parameters": [
          {"description":"How many to return, 1 to 100.","example":25,"in":"query","name":"limit","required":false,"schema":{"format":"int32","type":"integer"}},
          {"description":"The nextCursor of the previous page.","in":"query","name":"cursor","required":false,"schema":{"type":"string"}}
        ],
        "responses": {
          "200": {"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceList"}}},"description":"OK","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},
          "400": {"content":{"application/problem+json":{"examples":{"errors.api.invalidParameter":{"summary":"errors.api.invalidParameter","value":{"code":"errors.api.invalidParameter","detail":"A parameter has a value of the wrong type.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.invalidParameter"}},"errors.api.validationFailed":{"summary":"errors.api.validationFailed","value":{"code":"errors.api.validationFailed","detail":"One or more fields are not valid. The errors list names each field.","errors":[{"code":"errors.validation.limitOutOfRange","field":"limit","message":"limit must be a whole number from 1 to 100."}],"requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.validationFailed"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.validationFailed","errors.api.invalidParameter"]},
          "401": {"content":{"application/problem+json":{"examples":{"errors.api.apiKeyExpired":{"summary":"errors.api.apiKeyExpired","value":{"code":"errors.api.apiKeyExpired","detail":"This API key has expired. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyExpired"}},"errors.api.apiKeyInvalid":{"summary":"errors.api.apiKeyInvalid","value":{"code":"errors.api.apiKeyInvalid","detail":"The API key is not valid. Check that you copied the whole key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyInvalid"}},"errors.api.apiKeyMissing":{"summary":"errors.api.apiKeyMissing","value":{"code":"errors.api.apiKeyMissing","detail":"Send your API key in the Authorization header: Authorization: Bearer sq_live_...","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyMissing"}},"errors.api.apiKeyRevoked":{"summary":"errors.api.apiKeyRevoked","value":{"code":"errors.api.apiKeyRevoked","detail":"This API key has been revoked. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyRevoked"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.apiKeyMissing","errors.api.apiKeyInvalid","errors.api.apiKeyRevoked","errors.api.apiKeyExpired"]},
          "403": {"content":{"application/problem+json":{"examples":{"errors.api.insufficientScope":{"summary":"errors.api.insufficientScope","value":{"code":"errors.api.insufficientScope","detail":"This API key does not have the scope services:read.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","requiredScope":"services:read","status":403,"title":"Forbidden","type":"https://docs.schedulinq.com/en/api/errors#errors.api.insufficientScope"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.insufficientScope"]},
          "429": {"content":{"application/problem+json":{"examples":{"errors.api.rateLimitExceeded":{"summary":"errors.api.rateLimitExceeded","value":{"code":"errors.api.rateLimitExceeded","detail":"Too many requests for this API key. Wait for the number of seconds in Retry-After and try again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.rateLimitExceeded"}},"errors.api.tooManyFailedAuthentications":{"summary":"errors.api.tooManyFailedAuthentications","value":{"code":"errors.api.tooManyFailedAuthentications","detail":"Too many failed authentications from this address. Wait for the number of seconds in Retry-After before trying again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.tooManyFailedAuthentications"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Too Many Requests","headers":{"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.rateLimitExceeded","errors.api.tooManyFailedAuthentications"]},
          "500": {"content":{"application/problem+json":{"examples":{"errors.api.unexpectedError":{"summary":"errors.api.unexpectedError","value":{"code":"errors.api.unexpectedError","detail":"Something went wrong on our side. Try again later; if it keeps happening, contact support with the requestId.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":500,"title":"Internal Server Error","type":"https://docs.schedulinq.com/en/api/errors#errors.api.unexpectedError"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.unexpectedError"]}
        },
        "security": [
          {"apiKey":["services:read"]}
        ],
        "summary": "List services",
        "tags": [
          "Services"
        ],
        "x-required-scope": "services:read"
      }
    },
    "/api/v1/users": {
      "get": {
        "description": "**Scope:** `users:read`\n\nThe organisation's colleagues (active and switched off) and its open invitations, oldest first. Archived colleagues and expired, accepted or withdrawn invitations are left out.",
        "operationId": "listUsers",
        "parameters": [
          {"description":"How many to return, 1 to 100.","example":25,"in":"query","name":"limit","required":false,"schema":{"format":"int32","type":"integer"}},
          {"description":"The nextCursor of the previous page.","in":"query","name":"cursor","required":false,"schema":{"type":"string"}}
        ],
        "responses": {
          "200": {"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserList"}}},"description":"OK","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},
          "400": {"content":{"application/problem+json":{"examples":{"errors.api.invalidParameter":{"summary":"errors.api.invalidParameter","value":{"code":"errors.api.invalidParameter","detail":"A parameter has a value of the wrong type.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.invalidParameter"}},"errors.api.validationFailed":{"summary":"errors.api.validationFailed","value":{"code":"errors.api.validationFailed","detail":"One or more fields are not valid. The errors list names each field.","errors":[{"code":"errors.validation.limitOutOfRange","field":"limit","message":"limit must be a whole number from 1 to 100."}],"requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.validationFailed"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.validationFailed","errors.api.invalidParameter"]},
          "401": {"content":{"application/problem+json":{"examples":{"errors.api.apiKeyExpired":{"summary":"errors.api.apiKeyExpired","value":{"code":"errors.api.apiKeyExpired","detail":"This API key has expired. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyExpired"}},"errors.api.apiKeyInvalid":{"summary":"errors.api.apiKeyInvalid","value":{"code":"errors.api.apiKeyInvalid","detail":"The API key is not valid. Check that you copied the whole key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyInvalid"}},"errors.api.apiKeyMissing":{"summary":"errors.api.apiKeyMissing","value":{"code":"errors.api.apiKeyMissing","detail":"Send your API key in the Authorization header: Authorization: Bearer sq_live_...","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyMissing"}},"errors.api.apiKeyRevoked":{"summary":"errors.api.apiKeyRevoked","value":{"code":"errors.api.apiKeyRevoked","detail":"This API key has been revoked. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyRevoked"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.apiKeyMissing","errors.api.apiKeyInvalid","errors.api.apiKeyRevoked","errors.api.apiKeyExpired"]},
          "403": {"content":{"application/problem+json":{"examples":{"errors.api.insufficientScope":{"summary":"errors.api.insufficientScope","value":{"code":"errors.api.insufficientScope","detail":"This API key does not have the scope users:read.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","requiredScope":"users:read","status":403,"title":"Forbidden","type":"https://docs.schedulinq.com/en/api/errors#errors.api.insufficientScope"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.insufficientScope"]},
          "429": {"content":{"application/problem+json":{"examples":{"errors.api.rateLimitExceeded":{"summary":"errors.api.rateLimitExceeded","value":{"code":"errors.api.rateLimitExceeded","detail":"Too many requests for this API key. Wait for the number of seconds in Retry-After and try again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.rateLimitExceeded"}},"errors.api.tooManyFailedAuthentications":{"summary":"errors.api.tooManyFailedAuthentications","value":{"code":"errors.api.tooManyFailedAuthentications","detail":"Too many failed authentications from this address. Wait for the number of seconds in Retry-After before trying again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.tooManyFailedAuthentications"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Too Many Requests","headers":{"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.rateLimitExceeded","errors.api.tooManyFailedAuthentications"]},
          "500": {"content":{"application/problem+json":{"examples":{"errors.api.unexpectedError":{"summary":"errors.api.unexpectedError","value":{"code":"errors.api.unexpectedError","detail":"Something went wrong on our side. Try again later; if it keeps happening, contact support with the requestId.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":500,"title":"Internal Server Error","type":"https://docs.schedulinq.com/en/api/errors#errors.api.unexpectedError"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.unexpectedError"]}
        },
        "security": [
          {"apiKey":["users:read"]}
        ],
        "summary": "List colleagues",
        "tags": [
          "Users"
        ],
        "x-required-scope": "users:read"
      },
      "post": {
        "description": "**Scope:** `users:write`\n\nInvites 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.",
        "operationId": "createUser",
        "parameters": [
          {"description":"A unique value per user action; a retry with the same value and body answers the first call again and sends nothing.","in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string"}}
        ],
        "requestBody": {
          "content": {"application/json":{"examples":{"colleague":{"description":"colleague","value":{"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"}}},"schema":{"$ref":"#/components/schemas/NewUser"}}},
          "required": true
        },
        "responses": {
          "200": {"content":{"application/json":{"examples":{"active":{"description":"active","value":{"email":"sanne@installatiebedrijf-jansen.example","id":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e03","status":"ACTIVE"}},"invited":{"description":"invited","value":{"email":"piet+ov@loodgieter-bakker.example","invitationExpiresAt":"2026-10-08T09:12:00Z","invitationId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e05","status":"INVITED"}}},"schema":{"$ref":"#/components/schemas/User"}}},"description":"The address already belongs to a colleague (ACTIVE or INACTIVE) or a pending invitation (INVITED) here; nothing changed, nothing was sent.","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},
          "201": {"content":{"application/json":{"examples":{"invited":{"description":"invited","value":{"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"}}},"schema":{"$ref":"#/components/schemas/User"}}},"description":"A new invitation was sent (also when it replaced an expired one).","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},
          "400": {"content":{"application/problem+json":{"examples":{"errors.api.custom_field_invalid":{"summary":"errors.api.custom_field_invalid","value":{"code":"errors.api.custom_field_invalid","detail":"This value is not valid for this custom field.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.custom_field_invalid"}},"errors.api.custom_field_unknown_key":{"summary":"errors.api.custom_field_unknown_key","value":{"code":"errors.api.custom_field_unknown_key","detail":"There is no custom field with this key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.custom_field_unknown_key"}},"errors.api.idempotencyKeyRequired":{"summary":"errors.api.idempotencyKeyRequired","value":{"code":"errors.api.idempotencyKeyRequired","detail":"Send an Idempotency-Key header with this request, a unique value per operation.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.idempotencyKeyRequired"}},"errors.api.idempotencyKeyTooLong":{"summary":"errors.api.idempotencyKeyTooLong","value":{"code":"errors.api.idempotencyKeyTooLong","detail":"The Idempotency-Key header is longer than 255 characters.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.idempotencyKeyTooLong"}},"errors.api.invalidParameter":{"summary":"errors.api.invalidParameter","value":{"code":"errors.api.invalidParameter","detail":"A parameter has a value of the wrong type.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.invalidParameter"}},"errors.api.validationFailed":{"summary":"errors.api.validationFailed","value":{"code":"errors.api.validationFailed","detail":"One or more fields are not valid. The errors list names each field.","errors":[{"code":"errors.validation.nameRequired","field":"name","message":"A name is required."}],"requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.validationFailed"}},"errors.validation.customFieldKeyFormat":{"summary":"errors.validation.customFieldKeyFormat","value":{"code":"errors.validation.customFieldKeyFormat","detail":"A custom field key is at most 64 characters: a lowercase letter, then a-z, 0-9 and _.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.customFieldKeyFormat"}},"errors.validation.customFieldsTooMany":{"summary":"errors.validation.customFieldsTooMany","value":{"code":"errors.validation.customFieldsTooMany","detail":"customFields holds at most 30 keys.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.customFieldsTooMany"}},"errors.validation.emailInvalid":{"summary":"errors.validation.emailInvalid","value":{"code":"errors.validation.emailInvalid","detail":"Invalid email address","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.emailInvalid"}},"errors.validation.emailNonAscii":{"summary":"errors.validation.emailNonAscii","value":{"code":"errors.validation.emailNonAscii","detail":"Use an email address without special characters before the @.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.emailNonAscii"}},"errors.validation.emailRequired":{"summary":"errors.validation.emailRequired","value":{"code":"errors.validation.emailRequired","detail":"Email is required","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.emailRequired"}},"errors.validation.firstNameRequired":{"summary":"errors.validation.firstNameRequired","value":{"code":"errors.validation.firstNameRequired","detail":"First name is required","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.firstNameRequired"}},"errors.validation.firstNameTooLong":{"summary":"errors.validation.firstNameTooLong","value":{"code":"errors.validation.firstNameTooLong","detail":"First name must not exceed 100 characters","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.firstNameTooLong"}},"errors.validation.lastNameRequired":{"summary":"errors.validation.lastNameRequired","value":{"code":"errors.validation.lastNameRequired","detail":"Last name is required","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.lastNameRequired"}},"errors.validation.lastNameTooLong":{"summary":"errors.validation.lastNameTooLong","value":{"code":"errors.validation.lastNameTooLong","detail":"Last name must not exceed 100 characters","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.lastNameTooLong"}},"errors.validation.localeInvalid":{"summary":"errors.validation.localeInvalid","value":{"code":"errors.validation.localeInvalid","detail":"A language is a two-letter code, such as nl or en.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.localeInvalid"}},"errors.validation.metadataKeyInvalid":{"summary":"errors.validation.metadataKeyInvalid","value":{"code":"errors.validation.metadataKeyInvalid","detail":"A metadata key is 1 to 40 characters: a-z, A-Z, 0-9 and _.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.metadataKeyInvalid"}},"errors.validation.metadataTooManyKeys":{"summary":"errors.validation.metadataTooManyKeys","value":{"code":"errors.validation.metadataTooManyKeys","detail":"metadata holds at most 20 keys with a value, and at most 40 entries in all.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.metadataTooManyKeys"}},"errors.validation.metadataValueInvalid":{"summary":"errors.validation.metadataValueInvalid","value":{"code":"errors.validation.metadataValueInvalid","detail":"A metadata value is a string on one line.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.metadataValueInvalid"}},"errors.validation.metadataValueTooLong":{"summary":"errors.validation.metadataValueTooLong","value":{"code":"errors.validation.metadataValueTooLong","detail":"A metadata value is at most 500 characters.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.metadataValueTooLong"}},"errors.validation.roleRequired":{"summary":"errors.validation.roleRequired","value":{"code":"errors.validation.roleRequired","detail":"A role is required.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.roleRequired"}},"errors.validation.supportedLocalesInvalid":{"summary":"errors.validation.supportedLocalesInvalid","value":{"code":"errors.validation.supportedLocalesInvalid","detail":"Only English, Dutch, German, French, Spanish, Italian, Polish and Arabic are supported: en, nl, de, fr, es, it, pl or ar.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.supportedLocalesInvalid"}},"errors.validation.userEmailTooLong":{"summary":"errors.validation.userEmailTooLong","value":{"code":"errors.validation.userEmailTooLong","detail":"Email must not exceed 100 characters","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.validation.userEmailTooLong"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.validationFailed","errors.api.invalidParameter","errors.api.idempotencyKeyRequired","errors.api.idempotencyKeyTooLong","errors.validation.emailRequired","errors.validation.emailInvalid","errors.validation.emailNonAscii","errors.validation.userEmailTooLong","errors.validation.firstNameRequired","errors.validation.firstNameTooLong","errors.validation.lastNameRequired","errors.validation.lastNameTooLong","errors.validation.roleRequired","errors.validation.localeInvalid","errors.validation.supportedLocalesInvalid","errors.validation.customFieldsTooMany","errors.validation.customFieldKeyFormat","errors.validation.metadataTooManyKeys","errors.validation.metadataKeyInvalid","errors.validation.metadataValueInvalid","errors.validation.metadataValueTooLong","errors.api.custom_field_unknown_key","errors.api.custom_field_invalid"]},
          "401": {"content":{"application/problem+json":{"examples":{"errors.api.apiKeyExpired":{"summary":"errors.api.apiKeyExpired","value":{"code":"errors.api.apiKeyExpired","detail":"This API key has expired. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyExpired"}},"errors.api.apiKeyInvalid":{"summary":"errors.api.apiKeyInvalid","value":{"code":"errors.api.apiKeyInvalid","detail":"The API key is not valid. Check that you copied the whole key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyInvalid"}},"errors.api.apiKeyMissing":{"summary":"errors.api.apiKeyMissing","value":{"code":"errors.api.apiKeyMissing","detail":"Send your API key in the Authorization header: Authorization: Bearer sq_live_...","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyMissing"}},"errors.api.apiKeyRevoked":{"summary":"errors.api.apiKeyRevoked","value":{"code":"errors.api.apiKeyRevoked","detail":"This API key has been revoked. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyRevoked"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.apiKeyMissing","errors.api.apiKeyInvalid","errors.api.apiKeyRevoked","errors.api.apiKeyExpired"]},
          "402": {"content":{"application/problem+json":{"examples":{"errors.api.trialUserLimit":{"summary":"errors.api.trialUserLimit","value":{"code":"errors.api.trialUserLimit","detail":"The organisation is on a trial and cannot add more users.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":402,"title":"Payment Required","type":"https://docs.schedulinq.com/en/api/errors#errors.api.trialUserLimit"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Payment Required","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.trialUserLimit"]},
          "403": {"content":{"application/problem+json":{"examples":{"errors.api.insufficientScope":{"summary":"errors.api.insufficientScope","value":{"code":"errors.api.insufficientScope","detail":"This API key does not have the scope users:write.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","requiredScope":"users:write","status":403,"title":"Forbidden","type":"https://docs.schedulinq.com/en/api/errors#errors.api.insufficientScope"}},"errors.api.roleNotAssignable":{"summary":"errors.api.roleNotAssignable","value":{"code":"errors.api.roleNotAssignable","detail":"This API key may not give this role. Use one of the roles the key may assign (GET /api/v1/roles).","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":403,"title":"Forbidden","type":"https://docs.schedulinq.com/en/api/errors#errors.api.roleNotAssignable"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.insufficientScope","errors.api.roleNotAssignable"]},
          "409": {"content":{"application/problem+json":{"examples":{"errors.api.colleagueArchived":{"summary":"errors.api.colleagueArchived","value":{"code":"errors.api.colleagueArchived","detail":"An archived colleague of this organisation has this e-mail address. Restore them in Schedulinq, or invite with another address.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":409,"title":"Conflict","type":"https://docs.schedulinq.com/en/api/errors#errors.api.colleagueArchived"}},"errors.api.duplicateRequestInProgress":{"summary":"errors.api.duplicateRequestInProgress","value":{"code":"errors.api.duplicateRequestInProgress","detail":"A request with this Idempotency-Key is still being processed. Try again in a moment.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":409,"title":"Conflict","type":"https://docs.schedulinq.com/en/api/errors#errors.api.duplicateRequestInProgress"}},"errors.api.emailInUseElsewhere":{"summary":"errors.api.emailInUseElsewhere","value":{"code":"errors.api.emailInUseElsewhere","detail":"This e-mail address belongs to a Schedulinq account outside this organisation. Invite the colleague with another address; a plus-alias such as name+yourcompany@example.com works.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":409,"title":"Conflict","type":"https://docs.schedulinq.com/en/api/errors#errors.api.emailInUseElsewhere"}},"errors.api.noSeatsAvailable":{"summary":"errors.api.noSeatsAvailable","value":{"code":"errors.api.noSeatsAvailable","detail":"The organisation has no free seat for another user. An admin can add seats under Billing.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":409,"title":"Conflict","type":"https://docs.schedulinq.com/en/api/errors#errors.api.noSeatsAvailable"}},"errors.api.organisationScheduledForDeletion":{"summary":"errors.api.organisationScheduledForDeletion","value":{"code":"errors.api.organisationScheduledForDeletion","detail":"This organisation is scheduled for deletion and accepts no changes.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":409,"title":"Conflict","type":"https://docs.schedulinq.com/en/api/errors#errors.api.organisationScheduledForDeletion"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Conflict","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.duplicateRequestInProgress","errors.api.emailInUseElsewhere","errors.api.colleagueArchived","errors.api.noSeatsAvailable","errors.api.organisationScheduledForDeletion"]},
          "422": {"content":{"application/problem+json":{"examples":{"errors.api.idempotencyKeyReused":{"summary":"errors.api.idempotencyKeyReused","value":{"code":"errors.api.idempotencyKeyReused","detail":"This Idempotency-Key was already used for a different request. Use a new key for a new request.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":422,"title":"Unprocessable Content","type":"https://docs.schedulinq.com/en/api/errors#errors.api.idempotencyKeyReused"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unprocessable Content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.idempotencyKeyReused"]},
          "429": {"content":{"application/problem+json":{"examples":{"errors.api.colleagueInvitationLimit":{"summary":"errors.api.colleagueInvitationLimit","value":{"code":"errors.api.colleagueInvitationLimit","detail":"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.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.colleagueInvitationLimit"}},"errors.api.rateLimitExceeded":{"summary":"errors.api.rateLimitExceeded","value":{"code":"errors.api.rateLimitExceeded","detail":"Too many requests for this API key. Wait for the number of seconds in Retry-After and try again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.rateLimitExceeded"}},"errors.api.tooManyFailedAuthentications":{"summary":"errors.api.tooManyFailedAuthentications","value":{"code":"errors.api.tooManyFailedAuthentications","detail":"Too many failed authentications from this address. Wait for the number of seconds in Retry-After before trying again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.tooManyFailedAuthentications"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Too Many Requests","headers":{"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.rateLimitExceeded","errors.api.tooManyFailedAuthentications","errors.api.colleagueInvitationLimit"]},
          "500": {"content":{"application/problem+json":{"examples":{"errors.api.unexpectedError":{"summary":"errors.api.unexpectedError","value":{"code":"errors.api.unexpectedError","detail":"Something went wrong on our side. Try again later; if it keeps happening, contact support with the requestId.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":500,"title":"Internal Server Error","type":"https://docs.schedulinq.com/en/api/errors#errors.api.unexpectedError"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.unexpectedError"]}
        },
        "security": [
          {"apiKey":["users:write"]}
        ],
        "summary": "Invite a colleague",
        "tags": [
          "Users"
        ],
        "x-required-scope": "users:write"
      }
    },
    "/api/v1/users/invitations/{id}/resend": {
      "post": {
        "description": "**Scope:** `users:write`\n\nSends 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.",
        "operationId": "resendUserInvitation",
        "parameters": [
          {"description":"A unique value per user action; a retry with the same value answers the first call again and sends nothing.","in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string"}},
          {"description":"The invitation's id (invitationId).","example":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e05","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}
        ],
        "responses": {
          "200": {"content":{"application/json":{"examples":{"resent":{"description":"resent","value":{"email":"piet+ov@loodgieter-bakker.example","invitationExpiresAt":"2026-10-08T09:12:00Z","invitationId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e05","status":"INVITED"}}},"schema":{"$ref":"#/components/schemas/User"}}},"description":"Sent again. Without users:read a receipt: the status, the invitation's id, the address and the new expiry.","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},
          "400": {"content":{"application/problem+json":{"examples":{"errors.api.idempotencyKeyRequired":{"summary":"errors.api.idempotencyKeyRequired","value":{"code":"errors.api.idempotencyKeyRequired","detail":"Send an Idempotency-Key header with this request, a unique value per operation.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.idempotencyKeyRequired"}},"errors.api.idempotencyKeyTooLong":{"summary":"errors.api.idempotencyKeyTooLong","value":{"code":"errors.api.idempotencyKeyTooLong","detail":"The Idempotency-Key header is longer than 255 characters.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":400,"title":"Bad Request","type":"https://docs.schedulinq.com/en/api/errors#errors.api.idempotencyKeyTooLong"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.idempotencyKeyRequired","errors.api.idempotencyKeyTooLong"]},
          "401": {"content":{"application/problem+json":{"examples":{"errors.api.apiKeyExpired":{"summary":"errors.api.apiKeyExpired","value":{"code":"errors.api.apiKeyExpired","detail":"This API key has expired. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyExpired"}},"errors.api.apiKeyInvalid":{"summary":"errors.api.apiKeyInvalid","value":{"code":"errors.api.apiKeyInvalid","detail":"The API key is not valid. Check that you copied the whole key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyInvalid"}},"errors.api.apiKeyMissing":{"summary":"errors.api.apiKeyMissing","value":{"code":"errors.api.apiKeyMissing","detail":"Send your API key in the Authorization header: Authorization: Bearer sq_live_...","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyMissing"}},"errors.api.apiKeyRevoked":{"summary":"errors.api.apiKeyRevoked","value":{"code":"errors.api.apiKeyRevoked","detail":"This API key has been revoked. Ask an admin of the organisation for a new key.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":401,"title":"Unauthorized","type":"https://docs.schedulinq.com/en/api/errors#errors.api.apiKeyRevoked"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.apiKeyMissing","errors.api.apiKeyInvalid","errors.api.apiKeyRevoked","errors.api.apiKeyExpired"]},
          "402": {"content":{"application/problem+json":{"examples":{"errors.api.trialUserLimit":{"summary":"errors.api.trialUserLimit","value":{"code":"errors.api.trialUserLimit","detail":"The organisation is on a trial and cannot add more users.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":402,"title":"Payment Required","type":"https://docs.schedulinq.com/en/api/errors#errors.api.trialUserLimit"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Payment Required","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.trialUserLimit"]},
          "403": {"content":{"application/problem+json":{"examples":{"errors.api.insufficientScope":{"summary":"errors.api.insufficientScope","value":{"code":"errors.api.insufficientScope","detail":"This API key does not have the scope users:write.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","requiredScope":"users:write","status":403,"title":"Forbidden","type":"https://docs.schedulinq.com/en/api/errors#errors.api.insufficientScope"}},"errors.api.roleNotAssignable":{"summary":"errors.api.roleNotAssignable","value":{"code":"errors.api.roleNotAssignable","detail":"This API key may not give this role. Use one of the roles the key may assign (GET /api/v1/roles).","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":403,"title":"Forbidden","type":"https://docs.schedulinq.com/en/api/errors#errors.api.roleNotAssignable"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.insufficientScope","errors.api.roleNotAssignable"]},
          "404": {"content":{"application/problem+json":{"examples":{"errors.api.resourceNotFound":{"summary":"errors.api.resourceNotFound","value":{"code":"errors.api.resourceNotFound","detail":"There is no resource at this path.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":404,"title":"Not Found","type":"https://docs.schedulinq.com/en/api/errors#errors.api.resourceNotFound"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Found","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.resourceNotFound"]},
          "409": {"content":{"application/problem+json":{"examples":{"errors.api.colleagueInvitationAccepted":{"summary":"errors.api.colleagueInvitationAccepted","value":{"code":"errors.api.colleagueInvitationAccepted","detail":"This invitation has already been accepted: the colleague is in the organisation.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":409,"title":"Conflict","type":"https://docs.schedulinq.com/en/api/errors#errors.api.colleagueInvitationAccepted"}},"errors.api.duplicateRequestInProgress":{"summary":"errors.api.duplicateRequestInProgress","value":{"code":"errors.api.duplicateRequestInProgress","detail":"A request with this Idempotency-Key is still being processed. Try again in a moment.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":409,"title":"Conflict","type":"https://docs.schedulinq.com/en/api/errors#errors.api.duplicateRequestInProgress"}},"errors.api.noSeatsAvailable":{"summary":"errors.api.noSeatsAvailable","value":{"code":"errors.api.noSeatsAvailable","detail":"The organisation has no free seat for another user. An admin can add seats under Billing.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":409,"title":"Conflict","type":"https://docs.schedulinq.com/en/api/errors#errors.api.noSeatsAvailable"}},"errors.api.organisationScheduledForDeletion":{"summary":"errors.api.organisationScheduledForDeletion","value":{"code":"errors.api.organisationScheduledForDeletion","detail":"This organisation is scheduled for deletion and accepts no changes.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":409,"title":"Conflict","type":"https://docs.schedulinq.com/en/api/errors#errors.api.organisationScheduledForDeletion"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Conflict","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.duplicateRequestInProgress","errors.api.colleagueInvitationAccepted","errors.api.noSeatsAvailable","errors.api.organisationScheduledForDeletion"]},
          "422": {"content":{"application/problem+json":{"examples":{"errors.api.idempotencyKeyReused":{"summary":"errors.api.idempotencyKeyReused","value":{"code":"errors.api.idempotencyKeyReused","detail":"This Idempotency-Key was already used for a different request. Use a new key for a new request.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":422,"title":"Unprocessable Content","type":"https://docs.schedulinq.com/en/api/errors#errors.api.idempotencyKeyReused"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unprocessable Content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.idempotencyKeyReused"]},
          "429": {"content":{"application/problem+json":{"examples":{"errors.api.colleagueInvitationLimit":{"summary":"errors.api.colleagueInvitationLimit","value":{"code":"errors.api.colleagueInvitationLimit","detail":"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.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.colleagueInvitationLimit"}},"errors.api.rateLimitExceeded":{"summary":"errors.api.rateLimitExceeded","value":{"code":"errors.api.rateLimitExceeded","detail":"Too many requests for this API key. Wait for the number of seconds in Retry-After and try again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.rateLimitExceeded"}},"errors.api.tooManyFailedAuthentications":{"summary":"errors.api.tooManyFailedAuthentications","value":{"code":"errors.api.tooManyFailedAuthentications","detail":"Too many failed authentications from this address. Wait for the number of seconds in Retry-After before trying again.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":429,"title":"Too Many Requests","type":"https://docs.schedulinq.com/en/api/errors#errors.api.tooManyFailedAuthentications"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Too Many Requests","headers":{"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.rateLimitExceeded","errors.api.tooManyFailedAuthentications","errors.api.colleagueInvitationLimit"]},
          "500": {"content":{"application/problem+json":{"examples":{"errors.api.unexpectedError":{"summary":"errors.api.unexpectedError","value":{"code":"errors.api.unexpectedError","detail":"Something went wrong on our side. Try again later; if it keeps happening, contact support with the requestId.","requestId":"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e0b","status":500,"title":"Internal Server Error","type":"https://docs.schedulinq.com/en/api/errors#errors.api.unexpectedError"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"x-problem-codes":["errors.api.unexpectedError"]}
        },
        "security": [
          {"apiKey":["users:write"]}
        ],
        "summary": "Resend a colleague invitation",
        "tags": [
          "Users"
        ],
        "x-required-scope": "users:write"
      }
    }
  },
  "servers": [
    {
      "url": "https://api.schedulinq.com"
    }
  ],
  "tags": [
    {
      "description": "The organisation's colleagues and the invitations they have not accepted yet.",
      "name": "Users"
    },
    {
      "description": "The services (appointment types) the organisation offers.",
      "name": "Services"
    },
    {
      "description": "The roles an API key with users:write may give a colleague it invites.",
      "name": "Roles"
    },
    {
      "description": "Open Schedulinq's planner from your CRM, for one customer.",
      "name": "Planning links"
    },
    {
      "description": "Invitations a customer books an appointment with.",
      "name": "Invitations"
    },
    {
      "description": "The organisation's appointments, read back by kenmerken.",
      "name": "Appointments"
    }
  ],
  "x-problem-catalog": {
    "errors.api.apiKeyExpired": {
      "detail": "This API key has expired. Ask an admin of the organisation for a new key.",
      "status": 401,
      "title": "Unauthorized"
    },
    "errors.api.apiKeyInvalid": {
      "detail": "The API key is not valid. Check that you copied the whole key.",
      "status": 401,
      "title": "Unauthorized"
    },
    "errors.api.apiKeyMissing": {
      "detail": "Send your API key in the Authorization header: Authorization: Bearer sq_live_...",
      "status": 401,
      "title": "Unauthorized"
    },
    "errors.api.apiKeyRevoked": {
      "detail": "This API key has been revoked. Ask an admin of the organisation for a new key.",
      "status": 401,
      "title": "Unauthorized"
    },
    "errors.api.appointmentNotFound": {
      "detail": "This appointment does not exist, or it belongs to another organisation.",
      "status": 404,
      "title": "Not Found"
    },
    "errors.api.badRequest": {
      "detail": "The request could not be processed.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.api.colleagueArchived": {
      "detail": "An archived colleague of this organisation has this e-mail address. Restore them in Schedulinq, or invite with another address.",
      "status": 409,
      "title": "Conflict"
    },
    "errors.api.colleagueInvitationAccepted": {
      "detail": "This invitation has already been accepted: the colleague is in the organisation.",
      "status": 409,
      "title": "Conflict"
    },
    "errors.api.colleagueInvitationLimit": {
      "detail": "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.",
      "status": 429,
      "title": "Too Many Requests"
    },
    "errors.api.colleagueNotActive": {
      "detail": "This colleague can't be booked: they have not accepted their invitation yet, or they are deactivated, archived or not schedulable.",
      "status": 409,
      "title": "Conflict"
    },
    "errors.api.colleagueNotFound": {
      "detail": "No colleague of this organisation has this id or e-mail address.",
      "status": 404,
      "title": "Not Found"
    },
    "errors.api.conflict": {
      "detail": "The resource was changed by another request at the same time. Try again.",
      "status": 409,
      "title": "Conflict"
    },
    "errors.api.custom_field_invalid": {
      "detail": "This value is not valid for this custom field.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.api.custom_field_required": {
      "detail": "This custom field is required.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.api.custom_field_unknown_key": {
      "detail": "There is no custom field with this key.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.api.customerDeactivated": {
      "detail": "This customer is deactivated and can't book online. Reactivate them in Schedulinq first.",
      "status": 409,
      "title": "Conflict"
    },
    "errors.api.customerInvitationLimit": {
      "detail": "This customer has received the maximum number of invitations through the API for now. Try again later.",
      "status": 429,
      "title": "Too Many Requests"
    },
    "errors.api.customerNotFound": {
      "detail": "No customer of this organisation has this id.",
      "status": 404,
      "title": "Not Found"
    },
    "errors.api.duplicateRequestInProgress": {
      "detail": "A request with this Idempotency-Key is still being processed. Try again in a moment.",
      "status": 409,
      "title": "Conflict"
    },
    "errors.api.emailInUseElsewhere": {
      "detail": "This e-mail address belongs to a Schedulinq account outside this organisation. Invite the colleague with another address; a plus-alias such as name+yourcompany@example.com works.",
      "status": 409,
      "title": "Conflict"
    },
    "errors.api.forbidden": {
      "detail": "This API key may not do this.",
      "status": 403,
      "title": "Forbidden"
    },
    "errors.api.idempotencyKeyRequired": {
      "detail": "Send an Idempotency-Key header with this request, a unique value per operation.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.api.idempotencyKeyReused": {
      "detail": "This Idempotency-Key was already used for a different request. Use a new key for a new request.",
      "status": 422,
      "title": "Unprocessable Content"
    },
    "errors.api.idempotencyKeyTooLong": {
      "detail": "The Idempotency-Key header is longer than 255 characters.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.api.insufficientScope": {
      "detail": "This API key does not have the scope this operation needs.",
      "status": 403,
      "title": "Forbidden"
    },
    "errors.api.invalidParameter": {
      "detail": "A parameter has a value of the wrong type.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.api.invalidRequestBody": {
      "detail": "The request body is not valid JSON.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.api.invitationNotFound": {
      "detail": "This invitation could not be found.",
      "status": 404,
      "title": "Not Found"
    },
    "errors.api.mediaTypeNotSupported": {
      "detail": "Send the request body as application/json and accept application/json.",
      "status": 415,
      "title": "Unsupported Media Type"
    },
    "errors.api.methodNotSupported": {
      "detail": "This path does not support this HTTP method. The Allow header lists the methods it does support.",
      "status": 405,
      "title": "Method Not Allowed"
    },
    "errors.api.missingParameter": {
      "detail": "A required parameter is missing.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.api.noSeatsAvailable": {
      "detail": "The organisation has no free seat for another user. An admin can add seats under Billing.",
      "status": 409,
      "title": "Conflict"
    },
    "errors.api.organisationScheduledForDeletion": {
      "detail": "This organisation is scheduled for deletion and accepts no changes.",
      "status": 409,
      "title": "Conflict"
    },
    "errors.api.rateLimitExceeded": {
      "detail": "Too many requests for this API key. Wait for the number of seconds in Retry-After and try again.",
      "status": 429,
      "title": "Too Many Requests"
    },
    "errors.api.requestTooLarge": {
      "detail": "The request body is larger than 256 KB.",
      "status": 413,
      "title": "Content Too Large"
    },
    "errors.api.resourceNotFound": {
      "detail": "There is no resource at this path.",
      "status": 404,
      "title": "Not Found"
    },
    "errors.api.roleNotAssignable": {
      "detail": "This API key may not give this role. Use one of the roles the key may assign (GET /api/v1/roles).",
      "status": 403,
      "title": "Forbidden"
    },
    "errors.api.serviceNotFound": {
      "detail": "This service does not exist, or it is archived.",
      "status": 404,
      "title": "Not Found"
    },
    "errors.api.tooManyFailedAuthentications": {
      "detail": "Too many failed authentications from this address. Wait for the number of seconds in Retry-After before trying again.",
      "status": 429,
      "title": "Too Many Requests"
    },
    "errors.api.trialUserLimit": {
      "detail": "The organisation is on a trial and cannot add more users.",
      "status": 402,
      "title": "Payment Required"
    },
    "errors.api.unexpectedError": {
      "detail": "Something went wrong on our side. Try again later; if it keeps happening, contact support with the requestId.",
      "status": 500,
      "title": "Internal Server Error"
    },
    "errors.api.validationFailed": {
      "detail": "One or more fields are not valid. The errors list names each field.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.addOnNotOffered": {
      "detail": "This add-on does not exist, or it is not offered with this service.",
      "status": 422,
      "title": "Unprocessable Content"
    },
    "errors.validation.addOnQuantityInvalid": {
      "detail": "Choose a quantity between 1 and 99 for each add-on.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.addOnQuantityNotAllowed": {
      "detail": "This add-on can only be booked once per appointment.",
      "status": 422,
      "title": "Unprocessable Content"
    },
    "errors.validation.addOnRepeated": {
      "detail": "This add-on is listed more than once.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.addressRequired": {
      "detail": "Address is required",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.appointmentTypeRequired": {
      "detail": "Appointment type is required",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.cityTooLong": {
      "detail": "The city must not exceed 100 characters.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.colleagueIdOrEmail": {
      "detail": "Name the colleague by id or by e-mail address — one of the two.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.colleagueRepeated": {
      "detail": "This colleague is listed more than once.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.companyNameRequired": {
      "detail": "Company name is required",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.companyNameTooLong": {
      "detail": "Company name must not exceed 255 characters",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.countryInvalid": {
      "detail": "Invalid country code",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.cursorInvalid": {
      "detail": "The cursor is not valid. Use the nextCursor of a previous page as it was given.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.customFieldKeyFormat": {
      "detail": "A custom field key is at most 64 characters: a lowercase letter, then a-z, 0-9 and _.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.customFieldsTooMany": {
      "detail": "customFields holds at most 30 keys.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.customerIdOrDetails": {
      "detail": "Name the customer by id alone, or by its details — not both.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.customerRequired": {
      "detail": "Customer is required",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.emailInvalid": {
      "detail": "Invalid email address",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.emailNonAscii": {
      "detail": "Use an email address without special characters before the @.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.emailRequired": {
      "detail": "Email is required",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.emailTooLong": {
      "detail": "Email must not exceed 255 characters",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.firstNameRequired": {
      "detail": "First name is required",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.firstNameTooLong": {
      "detail": "First name must not exceed 100 characters",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.invalidValue": {
      "detail": "This value has the wrong type or format.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.invitationValidUntilInPast": {
      "detail": "The expiry date cannot be in the past.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.invitationValidUntilTooFar": {
      "detail": "The expiry date can be at most ten years ahead.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.lastNameRequired": {
      "detail": "Last name is required",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.lastNameTooLong": {
      "detail": "Last name must not exceed 100 characters",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.limitOutOfRange": {
      "detail": "limit must be a whole number from 1 to 100.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.localeInvalid": {
      "detail": "A language is a two-letter code, such as nl or en.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.metadataFilterRequired": {
      "detail": "A list needs at least one metadata filter, for example metadata[dealId]=D-123.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.metadataKeyInvalid": {
      "detail": "A metadata key is 1 to 40 characters: a-z, A-Z, 0-9 and _.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.metadataTooManyKeys": {
      "detail": "metadata holds at most 20 keys with a value, and at most 40 entries in all.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.metadataValueInvalid": {
      "detail": "A metadata value is a string on one line.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.metadataValueTooLong": {
      "detail": "A metadata value is at most 500 characters.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.nameRequired": {
      "detail": "A name is required.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.nameTooLong": {
      "detail": "The name is too long.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.phoneInvalid": {
      "detail": "Invalid phone number",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.phoneNumberTooLong": {
      "detail": "Phone number must not exceed 20 characters",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.postalCodeTooLong": {
      "detail": "The postal code must not exceed 20 characters.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.redirectUrlInvalid": {
      "detail": "Enter a full web address starting with https://",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.redirectUrlTooLong": {
      "detail": "The web address must not exceed 2048 characters",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.returnUrlOriginNotAllowed": {
      "detail": "This return address is not on the organisation's list of allowed return addresses (Integrations → API).",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.roleRequired": {
      "detail": "A role is required.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.serviceHasNoDuration": {
      "detail": "This service has no duration of its own. Give it one in Schedulinq, or add an add-on with a duration.",
      "status": 422,
      "title": "Unprocessable Content"
    },
    "errors.validation.streetTooLong": {
      "detail": "Street and house number must not exceed 255 characters.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.supportedLocalesInvalid": {
      "detail": "Only English, Dutch, German, French, Spanish, Italian, Polish and Arabic are supported: en, nl, de, fr, es, it, pl or ar.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.unknownField": {
      "detail": "This field does not exist.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.userCannotDoEveryService": {
      "detail": "This colleague does not do this service (or one of its add-ons).",
      "status": 422,
      "title": "Unprocessable Content"
    },
    "errors.validation.userEmailTooLong": {
      "detail": "Email must not exceed 100 characters",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.userRequired": {
      "detail": "Name at least one colleague.",
      "status": 400,
      "title": "Bad Request"
    },
    "errors.validation.usersOutOfRange": {
      "detail": "users names 1 to 100 colleagues.",
      "status": 400,
      "title": "Bad Request"
    }
  }
}
