De export via de API
Met de API vraag je een export aan, volg je de voortgang en download je de zip, zonder het dashboard. Terug naar het overzicht.
Toegang
De API gebruikt OAuth 2.0 met client credentials. Je krijgt van ons een client_id en een client_secret voor één of meer businesses.
Mail naar support@appset.nl met de naam van de business en wie de koppeling gebruikt. Is de aanvrager niet de business zelf, dan vragen we de business om akkoord.
Je krijgt een
client_iden eenclient_secret. Bewaar het secret veilig: het geeft toegang tot alle gegevens van de business.Haal een token op:
curl --request POST https://id.trinitisolutions.nl/oauth/token \ --header 'content-type: application/json' \ --data '{"grant_type":"client_credentials","client_id":"<client_id>","client_secret":"<client_secret>","audience":"https://api.appset.nl/"}'Het antwoord bevat
access_tokenenexpires_in(in seconden). Stuur het token mee in elke aanroep:Authorization: Bearer <access_token>. Haal een nieuw token op als het verlopen is.
Een koppeling intrekken? Mail naar support@appset.nl.
Endpoints
Basisadres: https://api.appset.nl/v1/Businesses/{business_name}/DataExports. {business_name} is de technische naam van de business, precies zoals wij hem geven (hoofdlettergevoelig).
| Aanroep | Wat |
|---|---|
POST /v1/Businesses/{business_name}/DataExports | Vraagt een export aan |
GET /v1/Businesses/{business_name}/DataExports | De exports van de laatste 7 dagen |
GET /v1/Businesses/{business_name}/DataExports/{id} | Eén export |
GET /v1/Businesses/{business_name}/DataExports/{id}/Download | Een downloadlink voor een export die klaar is |
Een export
{
"id": "6f1c2a7e-3b0d-4e8a-9f43-1d2c3b4a5e6f",
"status": "Running",
"requestedBy": "AbC123@clients",
"requestedByName": null,
"requestedAt": "2026-10-01T08:00:00Z",
"startedAt": "2026-10-01T08:00:07Z",
"finishedAt": null,
"progress": "bestanden 1240/3100",
"sizeBytes": null,
"error": null,
"expiresAt": null
}
| Veld | Betekenis |
|---|---|
| id | Kenmerk van de export |
| status | Queued, Running, Ready, Failed of Expired (zie hieronder) |
| requestedBy, requestedByName | Wie de export aanvroeg. Bij een koppeling is dat de client, zonder naam. |
| requestedAt, startedAt, finishedAt | Tijdstippen in UTC |
| progress | Voortgang als tekst, bedoeld om te tonen. Bouw er niet op: de tekst kan veranderen. |
| sizeBytes | Grootte van de zip in bytes, als hij klaar is |
| error | Reden als de export mislukt is |
| expiresAt | Tot wanneer de zip te downloaden is (7 dagen na het maken) |
| Status | Betekenis |
|---|---|
Queued | Aangevraagd, nog niet begonnen |
Running | Wordt gemaakt. Dat duurt van enkele minuten tot langer, afhankelijk van het aantal bestanden. |
Ready | Klaar om te downloaden |
Failed | Mislukt, zie error. Vraag een nieuwe export aan. |
Expired | Niet meer te downloaden. Vraag een nieuwe export aan. |
Aanvragen
POST zonder body.
| Antwoord | Betekenis |
|---|---|
202 Accepted | Aangevraagd. Het antwoord is de nieuwe export. |
200 OK | Er liep al een export voor deze business. Het antwoord is die export. |
429 Too Many Requests | Meer dan 5 aanvragen in 24 uur. De header Retry-After en het veld retryAt zeggen wanneer het weer kan. |
Downloaden
Als de status Ready is, geeft GET .../{id}/Download:
{
"url": "https://...blob.core.windows.net/...",
"expiresAt": "2026-10-01T08:30:00Z"
}
Download het bestand van url met een gewone GET, zonder Authorization-header. Het heet appset-export-<business>-<jjjj-mm-dd>.zip. De link is 15 minuten geldig; vraag daarna een nieuwe. Elke download wordt bij ons vastgelegd. Is de export niet Ready, dan komt er 409 Conflict met de huidige status.
Fouten
| Code | Betekenis |
|---|---|
401 | Geen token, of een verlopen token |
403 | Het token hoort niet bij deze business |
404 | Business of export niet gevonden |
409 | De export is niet klaar om te downloaden |
429 | Limiet bereikt, zie Retry-After |
Limieten
- Eén export tegelijk per business.
- Maximaal 5 aanvragen per business per 24 uur.
- Een zip blijft 7 dagen beschikbaar.
- Vraag de status niet vaker op dan eens per 30 seconden.
Compleet voorbeeld
Met curl en jq:
TOKEN=$(curl -s --request POST https://id.trinitisolutions.nl/oauth/token \
--header 'content-type: application/json' \
--data '{"grant_type":"client_credentials","client_id":"<client_id>","client_secret":"<client_secret>","audience":"https://api.appset.nl/"}' \
| jq -r .access_token)
API=https://api.appset.nl/v1/Businesses/<business_name>/DataExports
ID=$(curl -s -X POST -H "Authorization: Bearer $TOKEN" $API | jq -r .id)
until [ "$(curl -s -H "Authorization: Bearer $TOKEN" $API/$ID | jq -r .status)" = "Ready" ]; do sleep 60; done
URL=$(curl -s -H "Authorization: Bearer $TOKEN" $API/$ID/Download | jq -r .url)
curl -s -o export.zip "$URL"
Gaat de status naar Failed, dan blijft deze lus wachten. Controleer in een echte koppeling ook op Failed en Expired. Controleer de zip daarna met het script op Het formaat van de export.