For Developers

Audit Log Events Overview

This model is part of an upcoming API update which is currently in beta and therefore subject to change.

Event

An Event represents some action that an actor took, which affected a list of targets. An Event is an object with the following top-level properties:

PropertyTypeRequiredDescription
actorobjectRequiredThe entity that performed the action. An object with identifiers and type properties. identifiers is an array of Identifier objects (optional when type is anonymous). type must be one of person, system, or anonymous. See Actor.
actionstringRequiredThe customer-defined identifier for the action, e.g. assignment.submit. Always stored and matched as lowercase — mixed-case values are accepted and normalized.
severityenumOptionalImportance of the Event. One of debug, low, medium, high, or emergency. Defaults to debug if omitted. Mixed-case values are accepted and normalized to lowercase. See Severity.
targetsobject[]RequiredThe entities affected by the action. An array of objects, each with an identifiers array of Identifier objects and an Edlink-preferred type property. See Target.
scopestringRequiredAn arbitrary string identifier, up to 128 bytes, internal to your system that groups related Events for retrieval (e.g. a tenant ID or customer ID). See Scope.
institutionstringStrongly SuggestedAn Edlink Institution UUID. Pass this whenever the Event is associated with a known learning institution.
contextobjectStrongly SuggestedInformation about the underlying network request associated with the event. See Network Context. Every sub-property is optional.
dataobjectOptionalArbitrary payload for non-update Events. Validated if your Schema defines a data shape. Stored as after in Edlink. Cannot be sent together with after.
beforeobjectOptionalPre-update snapshot of the object being changed. Use with after for update-tracking Events. Validated if your Schema defines a before shape.
afterobjectOptionalPost-update snapshot, or the stored form of data. Validated if your Schema defines an after shape. Cannot be sent together with data.
schemastringread-onlyPresent when reading the event. The UUID of the Schema that validated the event.
created_datestringOptionalISO-8601 UTC timestamp string for when the Event occurred (e.g. 2026-08-13T20:35:00.000Z). Must be within the last 30 days and not more than 24 hours in the future. Numbers are rejected. If omitted, Edlink stamps the time the Create Event request was received. Always stored and returned as a UTC string.

Identifier

Both actor and each target carry an identifiers array. Each element is an Identifier object with the following properties:

PropertyTypeRequiredDescription
valuestringRequiredThe identifier value, as a string.
issuerstringRequiredA label for the system issuing the identifier. The special value "edlink" indicates that the value is an Edlink entity UUID, to be matched against Edlink's data set for automatic enrichment. Any other string is treated as a customer-defined issuer (e.g. "acme", "internal_db").
namestringOptionalA human-readable display name for this identifier (e.g. "George Bluth" or "Algebra I"). Stored and returned as-is. If omitted, Edlink will attempt to fill it from its enrichment data when available. Only meaningful on target identifiers.

The identifiers array lets you associate multiple identifiers with the same entity when it is known across different systems. When at least one Identifier has an issuer of "edlink", Edlink will look up the referenced entity and enrich it with the matching Edlink model under a details property when the Event is read back.

Target

A Target is an object representing an entity affected by an action. It has two properties:

  • type: an Edlink-preferred type string (e.g. assignment, class, person). Unrecognized types are accepted as customer-specific data.
  • identifiers: an array of Identifier objects.

Actor

The actor is the entity that performed the action. It has two properties:

  • type: one of the following enum values:
    • person: a natural person (a human user).
    • system: an automated system or service (e.g. a background job, a cron task, or a service account) acting on its own.
    • anonymous: an unauthenticated or unknown actor.
  • identifiers: an array of Identifier objects. Required and non-empty for person and system. Optional (may be omitted or empty) when type is anonymous.

For example:

{
    "actor": {
        "identifiers": [
            { "value": "00000000-0000-0000-0000-000000000000", "issuer": "edlink" },
            { "value": "acme_user_42", "issuer": "acme" }
        ],
        "type": "person"
    }
}

An anonymous actor with no identifiers:

{
    "actor": {
        "type": "anonymous"
    }
}

Severity

severity is an optional enum describing how important the Event is. Valid values, from lowest to highest:

ValueDescription
debugDebug-level activity. This is the default when severity is omitted.
lowLow-importance activity.
mediumRoutine activity worth retaining for review.
highSignificant activity that should be prioritized during investigation.
emergencyCritical activity that requires immediate attention.

