Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

De Events API is de technische implementatie van het transactiepatroon Abonneren op wijzigen middels notificaties en Georkestreerde uitwisseling.

De technische specificatie bestaat uit:

...

Scopes

  • la.catalogue

  • sis.school

  • sis.student-teacher-group

  • sis.student-deliveryls.entitlement

Producer

  • Leermiddelenaanbieder – Leveranciersspecifieke Leermiddelencatalogus

  • Administratiesysteemaanbieder – Administratiesysteem onderwijsdeelnemersLeermiddelenshop – Faciliteit voor leveren (of arrangeren) van digitale leermiddelen

Consumer

  • Leermiddelenaanbieder

  • Leermiddelenshop

  • Leerportaalaanbieder

  • Dashboardaanbieder

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
StudentDelivery
Employee
Class
Group
SchoolPeriod
SchoolSubject
Product

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
nlPersonProfileId
nlPersonRealId
Las-key
LeerlingnummerBasispoortId
Medewerkernummer

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
filternone
supportedSubmitMethodsnone
showDownloadButtontrue
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.