Versions Compared

Key

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

...

Open api
filternone
supportedSubmitMethodsnone
showDownloadButtontrue
openapi: 3.0.0
info:
  version: 0.0.1
  title: Events API

components:
  schemas:
    
    schemaVersion:
      type: string
      description: 'Schema version of this event/object using semantic versioning 2.0.0'
      default: 1.3.0
    
    Event:
      type: object
      x-tags:
        - Event
      description: |-
        An event is a notification that something of interest has happened within a service. A subscriber receives events within an authorized scope and for certain events in the context of a school (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.
        Events are sent after an activity of a Student or Teacher (e.g. usage, progress or results). Events are also sent if an object (e.g. Product, Course, Student, Group) is created, modified or deleted. For the latter category the last version of the object is sent as part of the Event `data` field. All previous events about the 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.
        Deleting an object is supported by sending an event with the field `isDeleteEvent` flagged as true. This indicates that this is the last event you will get about this object. The data is empty in this case.
      title: Event
      properties:
        id:
          type: string
          format: uuid
          example: d290f1ee-6c54-4b01-90e6-d701748f0851
          description: 'Unique identifier for this Event.'
        schemaVersion:
          $ref: '#/components/schemas/schemaVersion'
        type:
          type: string
          description: 'The type of Event object sent within this Event message.'
          enum:
            - la.Product
            - la.Course
            - la.CourseStructure
            - la.InitialActivation
            - la.Usage
            - la.SimpleProgress
            - la.SimpleResult
            - mp.Entitlement
            - mp.EntitlementConfirmation
            - mp.ChangeLicenseStatus
            - mp.ChangeLicenseStatusConfirmation
            - mp.ActivationCodeRequest
            - mp.ActivationCodeConfirmation
            - mp.ActivationCodeRevokeRequest
            - mp.ActivationCodeRevokeConfirmation
            - mp.OrderRequest
            - mp.OrderConfirmation
            - mp.CreditOrderRequest
            - mp.CreditOrderConfirmation
            - sis.Student
            - sis.StudentDelivery
            - sis.Teacher
            - sis.Group
            - sis.SchoolSubject
            - sis.SchoolPeriod
        objectId:
          type: string
          description: 'Unique identifier of the object sent within this event.'
        userIdType:
          type: string
          description: 'In case the object is a Student or Teacher, this field should be filled with the used userId format in the objectId.'
          enum:
            - ECKiD
            - nlPersonProfileId
            - nlPersonRealId
            - Las-key
            - Leerlingnummer
            - Medewerkernummer
        created:
          type: string
          format: date-time
          description: | 
            The moment that the action happened which triggered this event. As Events are sent asynchronous, this is not the moment the Event was sent.
            Format: openapi in ZULU time as specified in RFC 3339, section 5.6
        data:
          $ref: '#/components/schemas/EventData'
        isDeleteEvent:
          type: boolean
          description: 'Indication that this is the last event you will ever see, as the object is deleted.'
      required:
        - id
        - schemaVersion
        - type
        - created
    
    EventData:
      title: EventData
      description: 'The data object sent in the Event. The `type` field in the Event message specifies the type of data object.'
      x-tags:
        - Event
      oneOf:
        - $ref: ./catalogue.v1.yaml#/components/schemas/Product
        - $ref: ./course.v1.yaml#/components/schemas/Course
        - $ref: ./course.v1.yaml#/components/schemas/CMI5.CourseStructure
        - $ref: ./usage.v1.yaml#/components/schemas/InitialActivation
        - $ref: ./usage.v1.yaml#/components/schemas/Usage
        - $ref: ./progress.v1.yaml#/components/schemas/SimpleProgress
        - $ref: ./results.v1.yaml#/components/schemas/SimpleResult
        - $ref: ./entitlement.v1.yaml#/components/schemas/EntitlementEvent
        - $ref: ./entitlement.v1.yaml#/components/schemas/EntitlementConfirmation
        - $ref: ./entitlement.v1.yaml#/components/schemas/ChangeLicenseStatus
        - $ref: ./entitlement.v1.yaml#/components/schemas/ChangeLicenseStatusConfirmation
        - $ref: ./entitlement.v1.yaml#/components/schemas/ActivationCodeRequest
        - $ref: ./entitlement.v1.yaml#/components/schemas/ActivationCodeConfirmation
        - $ref: ./entitlement.v1.yaml#/components/schemas/ActivationCodeRevokeRequest
        - $ref: ./entitlement.v1.yaml#/components/schemas/ActivationCodeRevokeConfirmation
        - $ref: ./order.v1.yaml#/components/schemas/OrderRequest
        - $ref: ./order.v1.yaml#/components/schemas/OrderConfirmation
        - $ref: ./order.v1.yaml#/components/schemas/CreditOrderRequest
        - $ref: ./order.v1.yaml#/components/schemas/CreditOrderConfirmation
        - $ref: ./sisdata.v1.yaml#/components/schemas/Student
        - $ref: ./sisdata.v1.yaml#/components/schemas/StudentDelivery
        - $ref: ./sisdata.v1.yaml#/components/schemas/Teacher
        - $ref: ./sisdata.v1.yaml#/components/schemas/Group
        - $ref: ./sisdata.v1.yaml#/components/schemas/SchoolSubject
        - $ref: ./sisdata.v1.yaml#/components/schemas/SchoolPeriod
      nullable: true
    
    EventResponse:
      type: object
      x-tags:
        - Event
      description: 'The response for a single Event given by the Consumer that received the Event.'
      properties:
        id:
          type: string
          description: 'The identifier of the Event where this response refers to.'
        status:
          type: integer
          description: 'See functional status codes within the Documentation.'
        statusMessage:
          type: string
          description: 'See functional status messages within the Documentation.'
      required:
        - id
        - status    
  
    SchemaVersions:
      type: object
      x-tags:
        - SchemaVersion
      description: 'The supported schema versions of a specific schema in an api.'
      properties:
        api:
          type: string
          description: 'The api where the schema is part of.'
          enum:
            - 'events-api'
            - 'consent-api'
            - 'catalogue-api'
            - 'course-api'
            - 'usage-api'
            - 'progress-api'
            - 'results-api'
            - 'entitlement-api'
            - 'order-api'
            - 'sis-api'
        schema:
          type: string
          description: 'The schema within the api.'
          enum:
            # Events API
            - Event
            - EventResponse
            - SchemaVersion
           
            # Consent API
            - ConsentUpdate
            - ConsentRegistration
           
            # Catalogue API
            - Product
             
            # Course API
            - Course
            - CourseStructure
            
            # Usage API
            - InitialActivation
            - Usage
            - IndividualUsage
            - EntitlementUsage
            
            # Progress API
            - SimpleProgress
            
            # Results API
            - SimpleResult
            
            # Entitlement API
            - EntitlementEvent
            - EntitlementConfirmation
            - ChangeLicenseStatus
            - ChangeLicenseStatusConfirmation
            - ActivationCodeRequest
            - ActivationCodeConfirmation
            - ActivationCodeRevokeRequest
            - ActivationCodeRevokeConfirmation
            
            # Order API
            - OrderRequest
            - OrderConfirmation
            - CreditOrderRequest
            - CreditOrderConfirmation
            
            # SIS API
            - SchoolPeriod
            - SchoolSubject
            - Student
            - Teacher
            - Group
            - StudentDelivery
            
        schemaVersions:
          type: array
          description: 'The schema versions supported for this schema.'
          items:
            type: string
            description: 'Schema version of the schema using semantic versioning 2.0.0'
            example: 1.3.0
      required:
        - api
        - schema
        - schemaVersions
        
  securitySchemes:
    OAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://api.example.com/oauth2/token
          refreshUrl: https://api.example.com/oauth2/token
          scopes:
            la.catalogue: 'scope that allows a MP or LMS to receive Products from the Catalogue API.'
            la.course: 'Scope that allows a LMS to receive Course information from the Course API.'
            la.usage.activation: 'a scope 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 Usage information from the Usage API.'
            la.progress: 'a scope that allows a LMS to receive Progress information from the Progress API.'
            la.results: 'a scope that allows a LMS or SIS to receive Results information from the Results API'
            sis.school: 'a scope that allows a MP, LA or LMS to receive basic school information: periods and subjects from the SIS API.'
            sis.student-teacher-group: 'a scope that allows a MP, LA or LMS to receive student, teacher and group data from the SIS API.'
            sis.student-teacher-delivery: 'a scope that that allows a MP to receive student delivery information including address from the SIS API.'
            mp.entitlement: 'a scope that allows a LA or LMS to receive entitlement information from the Entitlement API.'
            mp.activationcode: 'a scope that allows a MP to send activation code requests from the Entitlement API.'
            mp.order: 'a scope that allows a MP to send order requests from the Order API.'

paths:
  
  /event:
    post:
      summary: Receive a single Event
      operationId: post-event
      x-tags:
        - Event
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventResponse'
        '401':
          description: Unauthorized - No valid token presented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventResponse'
        '403':
          description: Forbidden - No consent given to access the requested resource
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventResponse'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Event'
        description: |
          The request body contains a single Event.
          
          Events are processed asynchronous. In the request body a status code and message is included as a confirmation if the events are received in a correct format. All events are confirmed with a status ok (0), excluding events that have an invalid format or events that were sent in an invalid security scope or consent. See Documentation for functional status codes and messages.
      description: |
        Endpoint to receive a single Event as a Consumer from different Producers. For example a party in the role of LMS can receive events from all parties offering SIS, MP and LA roles.
      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
  
  /events:
    post:
      summary: Receive Events
      operationId: post-events
      x-tags:
        - Event
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EventResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EventResponse'
        '401':
          description: Unauthorized - No valid token presented
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EventResponse'
        '403':
          description: Forbidden - No consent given to access the requested resource
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EventResponse'
      description: |
        Endpoint to receive events as a Consumer from different Producers. For example a party in the role of LMS can receive events from all parties offering SIS, MP and LA roles.
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/Event'
        description: |-
          The request body contains a list of Events, sorted oldest events first. For Events that require Consent to be sent and received between parties, Events can only be grouped in the same request if they are from the same school.
          
          Events are processed asynchronous. In the request body a status code and message is included as a confirmation if the events are received in a correct format. All events are confirmed with a status ok (0), excluding events that have an invalid format or events that were sent in an invalid security scope or consent. See Documentation for functional status codes and messages.
      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
            
    get:
      summary: Get Events After Created DateTime
      operationId: get-events-after-created
      x-tags:
        - Event
      parameters:
        - schema:
            type: string
          in: query
          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:
            type: string
            example: la.Product
          in: 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: SchemaVersion