For Developers

Create Schema

This model is part of an upcoming API update which is currently not available. Instead you can create schemas directly in the dashboard.

POST https://ed.link/api/v2/audit/schemas

Create the Schema for a given action. It is recommended to create a Schema before sending Events, so that validation of events can be more usefully performed.

This endpoint creates a new Schema and returns a 409 Conflict error if a Schema for the given action.id already exists. To update an existing Schema, use PATCH /schemas/:identifier. The response contains the version UUID of the Schema for that action. Events are associated with the most recent Schema with a matching action, and will list that Schema's id in the Event's schema field when read back.

Properties

The following properties can be defined by the user in a Schema:

PropertyTypeRequiredDescription
actionobjectRequiredAn object with id (the action string identifier, e.g. assignment.submit; always stored lowercase) and type (see more).
validation_levelstringOptionalOne of strict or lax. Defaults to lax.
dataobjectOptionalAny valid JSON Schema object describing the shape of your custom data payload. data is stored as after.
beforeobjectOptionalAny valid JSON Schema object describing the shape of before (pre-update snapshot).
afterobjectOptionalAny valid JSON Schema object describing the shape of after (post-update snapshot, or the stored form of data).

The following properties are additionally present when fetching a Schema:

PropertyTypeDescription
versionstringThe UUID identifying this specific version of the Schema associated with this action
created_datedateWhen this Schema was defined
idstringUUID for fetching Schema details

Request Body

The request body should contain a Schema object. Each field is described below.

action (Required)

You must specify the action. It identifies which Events this Schema governs.

{
    "action": {
        "id": "assignment.submit",
        "type": "create"
    }
}
  • id: your action string identifier, such as assignment.submit. Always stored lowercase — mixed-case values are accepted and normalized.
  • type: one of create, read, update, delete, or other.

validation_level (Optional)

Dictates what Edlink does with non-conforming Events. One of strict or lax. Defaults to lax if unspecified.

{
    "validation_level": "strict"
}

data (Optional)

Any valid JSON Schema object can be placed here to define the shape of your custom data object. data is stored as after on the Event.

before (Optional)

Any valid JSON Schema object describing the pre-update snapshot on update-tracking Events.

after (Optional)

Any valid JSON Schema object describing the post-update snapshot. Events that send data are validated against this schema when data is not itself defined on the Schema.

A Schema may specify any subset of data, before, and after.

Other Event Properties (Disallowed)

No other Event properties (actor, targets, scope, context) are controllable by a Schema. Edlink validates those fields against its own built-in expectations — see the Event documentation.

Sample Request

axios.post('https://ed.link/api/v2/audit/schemas', {
    headers: {
        authorization: `Bearer ${integration_access_token}`
    },
    data: {
        action: {
            id: 'assignment.submit',
            type: 'create'
        },
        validation_level: 'strict',
        data: {
            $schema: 'https://json-schema.org/draft/2020-12/schema',
            $id: 'https://example.com/product.schema.json',
            title: 'Product',
            description: "A product from Acme's catalog",
            type: 'object',
            properties: {
                productId: {
                    description: 'The unique identifier for a product',
                    type: 'integer'
                },
                productName: {
                    description: 'Name of the product',
                    type: 'string'
                },
                price: {
                    description: 'The price of the product',
                    type: 'number',
                    exclusiveMinimum: 0
                }
            },
            required: ['productId', 'productName', 'price']
        }
    }
});

Sample Response

The response contains the full Schema object.

{
    "$request": "00000000-0000-0000-0000-000000000000",
    "$data": {
        "id": "00000000-0000-0000-0000-000000000000",
        "created_date": "2021-07-13T17:45:39.937Z",
        "version": "00000000-0000-0000-0000-000000000000",
        "validation_level": "strict",
        "action": {
            "id": "assignment.submit",
            "type": "create"
        },
        "data": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "$id": "https://example.com/product.schema.json",
            "title": "Product",
            "description": "A product from Acme's catalog",
            "type": "object",
            "properties": {
              "productId": {
                "description": "The unique identifier for a product",
                "type": "integer"
              },
              "productName": {
                "description": "Name of the product",
                "type": "string"
              },
              "price": {
                "description": "The price of the product",
                "type": "number",
                "exclusiveMinimum": 0
              }
            },
            "required": [ "productId", "productName", "price" ]
        }
    }
}