...
De Events API is de technische implementatie van het transactiepatroon Abonneren op wijzigen middels notificaties en Georkestreerde uitwisseling.
De technische specificatie bestaat uit:
...
Scopes |
|
Producer |
|
Consumer |
|
Berichten | EventNotification |
Endpoints | POST Subscribe to notifications POST Receive eventsnotifications POST Receive one eventPOST Request Initial Seednotification GET Get Eventsnotifications GET Get SchemaVersions |
Berichtdefinitie:
...
Notification
Een Event bevat alle informatie ten behoeve van de berichteninfrastructuur om deze als Leverancier correct te kunnen verwerken.
...
In het veld data wordt het dataobject waarvoor een event wordt verstuurd opgenomen. Dit is conform het type bericht behorende bij het dataobject. Het type bericht is opgenomen in het veld type en de gehanteerde schemaversie in het veld schemaVersion.
Zodra er meerdere Events tegelijkertijd worden verstuurd dan zijn ze gesorteerd op volgorde van aanmaken (veld created), de oudste events als eerste.
In het Ecosysteem worden Events gestuurd na een gebeurtenis en het aanmaken van een dataobject (bijvoorbeeld een nieuwe, gewijzigde of verwijderde entiteit). Al deze Events dienen te worden verwerkt door de ontvanger.
Ieder Event heeft een eigen unieke identifier id en de identifier van het dataobject objectId.
In het veld created is een tijdstempel opgenomen van de actie die als trigger heeft gediend voor het event. Deze tijdstempel betreft niet het moment van versturen of verwerken van het event. Dit veld kan door de Ontvanger gebruikt worden om berichten op volgorde te verwerken.
Voor het verwijderen van een dataobject kan door de Verzender gebruik gemaakt worden van het veld isDeleteEvent met de waarde True. Het veld data kan in dat geval leeg blijven en alleen het veld objectId is dan verplicht. Dit is tevens het signaal voor de Ontvanger dat er geen verdere berichten meer verstuurd worden voor dit dataobject.
Status code
Status
statusMessage
Toelichting
200
0
OK
Bericht succesvol verwerkt
400
1
Failing event
Schemavalidatie niet succesvol
400
2
schemaVersion not supported
De ontvanger kan de gehanteerde SchemaVersion niet verwerken
Veld | Type | Format | Omschrijving | Voorbeeld | O/V | Vullingsregel |
id | string | uuid | Unieke identifier voor Eventdeze notificatie | d290f1ee-6c54-4b01-90e6-d701748f0851 | V |
|
schemaVersion | string | string | Het versienummer van de berichtdefinitie die wordt gehanteerd. | 1.3.0 | V | Conform Semantic Versioning 2.0.0 |
typeobjectType | string | ENUM | Het type bericht dat via dit Event object waarvan een notificatie wordt verstuurd.Alle Events zoals opgenomen in deze documentatie | Student | V |
|
objectId | string | string | Identifier van het dataobject dat wordt verstuurd in het Event. | - | O | Is verplicht bij isDeleteEvent |
userIdType | string | ENUM | Het type userId dat wordt gehanteerd in het veld objectId, indien het object een user betreft. | ECKiD | O* | Indien het object dataobject een Student, Teacher Employee of StudentDelivery betreft, dan wordt hier gespecificeerd welke type userId is gehanteerd als objectId |
createdschoolId | string | datetimestring | Tijdstempel van actie die als trigger heeft gediend voor het event | 2017-07-21T17:32:28Z | V |
|
data | object | - | Het dataobject dat conform de bijbehorende berichtdefinitie wordt verstuurd. | - | O | Kan leeg blijven bij isDeleteEvent |
isDeleteEvent | boolean | boolean | Indicatie voor de ontvanger dat dit het laatste bericht is betreffende dit dataobject aangezien deze verwijderd is. | True of False | O |
|
Status- en foutcodes
Identifier van de onderwijsorganisatie waartoe het dataobject behoort. | O* | Indien het dataobject uit de SIS API komt dan is dit veld verplicht. De schoolId dient te worden gebruikt om het object op te vragen. | ||||
edu_org_id | string | string | Onderwijsorganisatie waarop de consent is geregistreerd voor de uitwisseling van het data object. | O* | Indien het dataobject uit de SIS API komt dan is dit veld verplicht. De edu_org_id dient te worden gebruikt om het object op te vragen. | |
created | string | datetime | Tijdstempel van actie die als trigger heeft gediend voor de notificatie | 2017-07-21T17:32:28Z | V |
|
url | string | string | URL naar het endpoint om het nieuwe of gewijzigde dataobject op te halen. | O | ||
isDeleteNotification | boolean | boolean | Indicatie voor de ontvanger dat dit het laatste bericht is betreffende dit dataobject aangezien deze verwijderd is. | True of False | O |
|
Status- en foutcodes
Status code | Status | statusMessage | Toelichting |
200 | 0 | OK | Bericht succesvol verwerkt |
400 | 1 | Failing event | Schemavalidatie niet succesvol |
400 | 2 | schemaVersion not supported | De ontvanger kan de gehanteerde SchemaVersion niet verwerken |
401 | 3 | scope required | Verzender is niet geautoriseerd voor scope |
403 | 4 | consent required | De gegevenssoort is van classificatie IV. Dit vereist een activering van de gegevensuitwisseling. Dit is in dit foutscenario niet het geval. |
403 | 5 | schoolIdentifier edu_org_id unknown | De Verzender communiceert in de context van een Onderwijsorganisatie die niet bekend is bij Ontvanger |
400 | 99 | Vullingsregel: in statusMessage een beschrijving van de reden opnemen | Overige reden |
Technisch: API specificatie
POC Scope
...
API specificatie
...
Open api | ||||||
---|---|---|---|---|---|---|
| ||||||
openapi: 3.0.0 info: version: 0.0.1 title: Events API components: schemasdescription: |- The Events API is schemaVersion:implemented by the `Administratiesysteemaanbieder` to allow consumers type:to stringreceive notifications about new/modified/deleted data objects from description:the 'SchemaSIS versionAPI. of this event/object using semantic versioning 2.0.0' In future versions the default: 1.3.0 Event: type: object x-tagsEvents API can also be implemented by the `Leermiddelenaanbieder` to allow consumers to receive notifications about new/modified/deleted data objects from the Catalogue API. contact: name: Edu-V Event descriptionurl: |-www.edu-v.org/afsprakenstelsel email: info@edu-v.org components: An eventschemas: is a notification that something of interest has happened withinschemaVersion: a service. A subscriber receives events withintype: anstring authorized scope and for certain events indescription: the'Schema contextversion of athis schoolobject (using consent).semantic This enables parties to communicate with each other in a loosely coupled way. The event mediator has no direct connection to any of the subscribing systems. versioning 2.0.0' default: 0.0.1 Notification: type: object Eventsx-tags: are sent after an activity of a Student or- TeacherNotification (e.g. usage, progress or results). Events aredescription: also|- sent if an object (e.g. Product, Course, Student, Group)A isnotification created,that modifiedsomething orof deleted.interest Forhas thehappened latterwithin categorya theservice. lastA versionsubscriber ofreceives thenotifications objectwithin isan sentauthorized asscope partand offor thecertain Eventdata `data`objects field.in Allthe previouscontext eventsof abouta theschool same object may be ignored. All Events have a unique `id`. Moreover, the event also includes an `objectId`, the identifier of the object they carry. This can be used to make sure events are processed in order for that object. The `created` time of the event is the time the action that triggered the event happened. It is not the time the event was sent or processed(using consent). This enables parties to communicate with each other in a loosely coupled way. The event mediator has no direct connection to any of the subscribing systems. Notifications are sent after a data object is created, modified or deleted. The notification contains the id to this data object and an url to retreive the latest state of the object. The data object is not send as part of the notification itself. Deleting an object is supported by sending an event withAll theNotifications fieldhave `isDeleteEvent`a flaggedunique as true`id`. ThisMoreover, indicatesthe thatnotification thisalso isincludes thean last`objectId`, eventthe youidentifier willof getthe aboutobject thisthey objectcarry. TheThis datacan isbe emptyused into thismake case.sure notifications are processed in order for title:that Eventobject. The `created` time of the notification properties:is the time the action that triggered the notification id:happened. It is not the time the notification was sent or type:processed. string Deleting an object format:is uuidsupported by sending a notification with the field `isDeleteNotification` flagged as example: d290f1ee-6c54-4b01-90e6-d701748f0851 description: 'Unique identifier for this Event.'true. This indicates that this is the last notification you will get about this object. schemaVersiontitle: Notification $refproperties: '#/components/schemas/schemaVersion' typeid: type: string descriptionformat: 'Theuuid type of Event object sent within this Event message.' example: d290f1ee-6c54-4b01-90e6-d701748f0851 enum: description: 'Unique identifier for this Notification.' - la.Product schemaVersion: - la.Course $ref: '#/components/schemas/schemaVersion' objectType: - la.CourseStructure type: string - la.InitialActivation description: 'The type of object that has - la.Usagechanged.' - la.SimpleProgressenum: - la.SimpleResultStudent - mp.EntitlementStudentDelivery - mp.EntitlementConfirmationEmployee - mp.ChangeLicenseStatusClass - mp.ChangeLicenseStatusConfirmationGroup - mp.ActivationCodeRequestSchoolSubject - mp.ActivationCodeConfirmationSchoolPeriod - mp.ActivationCodeRevokeRequestProduct objectId: - mp.ActivationCodeRevokeConfirmation type: string - mp.OrderRequest description: 'Unique identifier of the object sent within this - mpnotification.OrderConfirmation' userIdType: - mp.CreditOrderRequest type: string - mp.CreditOrderConfirmation description: 'In case the object is a Student or - sis.Student - sis.StudentDeliveryEmployee, this field should be filled with the used userId format in the objectId.' enum: - sis.Teacher - sis.GroupECKiD - sis.SchoolSubjectnlPersonProfileId - sis.SchoolPeriodnlPersonRealId objectId: - Las-key type: string - BasispoortId description: 'Unique identifier of the object sent within this- event.'Medewerkernummer userIdTypeschoolId: type: string description: 'In case the object is afrom Studentthe orSIS TeacherAPI, this field should be filled with the usedschoolId userIdof formatthe inSchool thefor objectId.'which an entitiy changed. In primary education the BasispoortId is used. enum:In secondary and vocational education the digiDeliveryId is used. The digiDeliveryId is case -sensitive.' ECKiD edu_org_id: - nlPersonProfileId type: string - nlPersonRealId description: 'The school needs to approve the exchange of sis -data Las-keyvia a consent. The `edu_org_id` parameter is mandatory for these roles to request -entitlement Leerlingnummerinformation from the provider. This allows the provider to check if the requesting -client Medewerkernummerhas an active data exchange (consent) for the created:specified edu_org_id.' created: type: string format: date-time description: | The moment that the action happened which triggered this eventnotification. As EventsNotifications are sent asynchronous, this is not the moment the EventNotification was sent. Format: openapi in ZULU time as specified in RFC 3339, section 5.6 url: data type: string format: url $ref description: '#/components/schemas/EventData' "The callback url to retreive the modified object." isDeleteEventisDeleteNotification: type: boolean description: 'Indication that this is the last eventnotification you will ever see, as the object is deleted.' required: - id - schemaVersion - typeobjectType - createdobjectId - EventData:created title: EventData NotificationResponse: description: 'The datatype: object sent in the Event. The `type` fieldx-tags: in the Event message specifies the type of data- object.'Notification x-tagsdescription: 'The response for a single Notification given by the Consumer that received -the EventNotification.' oneOfproperties: - $refid: ./catalogue.v1.yaml#/components/schemas/Product - $reftype: ./course.v1.yaml#/components/schemas/Coursestring - $refdescription: ./course.v1.yaml#/components/schemas/CMI5.CourseStructure - $ref: ./usage.v1.yaml#/components/schemas/InitialActivation'The identifier of the Notification where this response refers to.' - $refstatus: ./usage.v1.yaml#/components/schemas/Usage - $reftype: ./progress.v1.yaml#/components/schemas/SimpleProgressinteger - $ref: ./results.v1.yaml#/components/schemas/SimpleResultdescription: 'See functional status codes within the Documentation.' - $refstatusMessage: ./entitlement.v1.yaml#/components/schemas/EntitlementEvent - $reftype: ./entitlement.v1.yaml#/components/schemas/EntitlementConfirmation string - $ref: ./entitlement.v1.yaml#/components/schemas/ChangeLicenseStatus description: 'See functional status messages within the Documentation.' - $refrequired: ./entitlement.v1.yaml#/components/schemas/ChangeLicenseStatusConfirmation - $ref: ./entitlement.v1.yaml#/components/schemas/ActivationCodeRequestid - $ref: ./entitlement.v1.yaml#/components/schemas/ActivationCodeConfirmationstatus - $refStatusResponse: ./entitlement.v1.yaml#/components/schemas/ActivationCodeRevokeRequest title: StatusResponse - $ref: ./entitlement.v1.yaml#/components/schemas/ActivationCodeRevokeConfirmation type: object - $refdescription: ./order.v1.yaml#/components/schemas/OrderRequest 'Functional status code and status message.' - $ref: ./order.v1.yaml#/components/schemas/OrderConfirmation properties: - $refstatus: ./order.v1.yaml#/components/schemas/CreditOrderRequest - $reftype: ./order.v1.yaml#/components/schemas/CreditOrderConfirmation integer - $ref: ./sisdata.v1.yaml#/components/schemas/Studentdescription: 'See functional status codes within the Documentation.' - $refstatusMessage: ./sisdata.v1.yaml#/components/schemas/StudentDelivery - $reftype: ./sisdata.v1.yaml#/components/schemas/Teacherstring - $ref: ./sisdata.v1.yaml#/components/schemas/Group description: 'See functional status messages within the Documentation.' - $refrequired: ./sisdata.v1.yaml#/components/schemas/SchoolSubject - status - $ref: ./sisdata.v1.yaml#/components/schemas/SchoolPeriod securitySchemes: nullable: true OAuth2: EventResponsetype: oauth2 typeflows: object x-tagsclientCredentials: - Event tokenUrl: https://api.example.com/oauth2/token description: 'The response for a single Event given by the Consumer that received the Event.' refreshUrl: https://api.example.com/oauth2/token scopes: properties: idla.catalogue: 'scope that allows Consumers to receive Products from the type: stringCatalogue API.' descriptionsis.school: 'Thea identifierscope ofthat theallows Event where this response refersa Consumers to.' receive basic school information: periods and subjects from status:the SIS API.' type: integer sis.student-teacher-group: 'a scope that allows Consumers to receive description: 'See functional status codes withinstudent, teacher and group data from the DocumentationSIS API.' statusMessage: sis.student-teacher-delivery: 'a scope that that allows a type:`Leermiddelenshop` stringto receive student delivery information including addresses from the SIS API.' description paths: 'See functional status messages within the Documentation.' /subscribe/{api}: parameters: required: - schema: - id type: string - status enum: SchemaVersions: type: object - 'catalogue-api' x-tags: - 'sis-api' SchemaVersion descriptionname: api 'The supported schema versions of a specific schema in: anpath api.' propertiesrequired: true apidescription: 'API to which the Consumer wants to subscribe.' type: string post: summary: 'Subscribe to description:notifications 'The api where the schema is part of.for new/modified/deleted objects from an API' operationId: subscribe enum: x-tags: - 'events-api'Notification tags: - 'consent-api' - Producer description: 'Subscribe to - 'catalogue-api' - 'course-api' - 'usage-api' - 'progress-api' notifications from a specified API. The Producer registers the Consumer as one of the subscribers to changes in the requested API. This includes all data objects for all edu_org_ids for which the Consumer has an active consent with the Producer.' responses: - 'results-api200': description: OK - 'entitlement-api' '400': - 'order-api' description: Bad Request - 'sis-api' content: schema: application/json: type: string schema: description: 'The schema within the api.' enum$ref: '#/components/schemas/StatusResponse' '401': # Events API description: Unauthorized - Event content: - EventResponse application/json: - SchemaVersion schema: $ref: '#/components/schemas/StatusResponse' # Consent API security: - ConsentUpdateOAuth2: - ConsentRegistrationla.catalogue - sis.student-teacher-group # Catalogue API- sis.student-delivery - Productsis.school /notification: parameters: - schema: # Course API type: string - Course name: edu_org_id in: query - CourseStructure required: false description: "The school needs to approve the exchange of sis #data Usagevia APIa consent. The `edu_org_id` parameter is mandatory for these roles to request entitlement -information InitialActivationfrom the provider. This allows the provider to check if the requesting client -has Usagean active data exchange (consent) for the specified edu_org_id." -post: IndividualUsage summary: Receive a single notification - EntitlementUsage operationId: post-notification x-tags: - Notification # Progress APItags: - Consumer - SimpleProgress description: | Endpoint to receive a single Notification as a Consumer from different Producers. For #example Resultsa APIparty in the role of `Leermiddelenaanbieder` can receive notifications from all parties offering -`Administratiesysteemaanbieder` SimpleResultroles. requestBody: description: | # Entitlement APIThe request body contains a single Notification. - EntitlementEvent - EntitlementConfirmationNotifications are processed asynchronous. In the request body a status code and message -is ChangeLicenseStatusincluded as a confirmation if the notifications are received in a correct format. -All ChangeLicenseStatusConfirmationnotifications are confirmed with a status ok (0), excluding notifications that have an -invalid ActivationCodeRequestformat or notifications that were sent in an invalid security scope or consent. -See ActivationCodeConfirmationDocumentation for functional status codes and messages. - ActivationCodeRevokeRequest content: application/json: - ActivationCodeRevokeConfirmation schema: $ref: '#/components/schemas/Notification' Order API responses: - '200': OrderRequest description: OK - OrderConfirmation content: - CreditOrderRequest application/json: - CreditOrderConfirmation schema: $ref: '#/components/schemas/NotificationResponse' SIS API '400': - SchoolPeriod description: Bad Request - SchoolSubject content: - Student application/json: - Teacher schema: - Group $ref: '#/components/schemas/NotificationResponse' - StudentDelivery '401': description: Unauthorized schemaVersions: content: type: array application/json: description: 'The schema versions supported for this schema.': items: $ref: '#/components/schemas/NotificationResponse' type: string '403': description: 'SchemaForbidden version of the schema using semantic versioning 2.0.0' content: example: 1.3.0 application/json: required: - apischema: - schema $ref: - schemaVersions'#/components/schemas/NotificationResponse' security: securitySchemes: - OAuth2: type: oauth2 - la.catalogue flows: clientCredentials: - sis.student-teacher-group tokenUrl: https://api.example.com/oauth2/token - sis.student-delivery refreshUrl: https://api.example.com/oauth2/token - sis.school scopes/notifications: parameters: - la.catalogueschema: 'scope that allows a MP or LMS to receive Products fromtype: thestring Catalogue API.' name: edu_org_id la.course: 'Scope that allows ain: LMSquery to receive Course information from the Course API.' required: false la.usage.activationdescription: 'a"The scopeschool that allows a MP or LMS to receive InitialActivation information from the Usage API.' la.usage.usage: 'a scope that allows a MP or LMS to receive Usageneeds to approve the exchange of sis data via a consent. The `edu_org_id` parameter is mandatory for these roles to request entitlement information from the Usage APIprovider.' This allows the provider to check if the requesting client has an active la.progress: 'a scope that allows a LMS to receive Progress information from the Progress API.'data exchange (consent) for the specified edu_org_id." post: summary: Receive notifications la.resultsoperationId: 'apost-notifications scope that allows a LMS or SISx-tags: to receive Results information from the Results API' - Notifications tags: sis.school: 'a scope that allows a MP,- LAConsumer or LMS to receive basic school informationdescription: periods| and subjects from the SIS API.' Endpoint to receive notifications as a Consumer from different sis.student-teacher-group: 'a scope that allows a MP, LA or LMS to receive student, teacher and group data from the SIS API.' Producers. For example a party in the role of `Leermiddelenaanbieder` can receive notifications from all parties offering `Administratiesysteemaanbieder` roles. requestBody: sis.student-teacher-deliverycontent: 'a scope that that allows a MP to receive student deliveryapplication/json: information including address from the SIS API.' schema: mp.entitlement: 'a scope that allows a LA or LMStype: toarray receive entitlement information from the Entitlement API.' items: mp.activationcode: 'a scope that allows a MP to send activation code requests from the Entitlement API.$ref: '#/components/schemas/Notification' description: |- mp.order: 'a scope that allows a MP to sendThe orderrequest requestsbody fromcontains thea Orderlist API.'of Notifications, paths:sorted oldest notifications first. For Notifications /event:that require Consent to be post:sent and received between parties, Notifications can summary:only Receivebe agrouped singlein Eventthe same request if they are from operationId: post-event the same school. x-tags: - Event Notifications responses:are processed asynchronous. In the request body a status '200':code and message is included as a confirmation if the notifications description:are OKreceived in a correct format. All notifications are confirmed with a content:status ok (0), excluding notifications that have an invalid format or notifications that application/json:were sent in an invalid security scope or consent. See Documentation for functional status codes and messages. schemaresponses: '200': $ref description: '#/components/schemas/EventResponse'OK '400'content: description: Bad Request application/json: contentschema: application/json: type: array schema items: $ref: '#/components/schemas/EventResponseNotificationResponse' '401400': description: Unauthorized - No valid token presentedBad Request content: application/json: schema: $reftype: '#/components/schemas/EventResponse'array '403': items: description: Forbidden - No consent given to access the requested resource $ref: '#/components/schemas/NotificationResponse' content: '401': application/json description: Unauthorized content: schema: application/json: $ref: '#/components/schemas/EventResponse' requestBodyschema: content: type: array application/json: schemaitems: $ref: '#/components/schemas/EventNotificationResponse' description'403': | description: TheForbidden request body contains a single Event. content: application/json: Events are processed asynchronous. In the request body a status code andschema: message is included as a confirmation if the events are received in a correct format. All eventstype: arearray confirmed with a status ok (0), excluding events that have an invalid format or events that wereitems: sent in an invalid security scope or consent. See Documentation for functional status codes and messages. $ref: '#/components/schemas/NotificationResponse' description: | Endpoint to receive a single Event as a Consumersecurity: from different Producers. For example a party in the- roleOAuth2: of LMS can receive events from all parties offering SIS, MP and LA- rolesla. catalogue security: - sis.student-teacher-group OAuth2: - lasis.cataloguestudent-delivery - lasis.courseschool - la.usage.activation get: summary: Get - la.usage.usage Notifications After Created DateTime operationId: get-notifications-after-created - la.progress x-tags: - -Notification la.result tags: - mp.entitlement - Producer description: | - mp.activationcode Allows a subscriber to retrieve a list of -past mpnotifications.order The provider will not keep the notifications indefinite. This API is available - sis.student-teacher-group - sis.student-delivery - sis.school /eventsto a party that had downtime and needs to catch up on processing or receiving notifications. The intended retention is a few days to support catching up. parameters: post: - summaryschema: Receive Events operationId: post-events x-tagstype: string - Event in: query responses: name: createdAfter '200': description: OK'Timestamp to filter on notifications created after a certain moment. contentFormat: openapi in ZULU time as specified in RFC 3339, section 5.6' application/json: - schema: schema: type: string type: array enum: - Student items: - StudentDelivery $ref: '#/components/schemas/EventResponse' - Employee '400': description:- BadClass Request content: - Group application/json: - SchoolSubject schema: - SchoolPeriod - Product type: array example: Student items: in: query name: $ref: '#/components/schemas/EventResponse'objectType '401': description: 'Filter by a specific type of object.' description: Unauthorized - Noschema: valid token presented contenttype: integer application/jsonin: query schemaname: start description: 'Start point for pagination type:of arrayresults, defaults to 0' itemsexamples: default: $ref: '#/components/schemas/EventResponse' '403'value: 0 description: Forbidden - No consent givensummary: to'The accessstart thepoint requestedfor resourcepagination' - contentschema: application/jsontype: integer maximum: schema:100 in: query type: array name: limit itemsdescription: 'Limit of number of results returned by page, defaults to 20 with max 100.' $ref: '#/components/schemas/EventResponse' descriptionexamples: | Endpoint to receive eventsdefault: as a Consumer from different Producers. For example a party in the role of LMSvalue: can20 receive events from all parties offering SIS, MP and LA roles. summary: 'The default requestBody:value if none is provided' content: max: application/json: value: schema:100 typesummary: array'The largest recommended page size' - itemsschema: type: string $ref: '#/components/schemas/Event' name: schemaVersion description: |- in: query The request body contains a list of Events, sorted oldest eventsrequired: first.false For Events that require Consent to be sent and received between parties, Events can only be groupeddescription: 'Optional parameter to request a Notification in thea samespecific requestschema ifversion. theyIf arenone fromsupplied, the same school. server will choose its default schema version. This schemaVersion refers to the version of the Nofication format.' responses: Events are processed asynchronous. In the request body a'200': status code and message is included as a confirmation if thedescription: eventsOK are received in a correct format. All events are confirmed withcontent: a status ok (0), excluding events that have an invalid format or eventsapplication/json: that were sent in an invalid security scope or consent. See Documentation for functional statusschema: codes and messages. security: type: array - OAuth2: - la.catalogue items: - la.course $ref: '#/components/schemas/Notification' - la.usage.activation '400': - la.usage.usagedescription: Bad Request content: - la.progress application/json: - la.result schema: - mp.entitlement - mp.activationcode $ref: '#/components/schemas/StatusResponse' '401': - mp.order description: Unauthorized - sis.student-teacher-group content: - sis.student-delivery application/json: - sis.school schema: get$ref: '#/components/schemas/StatusResponse' summary '403': Get Events After Created DateTime description: Forbidden operationId: get-events-after-created x-tagscontent: - Event application/json: parameters: - schema: type: string $ref: '#/components/schemas/StatusResponse' insecurity: query - OAuth2: name: createdAfter - description: 'Timestamp to filter on events created after a certain moment. Format: openapi in ZULU time as specified in RFC 3339, section 5.6' - schema:la.catalogue - sis.student-teacher-group type: string- sis.student-delivery - example: la.Productsis.school inx-tags: query - name: type description: 'Filter by a specific type of event.' - schema: type: integer in: query name: start description: 'Start point for pagination of results, defaults to 0' examples: default: value: 0 summary: 'The start point for pagination' - schema: type: integer maximum: 100 in: query name: limit description: 'Limit of number of results returned by page, defaults to 20 with max 100.' examples: default: value: 20 summary: 'The default value if none is provided' max: value: 100 summary: 'The largest recommended page size' - schema: type: string name: schemaVersion in: query required: false description: 'Optional parameter to request an Event in a specific schema version. If none supplied, the server will choose its default schema version. This schemaVersion refers to the version of the Event format.' - schema: type: string name: schemaVersionObject in: query required: false description: 'Optional parameter to request the object format in a specific schema version. If none supplied, the server will choose its default schema version. This schemaVersion refers to the version of the format of the data object sent within the Event.' responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Event' '400': description: Bad Request '401': description: Unauthorized - No valid token presented '403': description: Forbidden - No consent given to access the requested resource security: - OAuth2: - la.catalogue - la.course - la.usage.activation - la.usage.usage - la.progress - la.result - mp.entitlement - mp.activationcode - mp.order - sis.student-teacher-group - sis.student-delivery - sis.school description: | Allows a subscriber to retrieve a list of past events. The provider will not keep the events indefinite. This API is available to a party that had downtime and needs to catch up on processing or receiving events. The intended retention is a few days to support catching up. /requestseed/{api}: parameters: - schema: type: string enum: - 'catalogue-api' - 'course-api' - 'usage-api' - 'progress-api' - 'entitlement-api' - 'order-api' - 'sis-api' name: api in: path required: true description: 'API for which an initial seed of Events is requested.' post: summary: 'Request Initial Seed for API' x-tags: - Event responses: '200': description: OK content: application/json: schema: type: object properties: status: type: integer description: 'See functional status codes within the Documentation.' statusMessage: type: string description: 'See functional status messages within the Documentation.' '400': description: Bad Request content: application/json: schema: type: object properties: status: type: integer description: 'See functional status codes within the Documentation.' statusMessage: type: string description: 'See functional status messages within the Documentation.' '401': description: Unauthorized - No valid token presented content: application/json: schema: type: object properties: status: type: integer description: 'See functional status codes within the Documentation.' statusMessage: type: string description: 'See functional status messages within the Documentation.' '403': description: Forbidden - No consent given to access the requested resource content: application/json: schema: type: object properties: status: type: integer description: 'See functional status codes within the Documentation.' statusMessage: type: string description: 'See functional status messages within the Documentation.' operationId: request-seed description: | Endpoint to request an initial seed of Events from a Producer. The combination of the parameter `api` and the chosen `scope` and `consent` gives the Producer all information to send the initial seed of Events. | producer | consumer | `api` | `scope` | `consent` | events | description | |---|---|---|---|---|---|---| | LA | LMS, MP | catalogue-api | la.catalogue | no | la.Product | All Product objects relevant for the requesting Consumer LMS or MP. | | LA | LMS | course-api | la.course | no | la.Course<br>la.CourseStructure | All Course and CourseStructure objects relevant for the requesting Consumer LMS. | | LA | LMS, MP | usage-api | la.usage.activation | yes | la.InitialActivation | All InitialActivation events from all active entitlement of the School. | | LA | LMS, MP | usage-api | la.usage.usage | yes | la.Usage | All Usage events from all active entitlement of the School. | | LA | LMS | progress-api | la.progress | yes | la.SimpleProgress | All SimpleProgress events (including their last status) from the start of the schoolyear. | | MP | LA, LMS | entitlement-api | mp.entitlement | yes (for LMS)<br>no (for LA) | mp.EntitlementEvent<br>mp.ChangeLicenseStatus | All active EntitlementEvents (including their last status) and ChangeLicenseStatus events. This allows a LMS to place links as if they were received as new Entitlements and a LA to provision products. See documentation for specific handling rules of these events. Both LMS and LA respond with a confirmation message. | | MP | LA | entitlement-api | mp.activationcode | no | mp.ActivationCodeRequest<br>mp.ActivationCodeRevokeRequest | All requests which are not processed by the LA yet. This allows a MP to start requesting activation code before the data exchange has been established. The LA can process these events as soon as the connection is made. The LA respond with a confirmation message. | | MP | LA | order-api | mp.order | no | mp.OrderRequest<br>mp.CreditOrderRequest | All requests which are not processed by the LA yet. This allows a MP to start ordering before the data exchange has been established. The LA can process these events as soon as the connection is made. The LA respond with a confirmation message. | | SIS | LA, LMS, MP | sis-api | sis.school | yes | la.SchoolPeriod<br>la.SchoolSubject | All SchoolPeriod and SchoolSubjects objects relevant for the requesting Consumer LA, LMS or MP. | | SIS | LA, LMS, MP | sis-api | sis.student-teacher-group | yes | la.Student<br>la.Teacher<br>la.Group | All Students, Teachers, and Groups objects relevant for the requesting Consumer LA, LMS or MP. | | SIS | MP | sis-api | sis.student-delivery | yes | la.StudentDelivery | All StudentDelivery objects relevant for the requesting Consumer MP. | security: - OAuth2: - la.catalogue - la.course - la.usage.activation - la.usage.usage - la.progress - la.result - mp.entitlement - mp.activationcode - mp.order - sis.student-teacher-group - sis.student-delivery - sis.school /schemaversions/{api}: parameters: - schema: type: string enum: - 'events-api' - 'consent-api' - 'catalogue-api' - 'course-api' - 'usage-api' - 'progress-api' - 'results-api' - 'entitlement-api' - 'order-api' - 'sis-api' name: api in: path required: true description: 'API for which the supported schema versions is requested.' get: summary: Get Schema Version for API operationId: get-schemaversion-api x-tags: - Event responses: '200': description: 'A list of schema versions supported for each Event object or Response body in the API.' content: application/json: schema: type: array items: $ref: '#/components/schemas/SchemaVersions' '400': description: Bad Request '401': description: Unauthorized - No valid token presented '403': description: Forbidden - No consent given to access the requested resource security: - OAuth2: - la.catalogue - la.course - la.usage.activation - la.usage.usage - la.progress - la.result - mp.entitlement - mp.activationcode - mp.order - sis.student-teacher-group - sis.student-delivery - sis.school description: | Allows a Producer to check a Consumer's supported schema versions of a specific API. This prevents schema validation errors when sending events to the Consumer. x-tags: - name: Event - name: SchemaVersionNotification |
...
Release notes
0.0.1: Eerste draft van de API.
0.0.2: Berichtdefinities en YAML files zijn toegevoegd t.b.v. de 80 procent specificatie.
0.0.3: De technische specificatie is verder uitgewerkt.
edu_org_id is toegevoegd aan alle endpoints als implementatie van het /wiki/spaces/AFSPRAKENS/pages/9175055 en de M2M identificatie en authenticatie.
De Events API is herschreven naar het transactiepatroon Abonneren op wijzigingen middels notificaties.
Producer heeft een endpoint subscribe en een endpoint voor Consumers om notificaties na een bepaalde tijdstempel op te vragen.
Consumer heeft endpoint om een notificatie te ontvangen en een endpoints om notificaties te ontvangen.
De status- en foutcodes zijn toegevoegd aan de documentatie en aan de YAML.
In de YAML is aangegeven welke referentiecomponent de endpoints aanbiedt als Producer.
De YAML is geactualiseerd op basis van de bovenstaande wijzigingen.