Snel aan de slag
De drie CRM-knoppen van begin tot eind met curl — plannen, uitnodigen, een teamlid aanmaken — en je eerste webhook.
Deze snelstart loopt de aanroepen achter de drie knoppen door, met curl, zodat je elk verzoek en elk antwoord ziet voordat je een regel eigen code schrijft.
Voordat je begint
- Laat een beheerder een sleutel maken met alleen de vijf rechten die deze stappen
gebruiken:
services:read,users:read,planning_links:write,invitations:write, enusers:writemet één rol. Zie Authenticatie. - Zet de sleutel in je shell:
export SCHEDULINQ_API_KEY=sq_live_...
1. Controleer je sleutel
Vraag je diensten op. Een 200 betekent dat de sleutel werkt; het id van een dienst heb
je later nodig.
Voorbeeldverzoek · GET /api/v1/services
curl "https://api.schedulinq.com/api/v1/services?limit=25" \
-H "Authorization: Bearer $SCHEDULINQ_API_KEY"Antwoord · 200
{
"data": [
{
"colleagueIds": [
"3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e03"
],
"createdAt": "2026-09-01T08:00:00Z",
"durationMinutes": 60,
"id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
"identifier": "offertebezoek",
"name": "Offertebezoek",
"names": {
"en": "Quote visit",
"nl": "Offertebezoek"
}
}
],
"hasMore": false,
"nextCursor": "MjAyNi0wOS0wMVQwODowMDowMFp8M2YwYzhhNTItNmIxZS00ZDdhLTljM2UtMWEyYjNjNGQ1ZTAx"
}2. Zoek het teamlid
Vraag je teamleden op, en kies degene voor wie het werk is.
Voorbeeldverzoek · GET /api/v1/users
curl "https://api.schedulinq.com/api/v1/users?limit=25" \
-H "Authorization: Bearer $SCHEDULINQ_API_KEY"Antwoord · 200
{
"data": [
{
"admin": false,
"calendarConnected": true,
"createdAt": "2026-10-01T08:30:00Z",
"customFields": {
"bedrijf": "Installatiebedrijf Jansen"
},
"email": "sanne@installatiebedrijf-jansen.example",
"firstName": "Sanne",
"id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e03",
"invitationExpiresAt": "2026-10-08T08:30:00Z",
"invitationId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e05",
"lastName": "de Vries",
"metadata": {
"campaignId": "C-42"
},
"name": "Sanne de Vries",
"roleId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e04",
"schedulable": true,
"status": "ACTIVE"
}
],
"hasMore": false,
"nextCursor": "MjAyNi0xMC0wMVQwODozMDowMFp8M2YwYzhhNTItNmIxZS00ZDdhLTljM2UtMWEyYjNjNGQ1ZTAz"
}3. Plan
Maak een planningslink voor de lead. Je backend doet dat op het moment dat de beller op Plan klikt:
Voorbeeldverzoek · POST /api/v1/planning-links
IDEMPOTENCY_KEY=$(uuidgen) # once per action; to retry, run only the curl line again (same key)
curl -X POST https://api.schedulinq.com/api/v1/planning-links \
-H "Authorization: Bearer $SCHEDULINQ_API_KEY" \
-H "Idempotency-Key: $IDEMPOTENCY_KEY" \
-H "Content-Type: application/json" \
-d '{
"appointmentTypeId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
"customer": {
"id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e06"
},
"metadata": {
"campaignId": "C-42",
"dealId": "D-123"
},
"returnUrl": "https://crm.example.com/deals/D-123"
}'Antwoord · 201
{
"customerId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e06",
"expiresAt": "2026-10-14T09:15:00+02:00",
"id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e07",
"url": "https://app.schedulinq.com/plan-link#EXAMPLE-TOKEN",
"userId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e03"
}Stuur de browser van de beller daarna meteen naar url, bijvoorbeeld met een HTTP 303
vanuit je backend. De link opent de planner van Schedulinq één keer, binnen 15 minuten.
De returnUrl uit het voorbeeld wordt geweigerd tot een beheerder de origin toevoegt
onder Integraties → API → Toegestane terugkeeradressen. Zet daar de origin van je
CRM, of laat returnUrl voor deze test weg. Zet in user het e-mailadres van een van
je eigen teamleden. Zie Planningslinks.
4. Nodig uit
Stuur de klant een uitnodiging om bij het teamlid te boeken. Een uitnodiging noemt haar
teamleden als lijst, users: zet daar hier een van je eigen teamleden in, net als bij de
planningslink.
Voorbeeldverzoek · POST /api/v1/invitations
IDEMPOTENCY_KEY=$(uuidgen) # once per action; to retry, run only the curl line again (same key)
curl -X POST https://api.schedulinq.com/api/v1/invitations \
-H "Authorization: Bearer $SCHEDULINQ_API_KEY" \
-H "Idempotency-Key: $IDEMPOTENCY_KEY" \
-H "Content-Type: application/json" \
-d '{
"address": {
"city": "Amsterdam",
"country": "NL",
"line1": "Keizersgracht 100",
"postalCode": "1015 AA"
},
"appointmentTypeId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
"customer": {
"id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e06"
},
"metadata": {
"campaignId": "C-42",
"dealId": "D-123"
},
"users": [
{
"id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e03"
}
]
}'Antwoord · 201
{
"address": {
"city": "Amsterdam",
"country": "NL",
"line1": "Keizersgracht 100",
"postalCode": "1015 AA"
},
"bookingPageClosed": false,
"bookingUrl": "https://schedulinq.com/i/EXAMPLE-INVITATION",
"colleagues": [
{
"id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
"name": "Offertebezoek"
}
],
"createdAt": "2026-10-01T09:00:00+02:00",
"customerId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e06",
"id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e08",
"initialEmailDeferred": false,
"lineageRootId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09",
"location": {
"id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
"name": "Offertebezoek"
},
"locationMode": "VIDEO",
"metadata": {
"campaignId": "C-42",
"dealId": "D-123"
},
"rescheduledFromAppointmentId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e09",
"service": {
"id": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e01",
"name": "Offertebezoek"
},
"status": "PENDING",
"updatedAt": "2026-10-01T09:00:00+02:00",
"validUntil": "2026-10-31"
}De uitnodiging gaat weg via je communicatiestappen. Bewaar bookingUrl als je hem
nodig hebt: die staat alleen in dit antwoord. Zie Uitnodigingen.
5. Maak een koper aan
Nodig een nieuw teamlid uit met een van de rollen die je sleutel mag toewijzen
(GET /api/v1/roles). De Idempotency-Key maakt de aanroep veilig om te herhalen; zie
Idempotentie.
Voorbeeldverzoek · POST /api/v1/users
IDEMPOTENCY_KEY=$(uuidgen) # once per action; to retry, run only the curl line again (same key)
curl -X POST https://api.schedulinq.com/api/v1/users \
-H "Authorization: Bearer $SCHEDULINQ_API_KEY" \
-H "Idempotency-Key: $IDEMPOTENCY_KEY" \
-H "Content-Type: application/json" \
-d '{
"customFields": {
"bedrijf": "Loodgieter Bakker"
},
"email": "piet+ov@loodgieter-bakker.example",
"firstName": "Piet",
"lastName": "Bakker",
"locale": "nl",
"metadata": {
"campaignId": "C-42"
},
"roleId": "3f0c8a52-6b1e-4d7a-9c3e-1a2b3c4d5e04"
}'Een nieuwe uitnodiging antwoordt met 201, en de uitnodigingsmail is onderweg:
Antwoord · 201
{
"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"
}Voer dezelfde aanroep nog eens uit met een nieuwe Idempotency-Key en het antwoord is een
200 met INVITED: het adres is al uitgenodigd, en er wordt niets twee keer verstuurd.
Zie Teamleden.
6. Je eerste webhook
- Voeg in het dashboard een endpoint toe onder Integraties → API → Webhooks, en vink de gebeurtenissen aan die je wilt. Zie Webhooks.
- Klik op Testbericht versturen. Je endpoint ontvangt een
ping. - Controleer de handtekening met het ondertekeningsgeheim van het endpoint; zie De handtekening controleren.
Je endpoint moet via https op een openbaar adres bereikbaar zijn: gewone http, localhost en privé-adressen worden geweigerd. Gebruik voor lokale ontwikkeling een tunneldienst die je computer een openbaar https-adres geeft.
Volgende stappen
- Foutmeldingen: wat elke code betekent en wat je eraan doet.
- Idempotentie: veilig opnieuw proberen.
- Limieten: hoeveel je mag vragen.
- Referentie: elk endpoint.