Introductie
Taskport biedt een JSON API voor integraties met externe systemen zoals CRM-, planning-, ticketing-, backoffice- of partnerplatformen. De publieke API bestaat uit twee hoofdflows:
- Incoming API: opdrachten en contractor-interne berichten naar Taskport schrijven
- Outbound Sync API: wijzigingen vanuit Taskport ophalen via een cursor-based event feed
Basis-URL
https://taskport.nl
Dataformaat
Taskport gebruikt JSON voor request payloads en responses.
| Header | Waarde |
|---|---|
Content-Type | application/json |
Accept | application/json |
HTTP-methodes
| Methode | Gebruik |
|---|---|
POST | Incoming API voor create, update en internal messaging |
GET | Outbound Sync API voor read-only event synchronisatie |
Authenticatie
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json
Accept: application/json
Authorization: Bearer YOUR_API_TOKEN
Accept: application/json
Rechten
- Voor outbound moet de token outbound-rechten hebben, technisch:
can_use_outbound_api = 1. - Voor incoming is een actieve token voldoende, tenzij incoming-scopes actief zijn; dan moet
can_use_incoming_api = 1op de token staan. - Dezelfde token mag incoming en outbound combineren als beide rechten op die token aanwezig zijn.
Rate limits
| Bucket | Limiet | Periode |
|---|---|---|
| Unauthenticated requests per IP | 20 | per 60 seconden |
| Authenticated requests per token | 60 | per 60 seconden |
| Authenticated requests per IP | 90 | per 60 seconden |
429 Too Many Requests stuurt Taskport ook een Retry-After-header terug.
Fouten
missing_api_token | Geen bearer-token meegestuurd |
invalid_api_token | Ongeldig API-token |
forbidden_scope | Token heeft niet de juiste rechten |
token_misconfigured | Token is niet volledig geconfigureerd |
rate_limited | Te veel verzoeken, probeer later opnieuw |
invalid_json | Request body is geen geldige JSON |
create_identifier_required | Bij create ontbreekt zowel my_id als idempotency_key |
missing_required_fields | Verplichte create-velden ontbreken |
customer_create_failed | Klant aanmaken mislukt |
site_create_failed | Site aanmaken mislukt |
job_create_failed | Opdracht aanmaken mislukt |
message_store_failed | Bericht opslaan mislukt |
internal_server_error | Onverwachte interne fout |
200 | Succesvolle create, update, message append of outbound read |
400 | Ongeldige request, JSON of queryparameter |
401 | Niet geauthenticeerd |
403 | Token heeft onvoldoende rechten |
404 | Niet gevonden waar van toepassing |
405 | Methode niet toegestaan |
429 | Rate limit overschreden |
500 | Interne fout |
200 OK, niet 201 Created.
Quick start
- Gebruik een actieve integration bearer-token. Voor outbound moet die token outbound-rechten hebben.
- Maak of update opdrachten via
POST /api/contractor_incoming_api.php. Klantgegevens en opdrachtgegevens gaan samen in dezelfde request. - Lees wijzigingen terug via
GET /api/outbound_sync_api.phpen bewaar steeds de nieuwstenext_cursor.
Incoming API
De incoming API is bedoeld voor externe systemen die opdrachten of contractor-interne berichten naar Taskport willen sturen.
POST https://taskport.nl/api/contractor_incoming_api.php
POST https://taskport.nl/api/intercom_incoming_api.php
Opdracht aanmaken / bijwerken
Deze route wordt gebruikt om nieuwe opdrachten aan te maken of bestaande opdrachten bij te werken.
Taskport gebruikt hiervoor my_id als externe sleutel.
Bij een nieuwe opdracht worden klantgegevens en opdrachtgegevens samen ingestuurd.
Bij een update zoekt Taskport eerst op my_id en werkt daarna de bestaande opdracht bij.
Velden bij aanmaken
Verplicht bij aanmaken:
namestreethouse_numberzipcodecitymobileemailserial_numbertitleproblem_descriptionurgencyslamy_idofidempotency_key
Velden bij bijwerken
Verplicht bij bijwerken:
my_id
my_id al, dan werkt Taskport de bestaande opdracht bij. Als my_id bij create ontbreekt, voorkomt idempotency_key dubbele opdrachten bij retries.
Interne notitie toevoegen
Gebruik hetzelfde endpoint om contractor-interne notities aan een bestaande opdracht toe te voegen.
Verplicht voor een bericht:
my_idmessaging.messagemessaging.external_message_id
Optioneel:
messaging.message_typemessaging.created_at
Veldreference
| Veld | Type | Omschrijving |
|---|---|---|
name | string | Klantnaam |
street | string | Straat |
house_number | string | Huisnummer |
zipcode | string | Postcode |
city | string | Woonplaats |
mobile | string | Mobiel nummer |
email | string | E-mailadres |
serial_number | string | Serienummer |
title | string | Korte opdrachttitel |
problem_description | string | Uitgebreide probleemomschrijving |
urgency | string | Urgentie |
sla | string | SLA-label |
my_id | string | Externe opdrachtreferentie |
idempotency_key | string | Idempotency-sleutel voor create-retries |
price_ex | number | Optionele API-prijs exclusief btw |
api_price_ex | number | Alternatieve veldnaam voor price_ex |
purchase_ex | number | Alternatieve veldnaam voor price_ex |
calculated_price | number | Alternatieve veldnaam voor price_ex |
source_url | string | Link naar het bronrecord |
intercom_url | string | Alternatieve veldnaam voor source_url |
Voorbeeld: opdracht aanmaken
curl -X POST "https://taskport.nl/api/contractor_incoming_api.php" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
--data-raw '{
"name": "Jane Example",
"street": "Harbor Lane",
"house_number": "14A",
"zipcode": "1012AB",
"city": "Amsterdam",
"mobile": "+31612345678",
"email": "jane.example@example.test",
"my_id": "SRC-90010001",
"serial_number": "SRC_009001",
"title": "kWh meter defect",
"problem_description": "Customer reports that the charger no longer registers meter values.",
"urgency": "normal",
"sla": "standard_24h"
}'
{
"ok": true,
"action": "job_created",
"job_id": 60001,
"my_id": "SRC-90010001"
}
Voorbeeld: opdracht bijwerken
curl -X POST "https://taskport.nl/api/contractor_incoming_api.php" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
--data-raw '{
"my_id": "SRC-90010001",
"title": "kWh meter defect - revisie 2",
"urgency": "high"
}'
{
"ok": true,
"action": "job_updated",
"job_id": 60001,
"my_id": "SRC-90010001"
}
messaging toe, dan kan de response extra velden bevatten zoals message_action, thread_id en message_id. Bij een dubbel external_message_id wordt message_action = duplicate_ignored teruggegeven.
{
"ok": true,
"action": "job_updated",
"job_id": 60001,
"my_id": "SRC-90010001",
"message_action": "message_added",
"thread_id": 123,
"message_id": 456
}
Outbound Sync API
De outbound sync API is bedoeld voor externe systemen die wijzigingen vanuit Taskport willen uitlezen. Deze API is read-only en werkt via een cursor-based event feed.
Sync-events ophalen
Gebruik deze route om wijzigingen uit Taskport op te halen.
- haal events op vanaf een cursor
- verwerk ze in het eigen systeem
- bewaar
next_cursor - gebruik die cursor bij de volgende run
Queryparameters
| Parameter | Type | Verplicht | Omschrijving |
|---|---|---|---|
cursor | string | Nee | Laatst verwerkte eventcursor, bijvoorbeeld evt_0000000123 |
limit | integer | Nee | Aantal items, standaard 100, minimum 1, maximum 500 |
types | string | Nee | Komma-gescheiden lijst van event types |
entity_types | string | Nee | Komma-gescheiden lijst van entity types |
since | string | Nee | ISO datetime fallback als er nog geen cursor is |
Event-object
| Veld | Type | Omschrijving |
|---|---|---|
event_id | string | Unieke eventcursor |
event_type | string | Type event |
entity_type | string | Logische entity |
occurred_at | datetime | Publicatiemoment in UTC |
integration_id | integer | Interne koppeling |
contractor_id | integer | Interne contractor-id |
company_id | integer | Interne company-id |
taskport_id | integer | Interne Taskport-id |
external_id | string | Externe referentie, meestal my_id |
payload | object | Event-specifieke data |
Event types
customer_updatedjob_createdjob_updatedworkorder_updatedmessage_addedjob_plannedjob_status_changed
customerjobworkorderjob_messagejob_planningjob_status
Voorbeeldresponse
curl -X GET "https://taskport.nl/api/outbound_sync_api.php?cursor=evt_0000000123&limit=100" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"
{
"ok": true,
"items": [
{
"event_id": "evt_0000001024",
"event_type": "job_created",
"entity_type": "job",
"occurred_at": "2026-03-18T12:41:30+00:00",
"integration_id": 17,
"contractor_id": 4,
"company_id": 1,
"taskport_id": 51425,
"external_id": "EXT-1001",
"payload": {
"customer_name": "Demo Klant",
"serial_number": "EXT_1001",
"title": "kWh meter defect",
"status": "created"
}
}
],
"next_cursor": "evt_0000001024",
"has_more": false,
"count": 1
}
X-Taskport-Integration-Id, X-Taskport-Event-Count en, als er een volgende pagina is, X-Taskport-Next-Cursor.
Request IDs
Gebruik bij support of troubleshooting altijd de request-id uit de response headers.
X-Taskport-Request-Id: <request-id>