Winstwaker API Referentie (v1)
Begin hier: eerst de beschikbare endpoints, daarna authenticatie, respons-format en per route een werkend request-, response- en errorvoorbeeld. Alle voorbeelden op deze pagina gebruiken directe HTTP-calls via fetch, requests of curl.
Voor AI-tools is de snelste route meestal: eerst /api/developers/markdown voor de platte docs, en daarna /api/developers/openapivoor de exacte schema's en velden.
Belangrijkste endpoints
Klik een route om direct naar de details en codevoorbeelden te springen.
Statuscheck
Publieke statuscheck zonder API key.
Creditsaldo
Haal live, test of gecombineerde creditbalansen op.
Credit-events
Bekijk reserveringen, commits en refunds met paginatie.
Gebruiks-overzicht
Totaaltellingen per dag of maand voor je API-verbruik.
BTW indienen
Dien een omzetbelastingaangifte in via Winstwaker.
ICP indienen
Dien een ICP-opgaaf in met entries per EU-afnemer.
OSS indienen
Dien een OSS-melding in voor scheme OBU.
Dividendbelasting indienen
Dien een dividendbelastingaangifte in met beneficiaries.
VPB indienen
Dien een VPB-aangifte in via Digipoort met officiële XBRL in live mode en smoke/test XBRL in test mode.
IB-uitstel indienen
Dien een officiële becon-uitstelbatch in voor belastingjaar 2024 of 2025.
Zo gebruik je een endpoint
- 1. Kies een route en gebruik de voorbeeldpayload uit de rechterkolom als startpunt.
- 2. Stuur headers mee: voor bijna alles
Authorization: Bearer ...; voor elkePOSTookIdempotency-KeyenContent-Type: application/json. - 3. Bewaar
data.request_iduit de submit-response. - 4. Poll daarna de statusroute met dat
request_id, meestal metrefresh=true. - 5. Lees status + foutcode uit
status,messageenerrors.code.
Wat is bijna altijd nodig?
- GET health: geen API key nodig.
- Andere GET-routes: bearer-token verplicht.
- Elke POST-route: bearer-token,
Idempotency-Keyen JSON-body verplicht. - Filing-routes: meestal ook
ob_nummeren een periode. - Status ophalen: gebruik hetzelfde
request_iddat je na submit terugkrijgt.
https://winstwaker.nl/api/developers/llms als contextbron.Authenticatie
Alleen GET /v1/health is publiek. Alle andere routes gebruiken bearer-auth en voor elke create-call moet je ook een stabiele Idempotency-Key meesturen.
Minimale POST-opbouw
POST /v1/icp/returns
Authorization: Bearer ww_live_...
Idempotency-Key: icp-2026-q1-001
Content-Type: application/json
{
"ob_nummer": "NL123456789B01",
"periode": "2026-Q1",
"entries": [...]
}GET /v1/healthis publiek.- Alle andere endpoints vereisen
Authorization: Bearer .... ww_live_...voor live mode,ww_test_...voor test mode.- Create POST routes vereisen altijd
Idempotency-Key. - Gebruik voor retries exact dezelfde
Idempotency-Keyzolang de payload gelijk blijft.
Respons-structuur
{
"ok": true,
"request_id": "uuid",
"mode": "live",
"status": "ACCEPTED | SUBMITTED | ...",
"message": "Leesbare status",
"data": {},
"breakdown": {},
"errors": null
}{
"ok": false,
"request_id": "uuid",
"mode": "live",
"status": "ERROR",
"message": "Leesbare foutmelding",
"data": null,
"breakdown": null,
"errors": { "code": "AUTH_INVALID_KEY", "details": {} }
}Rate-limieten
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset.- Bij
429 RATE_LIMIT_EXCEEDEDwordt ookRetry-Aftermeegestuurd.
Foutcodes
AUTH_MISSING_BEARER,AUTH_INVALID_KEY,AUTH_IP_NOT_ALLOWED.AUTH_SCOPE_MISSING,AUTH_KEY_MODE_MISMATCH.RATE_LIMIT_EXCEEDED.VALIDATION_MISSING_IDEMPOTENCY_KEY,VALIDATION_BLOCKED.CONFLICT_IDEMPOTENCY,REQUEST_NOT_FOUND.CREDITS_INSUFFICIENT,DIGIPOORT_SUBMIT_FAILED.
Webhook-aflevering voor deze developer-v1 flow is momenteel niet publiek gedocumenteerd; gebruik status-endpoints met refresh=true.
Statuscheck (publiek)
Geeft operational of degraded terug.
- 200: service is operationeel.
- 503: service is degraded (bijv. datastore tijdelijk niet bereikbaar).
Haal creditsaldo op
Optionele query: mode=live|test. Zonder mode krijg je beide balansen.
- 200: saldo(s) opgehaald.
- Typische foutcodes:
AUTH_MISSING_BEARER,AUTH_INVALID_KEY,RATE_LIMIT_EXCEEDED.
Haal credit-events op
mode=live|test(optioneel).limit(default 25, max 100).cursorvoor paginatie.
- 200: events met
next_cursor. - Typische foutcodes:
VALIDATION_INVALID_MODE, auth-fouten en rate-limitfouten.
Gebruiks-overzicht
Query: period=day|month (default day).
- 200: aggregatie van
successful,failed,blocked,pending. - Typische foutcodes:
VALIDATION_INVALID_PERIOD, auth-fouten en rate-limitfouten.
Dien omzetbelasting in
- Verplicht:
Idempotency-Key. - Gebruik
ob_nummerofobNummer. - Gebruik
periodeinYYYY-Q[1-4]ofyear+quarter. - Input via
vatData/vat_dataof quickstart metomzet+btw_hoog.
- 202 bij succesvolle submit, 200 bij idempotent replay.
- Typische foutcodes:
VALIDATION_MISSING_IDEMPOTENCY_KEY,VALIDATION_BLOCKED,CONFLICT_IDEMPOTENCY,CREDITS_INSUFFICIENT,DIGIPOORT_SUBMIT_FAILED.
BTW status opvragen
refresh=true|false(default true).- Respons bevat endpoint-status, Digipoort metadata en eventuele foutcontext.
- 200 bij gevonden request, 404 met
REQUEST_NOT_FOUNDals request onbekend is.
Dien ICP-opgaaf in
- Verplicht:
Idempotency-Key. - Gebruik
ob_nummerofobNummerplusperiodeofyear+quarter. - Vul
entries[]met minimaalcountry_code,vat_numberen een bedrag.typeisL,DofB. - 202 bij succesvolle submit, 200 bij idempotent replay.
- Typische foutcodes:
VALIDATION_BLOCKED,CONFLICT_IDEMPOTENCY,CREDITS_INSUFFICIENT,DIGIPOORT_SUBMIT_FAILED.
ICP status opvragen
refresh=true|false(default true).- Respons bevat de huidige request-status plus Digipoort metadata zoals
winstwaker_kenmerk,aanleverkenmerken statussen. - Digipoort-codes zoals
301en405zijn voortgangssignalen; ze betekenen niet automatisch afkeur. - 200 bij gevonden request, 404 met
REQUEST_NOT_FOUNDals request onbekend is.
Dien OSS-melding in
- Scope is nu
OBU(Unieregeling). - Verplicht:
Idempotency-Key, periode en minimaal 1 regel inlines[]. - Gebruik per regel
member_state_of_consumption,supply_type,member_state_type,eu_member_state,rate_type,rateentaxable_amount. corrections[]is optioneel voor correcties per lidstaat.- 202 bij succesvolle submit, 200 bij idempotent replay.
OSS status opvragen
refresh=true|false(default true).- Respons bevat endpoint-status, Digipoort metadata en eventuele foutcontext.
- Ook voor OSS zijn
301en405normale voortgangssignalen in de keten. - 200 bij gevonden request, 404 met
REQUEST_NOT_FOUNDals request onbekend is.
Dien dividendbelasting in
- Verplicht:
Idempotency-Key. - Verplicht:
distributionDate,grossDividend,dividendTax,netDividend. - Verplicht:
withholdingEntityName,withholdingEntityRsin,beneficiaries[]. - 202 bij succesvolle submit, 200 bij idempotent replay.
- Typische foutcodes:
VALIDATION_BLOCKED,CONFLICT_IDEMPOTENCY,CREDITS_INSUFFICIENT,DIGIPOORT_SUBMIT_FAILED.
Dividend status opvragen
refresh=true|false(default true).- Respons bevat Digipoort metadata inclusief
winstwaker_kenmerken statussen. - 200 bij gevonden request, 404 met
REQUEST_NOT_FOUNDals request onbekend is.
Dien VPB in
- Verplicht:
Idempotency-Key. - Verplicht:
fiscalYear,rsinentaxableProfit. - Voor aangeleverde officiële VPB XBRL is minimaal
fiscalYear,rsinenxbrlContentnodig. - Optioneel:
lossCarryForward,innovationBoxProfit,innovationBoxRate,filingReference,xbrlContenten software metadata. Voor een officiële nul-aangifte gebruik jezeroReturnsamen metcompanyName,bookYearStart,bookYearEnd,taxpayerType. Desoftware*velden zijn optionele overrides; standaard hergebruikt Winstwaker dezelfde Digipoort software metadata als de andere belastingstromen. - Geldbedragen gebruiken maximaal 2 decimalen.
innovationBoxRategebruikt maximaal 4 decimalen. Overpreciese input wordt geblokkeerd in plaats van stil afgerond. - In live mode is officiële VPB XBRL verplicht via
xbrlContent, inclusief een officiëleschemaRefnaar de actuele VPB taxonomy, tenzij jezeroReturngebruikt met de vereiste nul-aangiftevelden zodat Winstwaker zelf een officiële instance opbouwt.xbrlContentenzeroReturnmogen niet samen worden gebruikt. Momenteel zijn live de jaren2024en2025geconfigureerd. In test mode mag Winstwaker generated smoke/test XBRL gebruiken. - 202 bij succesvolle submit, 200 bij idempotent replay.
- Typische foutcodes:
VALIDATION_BLOCKED,CONFLICT_IDEMPOTENCY,CREDITS_INSUFFICIENT,DIGIPOORT_SUBMIT_FAILED.
VPB status opvragen
refresh=true|false(default true).- Respons bevat
fiscal_year,rsin,xbrl_source,submissionen Digipoort metadata. - Bij statusrefresh worden Digipoort statussen teruggegeven in
data.digipoort.statuses. - Controleer
data.digipoort.refreshom te zien of de laatste refresh rechtstreeks uit Digipoort kwam of uit cache. - 200 bij gevonden request, 404 met
REQUEST_NOT_FOUNDals request onbekend is.
Dien IB-uitstel in
- Verplicht:
Idempotency-Key. - Verplicht:
fiscalYearoffiscal_yearmet waarde2024of2025. - In test mode verplicht:
consultant.identificationNumber(9 cijfers),consultant.beconNumber(6 cijfers),consultant.surnameen minimaal 1requests[]regel. In live mode magconsultantwegblijven als Winstwaker een globale admin-config heeft opgeslagen. - Voor aanvullend uitstel gebruik je
requestType = 6ofaanvullend_uitstelplus verplichtespecialMotivation. - 202 betekent technische Digipoort-submit; inhoudelijke toekenning of afwijzing volgt daarna via SBU.
- Typische foutcodes:
VALIDATION_BLOCKED,CONFLICT_IDEMPOTENCY,CREDITS_INSUFFICIENT,DIGIPOORT_SUBMIT_FAILED.
IB-uitstel status opvragen
refresh=true|false(default true).- Respons bevat zowel
data.digipoortvoor transportstatus alsdata.business_statusvoor de SBU-handoff. business_status.grant_status = PENDING_SBUbetekent nog geen inhoudelijke beslissing.- Bekende business-uitkomsten zijn
Toegewezen,Afgewezen,ParkeerplaatsenNaar handmatig. - 200 bij gevonden request, 404 met
REQUEST_NOT_FOUNDals request onbekend is.