If an unrecognized value is supplied, Edlink accepts the Event, sets severity to debug, and returns a warning. Mixed-case values are accepted and normalized to lowercase before validation (e.g. High or HIGH become high). It is not controllable by a Schema.

Scope

scope is a required arbitrary string identifier, up to 128 bytes, that is meaningful within your own system — for example a tenant ID, customer ID, or any other string key you use to segment your users or data. It is how you list Events for search and review purposes.

institution is an optional Edlink UUID referencing an Institution from the Public Data API. We strongly encourage you to pass an institution whenever the Event is associated with a known learning institution, as it enables richer cross-referencing against Edlink's data set and institution-level analysis.

Recording Events

To record Events, use the Create Event endpoint. Send a single Event object, or an array of up to 100 Events in one request.

Network Context

The context object describes the request that produced the Event. It is not controllable by a Schema. Edlink only understands the properties enumerated below. Every property is optional, but the strings will be validated for reasonable formats, like "GET" for http_method or "1.1.1.1" for ip, and a warning will be given on non-compliant data.

PropertyTypeDescription
sourceenumclient or server are the only valid values.
user_agentstringThe user agent header from the underlying network request.
http_methodstringThe HTTP method of the request (e.g. POST).
http_statusnumberThe HTTP status of the response (e.g. 200).
pathstringThe request path.
ipstringThe IP address. (Must be a valid CIDR string)
querystringThe query string of the request.
hostnamestringIdentifier for the computer making the request
osstringName/version string for the computer's operating system
environmentstringA tag for the environment (e.g. prod or staging)
triggerenumThe precipitating action for the event. One of person (triggered by a human user), system (triggered by an automated process), or anonymous (triggered by an unauthenticated or unknown actor).
deployment_idstringThe identifier for the internal code deployment/version related to this event

Some fields support a type sub-field that is "Edlink-preferred." When you pass an Edlink Data Model type name (such as person or class) as the type, Edlink will automatically match the supplied id to the related Edlink entity. When a match is found, the data is automatically enriched with the full Edlink model.

If you supply a type string that Edlink does not recognize, the data is still accepted — it is simply treated as customer-specific data that cannot be enriched. A common use case is passing your own internal user identifiers for users who log into your platform without using Edlink's SSO.

Note that actor.type does not participate in this Edlink-preferred mechanism — it is constrained to the enum person, system, or anonymous. To enrich an actor with an Edlink entity, include an Identifier with issuer: "edlink" in actor.identifiers.

The list of recognized Edlink types includes:

For example, this target:

{
    "targets": [
        {
            "identifiers": [{ "value": "00000000-0000-0000-0000-000000000000", "issuer": "edlink" }],
            "type": "person"
        }
    ]
}

is enriched with the Edlink Person model, which is returned under a details property:

{
    "targets": [
        {
            "identifiers": [{ "value": "00000000-0000-0000-0000-000000000000", "issuer": "edlink" }],
            "type": "person",
            "details": {
                "id": "00000000-0000-0000-0000-000000000000",
                "created_date": "2021-07-13T17:45:39.937Z",
                "updated_date": "2021-07-13T17:45:39.937Z",
                "first_name": "George",
                "last_name": "Bluth",
                "display_name": "Gob Bluth",
                "roles": ["student"],
                "email": "gob.bluth@example.com"
            }
        }
    ]
}

Similarly, an actor with an Identifier whose issuer is "edlink" will be enriched with the Edlink model that corresponds to its type:

{
    "actor": {
        "identifiers": [
            { "value": "00000000-0000-0000-0000-000000000000", "issuer": "edlink" }
        ],
        "type": "person",
        "details": {
            "id": "00000000-0000-0000-0000-000000000000",
            "first_name": "George",
            "last_name": "Bluth",
            "display_name": "Gob Bluth",
            "roles": ["student"],
            "email": "gob.bluth@example.com"
        }
    }
}

Starter Actions and Schemas

It can be difficult to know what to track. Edlink provides opt-in starter Schemas for common actions (user.login.success, user.login.error, user.logout, resource.access, resource.create, resource.update). Identify users via the Event actor; starter data / before / after fields are optional context only. Add them from the dashboard (Add Starter Schemas), which creates each Schema through the normal create endpoint. See Audit Log Schemas for the full definitions.