For Developers

Events

Events are the payload sent to your subscribers. They represent actions taken on the Edlink platform, such as user logins, integration updates, or materialization failures. Each event has a specific type and a payload that contains relevant information about the event.

Event Structure

Each event is structured as a JSON object with the following fields:

  • type: The type of the event (e.g. person.login, materialization.scheduled).
  • date: The timestamp of when the event occurred.
  • payload: An object containing additional information specific to the event type.
{
    "type": "person.login",
    "date": "2024-08-11T12:34:56Z",
    "payload": {
        "integration_id": "string",
        "materialization_id": "string"
    }
}

Event Types

Click on an event type below to see its details:

TypeWhen
person.loginEmitted when a standard login is performed by a Person into your Application, (e.g. via Edlink's sso page).
person.login.ltiEmitted when a LTI login is performed by a Person into your Application.
person.login.scopedEmitted when a scoped login is performed by a Person into your Application (typically this is the Edlink Widget authenticating).
person.login.errorEmitted when a login is attempted but fails.
person.login.initiatedEmitted when a Person initiates a login into your Application.
application.secret.createdEmitted when a new secret is created on your Application.
application.secret.deletedEmitted when a secret is deleted from your Application.
integration.createdEmitted when a new integration is created between a Source and your Application. This usually occurs during onboarding.
integration.updatedEmitted when an integration's properties is updated.
integration.marked_for_deletionEmitted when an integration's state is changed to destroyed. It will be deleted within 3 days.
integration.destroyedEmitted when an integration is actually destroyed. This action is irreversible.
materialization.scheduledEmitted when a new materialization is scheduled. Typically as the result of a change to sharing rules, transformations, etc.
materialization.startedEmitted when a materialization is claimed and starts running.
materialization.completedEmitted when a materialization finished successfully.
materialization.errorEmitted when a materialization fails.
materialization.data_changedEmitted when a materialization finished and resulted in data being changed.

Events

Events can vary based on the actions taken on the platform. Here are the current event types you can expect to receive:

Fields that are not required could be omitted from the payload or be null / undefined.


Person Login

Emitted when a standard login is performed by a Person into your Application, (e.g. via Edlink's sso page).

FieldRequiredDescription
application_idThe UUID of the application the login is for.
integration_idThe UUID of the integration the login is for (if known).
person_idThe UUID of the person that is logging in (if known).

Example

{
    "type": "person.login",
    "date": "2024-08-11T12:34:56Z",
    "payload": {
        "application_id": "00000000-0000-0000-0000-000000000000",
        "integration_id": "00000000-0000-0000-0000-000000000000",
        "person_id": "00000000-0000-0000-0000-000000000000"
    }
}

Person Login LTI

Emitted when a LTI login is performed by a Person into your Application.

FieldRequiredDescription
application_idThe UUID of the application the login is for.
integration_idThe UUID of the integration the login is for (if known).
person_idThe UUID of the person that is logging in (if known).

Example

{
    "type": "person.login.lti",
    "date": "2024-08-11T12:34:56Z",
    "payload": {
        "application_id": "00000000-0000-0000-0000-000000000000",
        "integration_id": "00000000-0000-0000-0000-000000000000",
        "person_id": "00000000-0000-0000-0000-000000000000"
    }
}

Person Login Scoped

Emitted when a scoped login is performed by a Person into your Application (typically this is the Edlink Widget authenticating).

FieldRequiredDescription
application_idThe UUID of the application the login is for.
integration_idThe UUID of the integration the login is for (if known).
person_idThe UUID of the person that is logging in (if known).

Example

{
    "type": "person.login.scoped",
    "date": "2024-08-11T12:34:56Z",
    "payload": {
        "application_id": "00000000-0000-0000-0000-000000000000",
        "integration_id": "00000000-0000-0000-0000-000000000000",
        "person_id": "00000000-0000-0000-0000-000000000000"
    }
}

Person Login Error

Emitted when a login is attempted but fails.

FieldRequiredDescription
application_idThe UUID of the application the login is for.
integration_idThe UUID of the integration the login is for (if known).
person_idThe UUID of the person that is logging in (if known).

Example

{
    "type": "person.login.error",
    "date": "2024-08-11T12:34:56Z",
    "payload": {
        "application_id": "00000000-0000-0000-0000-000000000000",
        "integration_id": null,
        "person_id": null
    }
}

Person Login Initiated

Emitted when a Person initiates a login into your Application.

FieldRequiredDescription
application_idThe UUID of the application the login is for.
integration_idThe UUID of the integration the login is for (if known).
person_idThe UUID of the person that is logging in (if known).

Example

{
    "type": "person.login.initiated",
    "date": "2024-08-11T12:34:56Z",
    "payload": {
        "application_id": "00000000-0000-0000-0000-000000000000",
        "integration_id": null,
        "person_id": null
    }
}

Application Secret Created

Emitted when a secret is created for your Application.

FieldRequiredDescription
application_idThe UUID of the application the secret is for.
credential_idThe UUID of the credential that was created.

Example

{
    "type": "application.secret.created",
    "date": "2024-08-11T12:34:56Z",
    "payload": {
        "application_id": "00000000-0000-0000-0000-000000000000",
        "credential_id": "00000000-0000-0000-0000-000000000000"
    }
}

Application Secret Deleted

Emitted when a secret is deleted from your Application.

FieldRequiredDescription
application_idThe UUID of the application the secret is for.
credential_idThe UUID of the credential that was deleted.

Example

{
    "type": "application.secret.deleted",
    "date": "2024-08-11T12:34:56Z",
    "payload": {
        "application_id": "00000000-0000-0000-0000-000000000000",
        "credential_id": "00000000-0000-0000-0000-000000000000"
    }
}

Integration Created

Emitted when a new integration is created between a Source and your Application. This usually occurs during onboarding.

FieldRequiredDescription
integration_idThe UUID of the integration the materialization is for.
application_idThe UUID of the application the integration is for.
source_idThe UUID of the source the integration is for.
destination_idThe UUID of the destination the integration is for.
permissionsThe permissions granted to the integration.
propertiesThe properties of the integration.
statusThe status of the integration.
region_idThe UUID of the region the integration is in.

Example

{
    "type": "integration.created",
    "date": "2024-08-11T12:34:56Z",
    "payload": {
        "integration_id": "00000000-0000-0000-0000-000000000000",
        "materialization_id": "00000000-0000-0000-0000-000000000000",
        "application_id": "00000000-0000-0000-0000-000000000000",
        "source_id": "00000000-0000-0000-0000-000000000000",
        "destination_id": null,
        "permissions": [],
        "properties": { "custom_property": "value" },
        "status": "requested",
        "region_id": "00000000-0000-0000-0000-000000000000"
    }
}

Integration Updated

Emitted when an integration's settings or properties are updated.

FieldRequiredDescription
integration_idThe UUID of the integration the materialization is for.
application_idThe UUID of the application the integration is for.
source_idThe UUID of the source the integration is for.
destination_idThe UUID of the destination the integration is for.
permissionsThe permissions granted to the integration.
propertiesThe properties of the integration.
statusThe status of the integration.
region_idThe UUID of the region the integration is in.

Example

{
    "type": "integration.updated",
    "date": "2024-08-11T12:34:56Z",
    "payload": {
        "integration_id": "00000000-0000-0000-0000-000000000000",
        "materialization_id": "00000000-0000-0000-0000-000000000000",
        "application_id": "00000000-0000-0000-0000-000000000000",
        "source_id": "00000000-0000-0000-0000-000000000000",
        "destination_id": null,
        "permissions": [],
        "properties": { "custom_property": "value" },
        "status": "active",
        "region_id": "00000000-0000-0000-0000-000000000000"
    }
}

Integration Marked for Deletion

Emitted when an integration's state is changed to destroyed. It will be deleted within 3 days.

FieldRequiredDescription
integration_idThe UUID of the integration the materialization is for.
application_idThe UUID of the application the integration is for.
source_idThe UUID of the source the integration is for.
destination_idThe UUID of the destination the integration is for.
permissionsThe permissions granted to the integration.
propertiesThe properties of the integration.
statusThe status of the integration.
region_idThe UUID of the region the integration is in.

Example

{
    "type": "integration.marked_for_deletion",
    "date": "2024-08-11T12:34:56Z",
    "payload": {
        "integration_id": "00000000-0000-0000-0000-000000000000",
        "materialization_id": "00000000-0000-0000-0000-000000000000",
        "application_id": "00000000-0000-0000-0000-000000000000",
        "source_id": "00000000-0000-0000-0000-000000000000",
        "destination_id": null,
        "permissions": [],
        "properties": { "custom_property": "value" },
        "status": "destroyed",
        "region_id": "00000000-0000-0000-0000-000000000000"
    }
}

Integration Destroyed

Emitted when an integration is actually destroyed. This action is irreversible.

FieldRequiredDescription
integration_idThe UUID of the integration the materialization is for.

Example

{
    "type": "integration.destroyed",
    "date": "2024-08-11T12:34:56Z",
    "payload": {
        "integration_id": "00000000-0000-0000-0000-000000000000"
    }
}

Materialization Scheduled

Emitted when a new materialization is scheduled. Typically as the result of a change to sharing rules, transformations, etc.

FieldRequiredDescription
integration_idThe UUID of the integration the materialization is for.
materialization_idThe UUID of the materialization that was scheduled.

Example

{
    "type": "materialization.scheduled",
    "date": "2024-08-11T12:34:56Z",
    "payload": {
        "integration_id": "00000000-0000-0000-0000-000000000000",
        "materialization_id": "00000000-0000-0000-0000-000000000000"
    }
}

Materialization Started

Emitted when a materialization is claimed and starts running.

FieldRequiredDescription
integration_idThe UUID of the integration the materialization is for.
materialization_idThe UUID of the materialization that has started.

Example

{
    "type": "materialization.started",
    "date": "2024-08-11T12:34:56Z",
    "payload": {
        "integration_id": "00000000-0000-0000-0000-000000000000",
        "materialization_id": "00000000-0000-0000-0000-000000000000"
    }
}

Materialization Completed

Emitted when a materialization finished successfully.

FieldRequiredDescription
integration_idThe UUID of the integration the materialization is for.
materialization_idThe UUID of the materialization that ran.

Example

{
    "type": "materialization.completed",
    "date": "2024-08-11T12:34:56Z",
    "payload": {
        "integration_id": "00000000-0000-0000-0000-000000000000",
        "materialization_id": "00000000-0000-0000-0000-000000000000"
    }
}

Materialization Error

Emitted when a materialization fails.

FieldRequiredDescription
integration_idThe UUID of the integration the materialization is for.
materialization_idThe UUID of the materialization that failed.

Example

{
    "type": "materialization.error",
    "date": "2024-08-11T12:34:56Z",
    "payload": {
        "integration_id": "00000000-0000-0000-0000-000000000000",
        "materialization_id": "00000000-0000-0000-0000-000000000000"
    }
}

Materialization Data Changed

Emitted when a materialization finished and resulted in data being changed.

FieldRequiredDescription
integration_idThe UUID of the integration the materialization is for.
materialization_idThe UUID of the materialization that completed and changed data.
changesA summary of the changes made during the materialization process.

The changes field in the materialization.data_changed event payload contains a summary of the changes made during the materialization process. It is an object where each key is the entity type that was affected, and the value is another object detailing the number of records inserted, updated, and deleted.

Example

{
    "type": "materialization.data_changed",
    "date": "2024-08-11T12:34:56Z",
    "payload": {
        "integration_id": "00000000-0000-0000-0000-000000000000",
        "materialization_id": "00000000-0000-0000-0000-000000000000",
        "changes": {
            "districts": { "inserted": 0, "updated": 0, "deleted": 0 },
            "schools": { "inserted": 1, "updated": 2, "deleted": 0 },
            "sessions": { "inserted": 0, "updated": 0, "deleted": 0 },
            "periods": { "inserted": 0, "updated": 0, "deleted": 0 },
            "stops": { "inserted": 0, "updated": 0, "deleted": 0 },
            "calendars": { "inserted": 0, "updated": 0, "deleted": 0 },
            "days": { "inserted": 0, "updated": 0, "deleted": 0 },
            "departments": { "inserted": 0, "updated": 0, "deleted": 0 },
            "subjects": { "inserted": 0, "updated": 0, "deleted": 0 },
            "facilities": { "inserted": 0, "updated": 0, "deleted": 0 },
            "rooms": { "inserted": 0, "updated": 0, "deleted": 0 },
            "courses": { "inserted": 0, "updated": 0, "deleted": 0 },
            "classes": { "inserted": 4, "updated": 6, "deleted": 2 },
            "sections": { "inserted": 0, "updated": 0, "deleted": 0 },
            "people": { "inserted": 10, "updated": 5, "deleted": 2 },
            "incidents": { "inserted": 0, "updated": 0, "deleted": 0 },
            "enrollments": { "inserted": 15, "updated": 3, "deleted": 1 },
            "agents": { "inserted": 0, "updated": 0, "deleted": 0 },
            "meetings": { "inserted": 0, "updated": 0, "deleted": 0 },
            "attendance": { "inserted": 0, "updated": 0, "deleted": 0 },
            "assets": { "inserted": 0, "updated": 0, "deleted": 0 },
            "vehicles": { "inserted": 0, "updated": 0, "deleted": 0 },
            "routes": { "inserted": 0, "updated": 0, "deleted": 0 },
            "fees": { "inserted": 0, "updated": 0, "deleted": 0 }
        }
    }
}