PRODUCT

Data Store, Data Schemas & Sources.

Define, store and query data.

The EMS includes a data layer made up of Data Schemas, the Data Store, and Sources. Together they provide a consistent way to store, validate, query, and react to data — fully integrated into the graph.

Pictogram of data flowing in and out.

Data schemas.

Schemas define the structure of your data. They are expressed as JSON Schema and live on nodes in the graph.

Schemas enforce typing and validation, ensuring every Data Item has the fields it should.

They can be versioned — the recommended approach is to publish new schema versions with updated URLs.

{
"$id": "https://schemas.doors.tech/content/movie-1.0.json",
"type": "object",
"title": "Movie",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"title",
"releaseYear"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Unique identifier"
},
"cast": {
"type": "array",
"items": {
"$ref": "https://schemas.doors.tech/content/person-1.0.json"
}
},
"title": {
"type": "string",
"description": "Movie title"
},
"genres": {
"type": "array",
"items": {
"enum": [
"Drama",
"Comedy",
"Action",
"Documentary",
"Other"
],
"type": "string"
}
},
"poster": {
"type": "string",
"format": "uri",
"description": "Poster image URL"
},
"isPremium": {
"type": "boolean",
"description": "If true, requires subscription or purchase"
},
"releaseYear": {
"type": "integer",
"description": "Year of release"
},
"durationMinutes": {
"type": "number",
"description": "Duration in minutes"
}
}
}

Data items.

A Data Item is a JSON document that references a Data Schema via $schema. Each item must conform to its schema, keeping data consistent.

Ways to create Data Items:

Via Workflow — use the “Upsert Data Item” action.

Via API — send a POST request with an array of JSON documents (batch add).

Manually — fill out a form or write JSON directly.

{
"id": "3e6a0c42-6f1f-4e0e-9b9a-23b6f9e8d9ab",
"cast": [
{
"id": "6f5f2d12-1e9c-4f71-9d9e-0a8c7d94db3c",
"name": "Amira Solberg",
"role": "Director",
"$schema": "https://schemas.doors.tech/content/person-1.0.json"
},
{
"id": "0e8a13f9-4a91-44af-84ac-2f90870c8b02",
"name": "Liam Ortega",
"role": "Actor",
"$schema": "https://schemas.doors.tech/content/person-1.0.json"
}
],
"title": "The Endless Horizon",
"genres": [
"Drama",
"Action"
],
"poster": "https://cdn.doors.tech/media/movies/the-endless-horizon/poster.jpg",
"$schema": "https://schemas.doors.tech/content/movie-1.0.json",
"isPremium": true,
"releaseYear": 2024,
"durationMinutes": 118
}

*Very simple example.

Sources.

A Source is how you query Data Items. Each Source is defined by a filter and optional parameters, and is backed by a database index for very fast retrieval.

Ways to create Data Items:

Filter: defines the base set of items (e.g. all items with schema = Movie, or all movies with popularity > 80).

Parameters: allow refinement at query time (e.g. categories, language, country). This makes Sources reusable: one Source can serve many queries by applying different parameters.

Reading Sources

To use a Source, you call it from a Workflow using a “Read Source” action.

The action outputs:

Items: the actual results.

Metadata: built-in pagination values such as next cursor, previous cursor, and total count.

You decide what a Workflow ultimately returns. A “Read Source” step can be combined with other steps (API calls, transformations, etc.) to return a completely new format to applications or external systems.

Source Triggers

Sources can also react to change. By attaching Triggers, you can run Workflows automatically when items in a Source are created, updated, or deleted.

Examples:

When new Data Items are added.

When Data Items change category or popularity threshold.

Sync updates to external systems (e.g. a search index) whenever Data Items change.