Crewplanning Inloggen Start gratis
API

API

Alles is JSON over HTTPS. Datums zijn JJJJ-MM-DD, tijden vrije tekst zoals 08:00-18:00. Er is geen versiebeheer buiten /v1; wat hier staat blijft werken.

Twee sleutels

Als freelancer gebruik je je API-sleutel uit Instellingen → API, als Authorization: Bearer cp_…. Daarmee zie je je hele agenda en kun je opties bevestigen of afwijzen.

Als opdrachtgever gebruik je het token uit de link die je van de freelancer kreeg: https://crewplanning.pages.dev/k/<token> wordt https://crewplanning.pages.dev/api/v1/k/<token>/…. Je ziet precies wat je op die pagina ook ziet, niet meer.

Opdrachtgever

GET /api/v1/k/:token/agenda?van=&tot=

Per dag een kleur: vrij, optie (jouw optie), bevestigd (voor jou), deels (een deel van de dag is bezet, met bezet_tijden), bezet, verleden. Zonder van/tot: vandaag tot 60 dagen vooruit.

curl "https://crewplanning.pages.dev/api/v1/k/<token>/agenda?van=2026-11-10&tot=2026-11-16"

{ "freelancer": { "naam": "Sam de Vries" }, "klant": { "naam": "Rotterdam Ahoy", "planner": null },
  "dagen": [
    { "datum": "2026-11-10", "kleur": "bezet",  "eigen": [], "bezet_tijden": [] },
    { "datum": "2026-11-11", "kleur": "deels",  "eigen": [], "bezet_tijden": ["14:00-23:00"] },
    { "datum": "2026-11-12", "kleur": "optie",  "eigen": [ { "id": 81, "status": "optie", … } ], "bezet_tijden": [] },
    { "datum": "2026-11-13", "kleur": "vrij",   "eigen": [], "bezet_tijden": [] } ] }

POST /api/v1/k/:token/opties

Optie leggen. Alleen van is verplicht. Overlapt het met een bevestigde dienst, dan krijg je 409 met de reden. De freelancer krijgt bericht.

curl -X POST https://crewplanning.pages.dev/api/v1/k/<token>/opties -H "Content-Type: application/json" \
  -d '{ "van": "2026-11-13", "tot": "2026-11-13", "tijden": "08:00-18:00", "locatie": "Ahoy, Rotterdam",
        "contact": "Piet Bakker 010-2933300", "parkeren": "P Zuid", "info": "Call 07:45 bij expeditie",
        "link": "https://…/callsheet.pdf", "uiterlijk": "2026-11-08" }'

201 { "aanvraag": { "id": 82, "status": "optie", "van": "2026-11-13", "tot": "2026-11-13", "vervalt_op": "2026-11-08", … } }

GET /api/v1/k/:token/opties · GET …/opties/:id · DELETE …/opties/:id

Je eigen aanvragen, de status van één aanvraag, of een optie intrekken. Statussen: optie, bevestigd, afgewezen, vervallen, geannuleerd.

Freelancer

GET /api/v1/agenda?van=&tot=

Alles in je agenda: diensten, opties en blokkades, per dag, met kleur vrij, optie, deels, bezet of verleden.

curl https://crewplanning.pages.dev/api/v1/agenda?van=2026-11-10&tot=2026-11-16 -H "Authorization: Bearer cp_…"

GET /api/v1/opties

Alle openstaande opties, oudste datum eerst.

POST /api/v1/opties/:id/bevestig · …/afwijs · …/annuleer

Zelfde regels als in de agenda: bevestigen kan niet bij een harde overlap (409), annuleren alleen bij een bevestigde dienst. Body optioneel: { "reden": "…" }. Beide kanten krijgen bericht.

curl -X POST https://crewplanning.pages.dev/api/v1/opties/82/bevestig -H "Authorization: Bearer cp_…"

Webhook

Zet in Instellingen → API een URL, en bij elke statuswissel krijg je één POST met JSON. Header X-Crewplanning-Event bevat de gebeurtenis: optie_ingediend, bevestigd, afgewezen, vervallen, geannuleerd, ingetrokken, gewijzigd. Antwoord met 2xx. Mislukt de aflevering, dan zie je dat onder Berichten; er wordt niet opnieuw geprobeerd.

{ "gebeurtenis": "bevestigd", "tijdstip": "2026-11-05T09:12:44.000Z",
  "aanvraag": { "id": 82, "status": "bevestigd", "klant": { "id": 3, "naam": "Rotterdam Ahoy" }, "planner": "Piet Bakker",
                "van": "2026-11-13", "tot": "2026-11-13", "tijden": "08:00-18:00", "locatie": "Ahoy, Rotterdam", … } }

Agenda-feeds

Geen API nodig: elke agenda heeft een iCal-adres voor Google Agenda, Outlook en Apple Agenda. Jij vindt het onder je agenda, elke opdrachtgever op zijn eigen pagina.

Grenzen