--- openapi: 3.0.1 info: title: Doorstroomtoetsketen description: |- Dit is de OAS-definitie versie 1.1.0 van de Doorstroomtoetsketen vanaf schooljaar 2025-2026. Deze versie is gebaseerd op aanpassingen (t.o.v. versie 1.0.1) zoals besloten tijdens het ketenoverleg van 17 april 2025 en 26 juni 2025: + Uitwisseling van voorlopig schooladviezen toegevoegd (zie POST /registeren-schooladviezen met object Schooladviezenlijst in verzoek). In deze OAS-definitie zijn de volgende elementen toegevoegd (t.o.v. versie 1.0.1): + endpoint /registreren-schooladviezen + schema Schooladviezenlijst + schema AdviesEntry + schema Schooladviestype_enum Verdere significante wijzigingen zijn: + verplichte waarde voor veld versie (over afspraakversie) in de diverse berichten gewijzigd in Doorstroomtoetsketen_v1.1 (was Doorstroomtoetsketen_v1.0) + voorbeeldwaarde voor veld schooljaar in de diverse berichten gewijzigd in 2025-2026 (was 2023-2024) contact: name: Jos van der Arend (Kennisnet) url: https://app.swaggerhub.com/apis-docs/Kennisnet/Doorstroomtoets/1.1 email: J.vanderArend@kennisnet.nl version: 1.1.0 servers: - url: https://virtserver.swaggerhub.com/Kennisnet/Doorstroomtoets/1.1.0 description: SwaggerHub API Auto Mocking - url: https://doorstroomtoets.edustandaard.nl/v1.1 tags: - name: Toetsdeelnemers description: API-definities voor de uitwisseling van de doorstroomtoetsdeelnemers - name: Toetsresultaten description: API-definities voor de uitwisseling van de doorstroomtoetsresultaten paths: /registreren: post: tags: - Toetsdeelnemers summary: Registreren doorstroomtoetsdeelnemers description: Registreren van de lijst met deelnemers aan de doorstroomtoets volgens mutatielevering aan de toetsleverancier. Iedere aanlevering van het mutatiebericht met de deelnemerslijst is een aanvulling van nieuwe deelnemers en/of wijziging van bestaande deelnemers op de verzameling van eerder verstuurde deelnemergegevens. Middels dit mutatiebericht kunnen geen deelnemers worden verwijderd. operationId: registrerenToetsdeelnemers parameters: - name: edu-to in: query description: "Dit geeft aan namens welke school de toetsleverancier het bericht ontvangt. De waarde is het School OIN (omdat het routeringskenmerk voor de toetsleverancier in het OSR vooralsnog niet bestaat). Deze parameter is verplicht volgens de Edukoppeling REST/SaaS-profiel. De waarde is code van 20 karakters, met alleen cijfers en letters." required: true style: form explode: false schema: pattern: "(\\d|\\D){20}" type: string example: 0000000700011BB00000 - name: edu-from in: query description: "Dit geeft aan namens welke school de LAS-leverancier het bericht verzendt. De waarde is het routeringskenmerk van de betreffende schooladministratie. Deze parameter is verplicht volgens de Edukoppeling REST/SaaS-profiel. Let op, de waarde van deze parameter wordt door de ontvangende toetsleverancier opgeslagen om te worden gebruikt bij de aanlevering van de doorstroomtoetsresultaten. De waarde is code van 20 karakters, met alleen cijfers en letters." required: true style: form explode: false schema: pattern: "(\\d|\\D){20}" type: string example: 0000000700011BB00530 requestBody: description: Deelnemerslijst content: application/json: schema: $ref: '#/components/schemas/Deelnemerslijst' examples: Lijst met 1 deelnemer: value: datumtijd: 2025-07-03T11:44:00Z auteur: Applicatie xyz versie: Doorstroomtoetsketen_v1.1 profiel: Toetsdeelnemers schooljaar: 2025-2026 deelnemersgroep: instellingscode: 99XX vestigingscode: "00" onderwijsaanbiedercode: 123A123 onderwijslocatiecode: 123X123 administratienr: "99" groepen: - label: Stamgroep id: groep-abc123 omschrijving: 8A niveau: label: Jaargroep niveau: "8" deelnemers: - label: Leerling deelnemerref: - label: ECK-iD onderwijsdeelnemerID: leerling-abc123 achternaam: Achternaam voorvoegsel: van der roepnaam: Aatje groep: groep-abc123 niveau: label: Jaargroep niveau: "8" extensie: label: Demografisch voorletters: ABC geboortedatum: 2011-07-12 geslacht: 1 Lijst met meer deelnemers: value: datumtijd: 2025-07-03T11:44:00Z auteur: Applicatie xyz versie: Doorstroomtoetsketen_v1.1 profiel: Toetsdeelnemers schooljaar: 2025-2026 deelnemersgroep: instellingscode: 99XX vestigingscode: "00" onderwijsaanbiedercode: 123A123 onderwijslocatiecode: 123X123 administratienr: "99" groepen: - label: Stamgroep id: groep-abc123 omschrijving: 8A niveau: label: Jaargroep niveau: "8" deelnemers: - label: Leerling deelnemerref: - label: ECK-iD onderwijsdeelnemerID: leerling-abc123 achternaam: Achternaam01 voorvoegsel: van der roepnaam: Roepnaam01 groep: groep-abc123 niveau: label: Jaargroep niveau: "8" extensie: label: Demografisch voorletters: ABC geboortedatum: 2011-05-12 geslacht: 1 - label: Leerling deelnemerref: - label: LAS-key onderwijsdeelnemerID: leerling-ajhdieh4841ejddal achternaam: Achternaam02 roepnaam: Roepnaam02 groep: groep-abc123 niveau: label: Jaargroep niveau: "7" extensie: label: Demografisch voorletters: DEF geboortedatum: 2012-05-12 geslacht: 2 required: true responses: "202": description: Bericht succesvol ontvangen en wordt asynchroon verwerkt. content: application/json: schema: $ref: '#/components/schemas/Ontvangstmelding' "401": description: Verzender en/of ontvanger van bericht is niet geautoriseerd door de betreffende school. content: application/json: schema: $ref: '#/components/schemas/Ontvangstmelding' "403": description: Inschrijving is gesloten. content: application/json: schema: $ref: '#/components/schemas/Ontvangstmelding' "405": description: School is (nog) niet bekend bij de toetsleverancier. content: application/json: schema: $ref: '#/components/schemas/Ontvangstmelding' "422": description: Bericht ontvangen maar heeft ongeldige berichtinhoud. content: application/json: schema: $ref: '#/components/schemas/Ontvangstmelding' x-codegen-request-body-name: body /registreren-schooladviezen: post: tags: - Toetsdeelnemers summary: Registreren voorlopig schooladviezen description: Registreren van de lijst met voorlopig schooladviezen van de deelnemers aan de doorstroomtoets volgens mutatielevering aan de toetsleverancier. Iedere aanlevering van het mutatiebericht is een aanvulling van nieuwe adviezen en/of wijziging van bestaande adviezen. Middels dit mutatiebericht kunnen geen adviezen worden verwijderd. operationId: registrerenSchooladviezen parameters: - name: edu-to in: query description: Dit geeft aan namens welke school de toetsleverancier het bericht ontvangt. De waarde is het School OIN (omdat het routeringskenmerk voor de toetsleverancier in het OSR vooralsnog niet bestaat). Deze parameter is verplicht volgens de Edukoppeling REST/SaaS-profiel. De waarde is code van 20 karakters, met alleen cijfers en letters. required: true style: form explode: false schema: pattern: (\d|\D){20} type: string example: 0000000700011BB00000 - name: edu-from in: query description: Dit geeft aan namens welke school de LAS-leverancier het bericht verzendt. De waarde is het routeringskenmerk van de betreffende schooladministratie. Deze parameter is verplicht volgens de Edukoppeling REST/SaaS-profiel. De waarde is code van 20 karakters, met alleen cijfers en letters. required: true style: form explode: false schema: pattern: (\d|\D){20} type: string example: 0000000700011BB00530 requestBody: description: Lijst met voorlopig schooladviezen van de deelnemers aan de doorstroomtoets. content: application/json: schema: $ref: '#/components/schemas/Schooladviezenlijst' examples: Lijst met 1 advies: value: datumtijd: '2025-06-26T11:44:00Z' auteur: Applicatie xyz versie: Doorstroomtoetsketen_v1.1 profiel: Schooladviezen schooljaar: 2025-2026 deelnemersgroep: instellingscode: 99XX vestigingscode: '00' onderwijsaanbiedercode: 123A123 onderwijslocatiecode: 123X123 administratienr: '99' voorlopigSchooladviezen: - deelnemerref: - label: ECK-iD onderwijsdeelnemerID: leerling-abc123 advies: VSO Lijst met meer adviezen: value: datumtijd: '2025-06-26T11:44:00Z' auteur: Applicatie xyz versie: Doorstroomtoetsketen_v1.1 profiel: Schooladviezen schooljaar: 2025-2026 deelnemersgroep: instellingscode: 99XX vestigingscode: '00' onderwijsaanbiedercode: 123A123 onderwijslocatiecode: 123X123 administratienr: '99' voorlopigSchooladviezen: - deelnemerref: - label: ECK-iD onderwijsdeelnemerID: leerling-abc123 - label: LAS-key onderwijsdeelnemerID: leerling-def234 advies: HAVO_TM_VWO - deelnemerref: - label: LAS-key onderwijsdeelnemerID: leerling-ghj345 advies: VWO required: true responses: '202': description: Bericht succesvol ontvangen en wordt asynchroon verwerkt. content: application/json: schema: $ref: '#/components/schemas/Ontvangstmelding' '401': description: Verzender en/of ontvanger van bericht is niet geautoriseerd door de betreffende school. content: application/json: schema: $ref: '#/components/schemas/Ontvangstmelding' '403': description: Aanlevering schooladviezen is gesloten. content: application/json: schema: $ref: '#/components/schemas/Ontvangstmelding' '405': description: School is (nog) niet bekend bij de toetsleverancier. content: application/json: schema: $ref: '#/components/schemas/Ontvangstmelding' '422': description: Bericht ontvangen maar heeft ongeldige berichtinhoud. content: application/json: schema: $ref: '#/components/schemas/Ontvangstmelding' x-codegen-request-body-name: body /leerlingresultaat: post: tags: - Toetsresultaten summary: Overdragen leerlingresultaat description: "Aanlevering van score- en resultaatgegevens van een leerling op de doorstroomtoets volgens standlevering, d.w.z. iedere laatste aanlevering van de leerling is de meest actuele en volledige verzameling leerlingresultaatgegevens, exclusief het leerlingrapport. Deze overdracht kan nieuw zijn (eerste aanlevering) of een update (alle vervolgleveringen)." operationId: postLeerlingresultaat parameters: - name: edu-to in: query description: "Dit geeft aan namens welke school de LAS-leverancier het bericht ontvangt. De waarde is het routeringskenmerk van de betreffende schooladministratie. Deze parameter is verplicht volgens de Edukoppeling REST/SaaS-profiel. Let op, de waarde komt uit de \"edu-from\" query parameter zoals meegezonden in de aanlevering van doorstroomtoetsdeelnemers. De waarde is code van 20 karakters, met alleen cijfers en letters." required: true style: form explode: false schema: pattern: "(\\d|\\D){20}" type: string example: 0000000700011BB00530 - name: edu-from in: query description: "Dit geeft aan namens welke school de toetsleverancier het bericht verzendt. De waarde is hetSchool OIN (omdat het routeringskenmerk voor de toetsleverancier in het OSR vooralsnog niet bestaat). Deze parameter is verplicht volgens de Edukoppeling REST/SaaS-profiel. De waarde is code van 20 karakters, met alleen cijfers en letters." required: true style: form explode: false schema: pattern: "(\\d|\\D){20}" type: string example: 0000000700011BB00000 requestBody: description: Leerlingresultaat met score- en resultaatgegevens van een leerling op de doorstroomtoets. content: application/json: schema: $ref: '#/components/schemas/Leerlingresultaat' examples: Leerlingresultaat: value: datumtijd: 2025-07-02T11:44:00Z auteur: Toetssysteem xyz versie: Doorstroomtoetsketen_v1.1 profiel: Leerlingtoetsresultaat schooljaar: 2025-2026 resultatenscores: id: resultatenscores-abc123 deelnemerref: - label: ECK-iD onderwijsdeelnemerID: leerling-abc123 versie: Definitief datumtijd: 2023-05-05T11:44:00Z toetsdefinitie: ICE afnamecontext: afname: id: afname-abc123 afnametijdstip: 2023-04-28T11:44:00Z scores: id: scores-abc123 scores: - label: Toetsscore id: score-def456 waarde: 100 - label: Aantal opgaven id: score-abc123 waarde: 50 resultaten: aanvullendeinfo: "toetsleverancier-endpoint/dst/leerlingrapport/{rapportid}" resultaten: - label: Toetsadvies waarde: vwo - label: Referentieniveau toetseenheid: REKENEN waarde: 1S - label: Referentieniveau toetseenheid: LEZEN waarde: 1F - label: Referentieniveau toetseenheid: TAALVERZORGING waarde: L1F toets: label: Doorstroomtoets id: ICE naam: IEP Doorstroomtoets versie: IEP papier url: https://iepdoorstroomtoets.nl omschrijving: blabla toetsonderdelen: - label: Onderdeel id: REKENEN omschrijving: Rekenen - label: Onderdeel id: NEDERLANDSE_TAAL toetsonderdelen: - label: Domein id: LEZEN omschrijving: Lezen - label: Domein id: TAALVERZORGING omschrijving: Taalverzorging required: true responses: "202": description: Bericht succesvol ontvangen en wordt asynchroon verwerkt. content: application/json: schema: $ref: '#/components/schemas/Ontvangstmelding' "401": description: Verzender en/of ontvanger van bericht is niet geautoriseerd door de betreffende school. content: application/json: schema: $ref: '#/components/schemas/Ontvangstmelding' "405": description: School is niet bekend bij ontvanger. content: application/json: schema: $ref: '#/components/schemas/Ontvangstmelding' "422": description: Bericht ontvangen maar heeft ongeldige berichtinhoud. content: application/json: schema: $ref: '#/components/schemas/Ontvangstmelding' x-codegen-request-body-name: body /leerlingrapport/{rapportid}: get: tags: - Toetsresultaten summary: Opvragen leerlingrapport description: Opvragen van het leerlingrapport van een specifieke leerling als resultaat op de doorstroomtoets. operationId: getresourceleerlingrapportRapportid parameters: - name: rapportid in: path description: Het id van het leerlingrapport required: true style: simple explode: false schema: type: string example: fceea73b-4aab-48fc-9f92-52f8b9230ca8 - name: edu-to in: query description: "Dit geeft aan namens welke school de toetsleverancier het bericht ontvangt. De waarde is het School OIN (omdat het routeringskenmerk voor de toetsleverancier in het OSR vooralsnog niet bestaat). Deze parameter is verplicht volgens de Edukoppeling REST/SaaS-profiel. De waarde is code van 20 karakters, met alleen cijfers en letters." required: true style: form explode: false schema: pattern: "(\\d|\\D){20}" type: string example: 0000000700011BB00000 - name: edu-from in: query description: "Dit geeft aan namens welke school de LAS-leverancier het bericht verzendt. De waarde is het routeringskenmerk van de betreffende schooladministratie. Deze parameter is verplicht volgens de Edukoppeling REST/SaaS-profiel. De waarde is code van 20 karakters, met alleen cijfers en letters." required: true style: form explode: false schema: pattern: "(\\d|\\D){20}" type: string example: 0000000700011BB00530 responses: "200": description: "Operatie succesvol, leerlingrapport in PDF-formaat." content: application/pdf: schema: type: string format: binary "204": description: "Operatie succesvol, geen leerlingrapport beschikbaar." content: application/json: schema: $ref: '#/components/schemas/Ontvangstmelding' "404": description: Leerlingrapport niet bekend. content: application/json: schema: $ref: '#/components/schemas/Ontvangstmelding' x-codegen-request-body-name: body components: schemas: AdviesEntry: required: - deelnemerref - advies type: object properties: deelnemerref: title: Leerling maxItems: 2 minItems: 1 type: array description: Verwijzing naar betreffende leerling die het advies betreft middels een identifier in het blok LeerlingIdentiteit, zie LeerlingIdentiteit (DeelnemerIdentiteitEntry). Let op, bij dubbele LeerlingIdentiteiten is het ECK-iD leidend. items: $ref: '#/components/schemas/DeelnemerIdentiteitEntry' advies: $ref: '#/components/schemas/Schooladviestype_enum' Afname: required: - afnametijdstip - id type: object properties: id: title: Id minLength: 1 type: string description: "Verwijsbare identificatie van deze afnamegegevens, minimaal uniek binnen de scope van de doorstroomtoets." example: afname-abc123 afnametijdstip: title: Afnametijdstip type: string description: "Datum en tijdstip van start van de afname van de doorstroomtoets. Waarde is datum en tijdstip volgens formaat ISO 8601, d.w.z. beginnend met EEYY-MM-DDTuu:mm:ss. Indien alleen datum bekend is, hier als tijdstip '00:00:00' invullen, bijvoorbeeld '2020-06-15T00:00:00Z'." format: date-time example: 2022-01-06T15:00:00Z description: Enkelvoudige contextbeschrijving waarop de doorstroomtoets is afgenomen. Afnamecontext: required: - afname type: object properties: afname: $ref: '#/components/schemas/Afname' description: Context (datumtijdstip) waarin de doorstroomtoets is afgenomen. DeelnemerIdentiteitEntry: required: - label - onderwijsdeelnemerID type: object properties: label: $ref: '#/components/schemas/LeerlingIdsoort_enum' onderwijsdeelnemerID: title: OnderwijsdeelnemerID type: string description: Betekenisvolle identifier binnen de door het label aangegeven aanduiding van identifiers. example: leerling-abc123 description: |- Verwijzing naar informatie over de persoon in de vorm van een identifier van de persoon in een bepaalde registratie. Voorbeelden van identificatiewijzen zijn ECKiD, BSN, Onderwijsnummer, of elke andere registratie (bijvoorbeeld LAS, SIS of HR-systeem) waaraan een identiteit kan worden ontleend. Afhankelijk van de toepassing is het gebruik van bepaalde vormen van identificatie al dan niet toegestaan. Deelnemersgroep: required: - administratienr - instellingscode - onderwijsaanbiedercode - onderwijslocatiecode - vestigingscode type: object properties: instellingscode: title: Instellingscode type: string description: Identificatie van de deelnemersgroep als de code van de instellingserkenning binnen RIO. Waarde altijd tekst van 4 karakters (2 cijfers en 2 letters). example: 99XX vestigingscode: title: Vestigingscode type: string description: De code van de vestigingserkenning binnen RIO behorende bij de deelnemersgroep. Waarde altijd tekst van 2 karakters (2 cijfers). example: "00" onderwijsaanbiedercode: title: OnderwijsaanbiederID type: string description: "De code van de onderwijsaanbieder binnen RIO behorende bij de deelnemersgroep. Waarde altijd tekst van 7 karakters (3 cijfers, letter A, 3 cijfers)." example: 123A123 onderwijslocatiecode: title: Onderwijslocatiecode type: string description: "De code van de onderwijslocatie binnen RIO behorende bij de deelnemersgroep. Waarde altijd tekst van 7 karakters (3 cijfers, letter X, 3 cijfers)." example: 123X123 administratienr: title: Administratienummer type: string description: Identificatie van de deelnemersgroep m.b.t. een door de onderwijsaanbieder in het LAS ingevoerd nummer. Het is de formele Vestigingscode of een vestigingsvolgnummer dat buiten deze uitwisseling geen betekenis heeft (dus geen formele Vestigingscode). Het dient vooral om verschillende administraties binnen de context van de dezelfde overige codes binnen dit gegevensblok te kunnen onderscheiden. Waarde altijd tekst van 2 karakters (2 cijfers). example: "99" description: Gegevens over de groep leerlingen van de Deelnemerslijst waarop de leerlinggegevens betrekking hebben. Dit blok is verplicht en komt exact 1 keer voor. Deelnemerslijst: required: - auteur - datumtijd - deelnemers - deelnemersgroep - groepen - profiel - schooljaar - versie type: object properties: datumtijd: title: Datumtijd type: string description: "Datum en tijdstip van aanmaken van de Deelnemerslijst. Waarde is datum en tijdstip volgens formaat ISO 8601, d.w.z. beginnend met EEYY-MM-DDTuu:mm:ss." format: date-time example: 2023-04-06T17:00:00Z auteur: title: Auteur minLength: 1 type: string description: "De persoon, applicatie en/of organisatie die de Deelnemerslijst heeft gemaakt." example: Applicatie xyz versie: title: Afspraakversie minLength: 1 type: string description: De versie van de afspraak volgens welke de Deelnemerslijst is opgemaakt; waarde is voor de huidige specs altijd "Doorstroomtoetsketen_v1.1". example: Doorstroomtoetsketen_v1.1 enum: - Doorstroomtoetsketen_v1.1 profiel: title: Profiel minLength: 1 type: string description: Het profiel volgens welke de Deelnemerslijst is opgemaakt; waarde is altijd "Toetsdeelnemers". example: Toetsdeelnemers enum: - Toetsdeelnemers schooljaar: title: Schooljaar minLength: 1 type: string description: "Aanduiding van het schooljaar waarop de gegevens in de Deelnemerslijst betrekking hebben; waarde is altijd volgens patroon \"EEJJ-EEJJ\", zoals bijvoorbeeld \"2025-2026\"." example: 2025-2026 deelnemersgroep: $ref: '#/components/schemas/Deelnemersgroep' groepen: title: Stamgroepen minItems: 1 type: array description: Gegevenslijst van de stamgroepen van de Deelnemerslijst waarop de leerlinggegevens betrekking hebben. Minimaal 1 Stamgroep is verplicht en er kunnen meerdere Stamgroepen voorkomen. items: $ref: '#/components/schemas/Groep' deelnemers: title: Leerlingen minItems: 1 type: array description: Gegevenslijst van de leerlingen in de Deelnemerslijst. Minimaal 1 Leerling is verplicht en er kunnen meerdere leerlingen voorkomen. items: $ref: '#/components/schemas/Onderwijsdeelnemer' description: Bundel van gegevens over deelnemers aan de doorstroomtoets. Demografisch: required: - geboortedatum - geslacht - label - voorletters type: object properties: label: title: Typelabel minLength: 1 type: string description: Typering van de toegevoegde gegevens van de onderwijsdeelnemer. Waarde hier altijd "Demografisch". example: Demografisch enum: - Demografisch voorletters: title: Voorletters maxLength: 6 type: string description: "De voorletters van de leerling. Waarde is verzameling letters die wordt gevormd door de eerste letter van alle in volgorde voorkomende voornamen [NEN 1888]; dus geen spaties en geen punten, maximaal 6 posities." example: ABC geboortedatum: title: Geboortedatum type: string description: "Geboortedatum van de onderwijsdeelnemer. Dit gegeven is noodzakelijk voor vermelding op het leerlingrapport. Waarde is datum volgens formaat EEYY-MM-DD van ISO 8601, bijvoorbeeld 2010-12-31." format: date geslacht: $ref: '#/components/schemas/Geslachttype_enum' description: Demografische gegevens van de onderwijsdeelnemer. Domein: required: - id - label type: object properties: label: title: Typelabel minLength: 1 type: string description: Typering van het toetsonderdeel; waarde hier altijd "Domein". example: Domein enum: - Domein id: $ref: '#/components/schemas/Domeincode_enum' omschrijving: title: Domeinomschrijving type: string description: "Naam of aanduiding van het onderdeel, bijvoorbeeld \"Nederlandse taal - Lezen\"." example: Nederlandse taal - Lezen toetsonderdelen: title: Subdomeinen minItems: 0 type: array description: Gegevenslijst van de subdomeinen van een domein binnen de doorstroomtoets. items: $ref: '#/components/schemas/Subdomein' description: "Onderdeel van onderdeel van doorstroomtoets, bijvoorbeeld Taalverzorging en Lezen binnen het onderdeel Nederlandse taal." Domeincode_enum: type: string description: Waardelijst voor typering van domein van doorstroomtoets.