Skip to main content

Mapping suites

A mapping suite groups a set of physical tables that share a structure but are partitioned — for example orders_1996, orders_1997, orders_1998 — into a single logical mapping you can query as one.

A suite is built from three things:

  • a base mapping (e.g. public+orders) plus a pattern containing a ${partition} token (e.g. orders_${partition}),
  • a list of partition values (e.g. 1996, 1997, 1998),
  • the generated entries — one per (mapping × partition) — each resolved to a real table name. Generation (_generate) materializes them.

The collection endpoints that list a datasource's suites (GET /api/datasources/{id}/suites and /suites-list) are documented under Links & suites. This page covers creating a suite and managing one.

POST /api/datasources/{id}/suites

Create a suite. Provide the base mapping(s) with their patterns and the initial partitions; generation runs automatically.

FieldTypeRequiredDescription
namestringYesSuite name.
labelstringNoLabel for the partition dimension (e.g. year).
mappingsarrayNo{ id, pattern, substitutions? } — base mapping id and a pattern with a ${partition} token.
partitionsarrayNoPartition values (strings).
generateAllEntriesbooleanNoGenerate every entry up front (default false).
preserveSubstitutionsbooleanNoKeep manual substitutions on regenerate (default true).

Returns 201 with a Location header. (See Links & suites for the seeded example payload.)

GET /api/datasources/{id}/suites/{suiteId}

Get a suite with its partitions, mappings, and entries. {suiteId} resolves by id or name.

Get a mapping suiteGET /api/datasources/admin:northwind/suites/00000000-0000-4000-8000-000000000001
GET /api/datasources/{id}/suites/{suiteId} returns the suite with its partitions, mappings, and entries plus the caller’s permissions. {suiteId} resolves by id or name.
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001"
},
"inf:suite-mappings": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/mappings"
},
"inf:suite-partitions": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/partitions"
},
"inf:suite-generate": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/_generate"
}
},
"permissions": {
"delete": true,
"rename": true,
"write": true
},
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000001",
"name": "Orders by Year",
"slug": "orders-by-year",
"description": null,
"label": "year",
"defaultPartitionId": "00000000-0000-4000-8000-000000000002",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"datasourceId": "00000000-0000-4000-8000-000000000003",
"_embedded": {
"inf:suite-mapping": [
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/mappings/00000000-0000-4000-8000-000000000004"
}
},
"id": "00000000-0000-4000-8000-000000000004",
"mappingId": "00000000-0000-4000-8000-000000000003:public+orders",
"pattern": "orders_${partition}",
"substitutions": {},
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"name": "Orders",
"mapping_mappingId": "orders",
"datasourceId": "00000000-0000-4000-8000-000000000003"
}
],
"inf:suite-partition": [
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/partitions/00000000-0000-4000-8000-000000000005"
}
},
"id": "00000000-0000-4000-8000-000000000005",
"name": "1996",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z"
},
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/partitions/00000000-0000-4000-8000-000000000006"
}
},
"id": "00000000-0000-4000-8000-000000000006",
"name": "1997",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z"
},
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/partitions/00000000-0000-4000-8000-000000000002"
}
},
"id": "00000000-0000-4000-8000-000000000002",
"name": "1998",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z"
}
],
"inf:suite-entry": [
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/entries/00000000-0000-4000-8000-000000000007"
}
},
"id": "00000000-0000-4000-8000-000000000007",
"partitionId": "00000000-0000-4000-8000-000000000005",
"mappingId": "00000000-0000-4000-8000-000000000004",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"tableName": "orders_1996",
"substitutions": {}
},
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/entries/00000000-0000-4000-8000-000000000008"
}
},
"id": "00000000-0000-4000-8000-000000000008",
"partitionId": "00000000-0000-4000-8000-000000000006",
"mappingId": "00000000-0000-4000-8000-000000000004",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"tableName": "orders_1997",
"substitutions": {}
},
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/entries/00000000-0000-4000-8000-000000000009"
}
},
"id": "00000000-0000-4000-8000-000000000009",
"partitionId": "00000000-0000-4000-8000-000000000002",
"mappingId": "00000000-0000-4000-8000-000000000004",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"tableName": "orders_1998",
"substitutions": {}
}
]
}
}
Captured from the API examples test suite; ids and timestamps are normalized.

PUT /api/datasources/{id}/suites/{suiteId}

Update the suite's own attributes (e.g. label). Requires suite:write.

Update a mapping suitePUT /api/datasources/admin:northwind/suites/00000000-0000-4000-8000-000000000001
PUT /api/datasources/{id}/suites/{suiteId} updates the suite’s own attributes (e.g. label). Requires suite:write. Returns 200 with the updated suite.
Request body
{
"label": "Year"
}
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001"
},
"inf:suite-mappings": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/mappings"
},
"inf:suite-partitions": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/partitions"
},
"inf:suite-generate": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/_generate"
}
},
"permissions": {
"delete": true,
"rename": true,
"write": true
},
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000001",
"name": "Orders by Year",
"slug": "orders-by-year",
"description": null,
"label": "Year",
"defaultPartitionId": "00000000-0000-4000-8000-000000000002",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"datasourceId": "00000000-0000-4000-8000-000000000003"
}
Captured from the API examples test suite; ids and timestamps are normalized.

DELETE /api/datasources/{id}/suites/{suiteId}

Delete the suite and all its mappings, partitions, and entries. Requires suite:delete. Returns 200 with an empty body.

Delete a mapping suiteDELETE /api/datasources/admin:northwind/suites/00000000-0000-4000-8000-000000000001
DELETE /api/datasources/{id}/suites/{suiteId} deletes the suite and all its mappings, partitions, and entries. Requires suite:delete. Returns 200 with an empty body.
Response · 200 · no body
Captured from the API examples test suite; ids and timestamps are normalized.

POST /api/datasources/{id}/suites/{suiteId}/_generate

Re-materialize the suite's entries, optionally adding partitions.

FieldTypeDescription
mappingsarrayBase mappings + patterns to (re)generate.
partitionsarrayPartition values to add.
generateAllEntriesbooleanGenerate every entry (default false).
preserveSubstitutionsbooleanKeep manual substitutions (default true).
preserveTableNamesbooleanKeep manually-overridden table names (default true).

preserveSubstitutions / preserveTableNames protect manual edits made to existing entries. Returns the regenerated suite.

Regenerate a suitePOST /api/datasources/admin:northwind/suites/00000000-0000-4000-8000-000000000001/_generate
POST /api/datasources/{id}/suites/{suiteId}/_generate re-materializes the suite entries, optionally adding partitions. Payload { mappings?, partitions?, generateAllEntries?, preserveSubstitutions? (default true), preserveTableNames? (default true) }. preserveSubstitutions/preserveTableNames keep manual edits to existing entries. Returns the regenerated suite.
Request body
{
"generateAllEntries": true,
"partitions": [],
"preserveSubstitutions": true,
"preserveTableNames": true
}
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/_generate"
},
"inf:suite-mappings": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/_generate/mappings"
},
"inf:suite-partitions": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/_generate/partitions"
},
"inf:suite-generate": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/_generate/_generate"
}
},
"permissions": {
"delete": true,
"rename": true,
"write": true
},
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000001",
"name": "Orders by Year",
"slug": "orders-by-year",
"description": null,
"label": "Year",
"defaultPartitionId": "00000000-0000-4000-8000-000000000002",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"datasourceId": "00000000-0000-4000-8000-000000000003"
}
Captured from the API examples test suite; ids and timestamps are normalized.

Mappings

A suite can span more than one base mapping. These endpoints manage them.

GET /api/datasources/{id}/suites/{suiteId}/mappings

List the base mappings the suite spans, each with its pattern.

List a suite’s mappingsGET /api/datasources/admin:northwind/suites/00000000-0000-4000-8000-000000000001/mappings
GET /api/datasources/{id}/suites/{suiteId}/mappings lists the base mappings the suite spans (each with its pattern).
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/mappings"
}
},
"items": [
{
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000002",
"suiteId": "00000000-0000-4000-8000-000000000001",
"pattern": "orders_${partition}",
"substitutions": {},
"mappingId": "00000000-0000-4000-8000-000000000003:public+orders",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"id": "00000000-0000-4000-8000-000000000003:public+orders",
"name": "Orders",
"permissions": {
"write": false,
"hide": false,
"delete": false,
"rename": false,
"changeSet": false,
"restoreDefaults": false,
"scan": false
},
"schemaId": "public",
"mappingId": "orders",
"datasourceId": "00000000-0000-4000-8000-000000000003"
}
}
],
"start": 0,
"count": 1,
"total": 1
}
Captured from the API examples test suite; ids and timestamps are normalized.

POST /api/datasources/{id}/suites/{suiteId}/mappings

Add a base mapping to the suite. Payload { mappingId, pattern, substitutions?, preserveSubstitutions?, generateAllEntries? }; generation runs for it.

GET /api/datasources/{id}/suites/{suiteId}/mappings/{mappingId}

Get one suite mapping ({mappingId} is the suite-mapping row id).

Get one suite mappingGET /api/datasources/admin:northwind/suites/00000000-0000-4000-8000-000000000001/mappings/00000000-0000-4000-8000-000000000002
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/mappings/00000000-0000-4000-8000-000000000002"
}
},
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000002",
"suiteId": "00000000-0000-4000-8000-000000000001",
"pattern": "orders_${partition}",
"substitutions": {},
"mappingId": "00000000-0000-4000-8000-000000000003:public+orders",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"_embedded": {
"inf:mapping": {
"_links": {
"self": {
"href": "https://informer.example.com/api/datasources/00000000-0000-4000-8000-000000000003/mappings/public+orders"
}
},
"id": "00000000-0000-4000-8000-000000000003:public+orders",
"name": "Orders",
"permissions": {
"write": true,
"hide": true,
"delete": true,
"rename": true,
"changeSet": true,
"restoreDefaults": true,
"scan": true
},
"schemaId": "public",
"mappingId": "orders",
"datasourceId": "00000000-0000-4000-8000-000000000003"
}
}
}
Captured from the API examples test suite; ids and timestamps are normalized.

PUT /api/datasources/{id}/suites/{suiteId}/mappings/{mappingId}

Re-run generation for one base mapping with a (possibly new) pattern or substitutions. With both preserveSubstitutions and preserveTableNames false, it instead clears and re-adds the mapping.

Update a suite mappingPUT /api/datasources/admin:northwind/suites/00000000-0000-4000-8000-000000000001/mappings/00000000-0000-4000-8000-000000000002
PUT /api/datasources/{id}/suites/{suiteId}/mappings/{mappingId} re-runs generation for one base mapping with a (possibly new) pattern/substitutions. With preserveSubstitutions=false and preserveTableNames=false it instead clears and re-adds the mapping. {mappingId} is the suite-mapping row id.
Request body
{
"mappingId": "00000000-0000-4000-8000-000000000003:public+orders",
"pattern": "orders_${partition}",
"preserveSubstitutions": true,
"preserveTableNames": true
}
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/mappings/00000000-0000-4000-8000-000000000002"
},
"inf:suite-mappings": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/mappings/00000000-0000-4000-8000-000000000002/mappings"
},
"inf:suite-partitions": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/mappings/00000000-0000-4000-8000-000000000002/partitions"
},
"inf:suite-generate": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/mappings/00000000-0000-4000-8000-000000000002/_generate"
}
},
"permissions": {
"delete": true,
"rename": true,
"write": true
},
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000001",
"name": "Orders by Year",
"slug": "orders-by-year",
"description": null,
"label": "Year",
"defaultPartitionId": "00000000-0000-4000-8000-000000000004",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"datasourceId": "00000000-0000-4000-8000-000000000003"
}
Captured from the API examples test suite; ids and timestamps are normalized.

DELETE /api/datasources/{id}/suites/{suiteId}/mappings/{mappingId}

Remove a base mapping (and its entries) from the suite. Returns 200 with an empty body.

Remove a suite mappingDELETE /api/datasources/admin:northwind/suites/00000000-0000-4000-8000-000000000001/mappings/00000000-0000-4000-8000-000000000002
DELETE /api/datasources/{id}/suites/{suiteId}/mappings/{mappingId} removes a base mapping (and its entries) from the suite. Returns 200 with an empty body.
Response · 200 · no body
Captured from the API examples test suite; ids and timestamps are normalized.

Partitions

GET /api/datasources/{id}/suites/{suiteId}/partitions

List the partition values.

List a suite’s partitionsGET /api/datasources/admin:northwind/suites/00000000-0000-4000-8000-000000000001/partitions
GET /api/datasources/{id}/suites/{suiteId}/partitions lists the partition values (e.g. years).
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/partitions"
}
},
"items": [
{
"entryMap": {
"00000000-0000-4000-8000-000000000002:public+orders": {
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000003",
"suiteId": "00000000-0000-4000-8000-000000000001",
"partitionId": "00000000-0000-4000-8000-000000000004",
"mappingId": "00000000-0000-4000-8000-000000000005",
"tableName": "orders_1996",
"substitutions": {},
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000005",
"suiteId": "00000000-0000-4000-8000-000000000001",
"pattern": "orders_${partition}",
"substitutions": {},
"mappingId": "00000000-0000-4000-8000-000000000002:public+orders",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"id": "00000000-0000-4000-8000-000000000002:public+orders",
"name": "Orders",
"permissions": {
"write": false,
"hide": false,
"delete": false,
"rename": false,
"changeSet": false,
"restoreDefaults": false,
"scan": false
},
"schemaId": "public",
"mappingId": "orders",
"datasourceId": "00000000-0000-4000-8000-000000000002"
}
}
},
"public+orders": {
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000003",
"suiteId": "00000000-0000-4000-8000-000000000001",
"partitionId": "00000000-0000-4000-8000-000000000004",
"mappingId": "00000000-0000-4000-8000-000000000005",
"tableName": "orders_1996",
"substitutions": {},
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000005",
"suiteId": "00000000-0000-4000-8000-000000000001",
"pattern": "orders_${partition}",
"substitutions": {},
"mappingId": "00000000-0000-4000-8000-000000000002:public+orders",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"id": "00000000-0000-4000-8000-000000000002:public+orders",
"name": "Orders",
"permissions": {
"write": false,
"hide": false,
"delete": false,
"rename": false,
"changeSet": false,
"restoreDefaults": false,
"scan": false
},
"schemaId": "public",
"mappingId": "orders",
"datasourceId": "00000000-0000-4000-8000-000000000002"
}
}
}
},
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000004",
"name": "1996",
"suiteId": "00000000-0000-4000-8000-000000000001",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"entries": [
{
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000003",
"suiteId": "00000000-0000-4000-8000-000000000001",
"partitionId": "00000000-0000-4000-8000-000000000004",
"mappingId": "00000000-0000-4000-8000-000000000005",
"tableName": "orders_1996",
"substitutions": {},
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000005",
"suiteId": "00000000-0000-4000-8000-000000000001",
"pattern": "orders_${partition}",
"substitutions": {},
"mappingId": "00000000-0000-4000-8000-000000000002:public+orders",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"id": "00000000-0000-4000-8000-000000000002:public+orders",
"name": "Orders",
"permissions": {
"write": false,
"hide": false,
"delete": false,
"rename": false,
"changeSet": false,
"restoreDefaults": false,
"scan": false
},
"schemaId": "public",
"mappingId": "orders",
"datasourceId": "00000000-0000-4000-8000-000000000002"
}
}
}
]
},
{
"entryMap": {
"00000000-0000-4000-8000-000000000002:public+orders": {
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000006",
"suiteId": "00000000-0000-4000-8000-000000000001",
"partitionId": "00000000-0000-4000-8000-000000000007",
"mappingId": "00000000-0000-4000-8000-000000000005",
"tableName": "orders_1997",
"substitutions": {},
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000005",
"suiteId": "00000000-0000-4000-8000-000000000001",
"pattern": "orders_${partition}",
"substitutions": {},
"mappingId": "00000000-0000-4000-8000-000000000002:public+orders",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"id": "00000000-0000-4000-8000-000000000002:public+orders",
"name": "Orders",
"permissions": {
"write": false,
"hide": false,
"delete": false,
"rename": false,
"changeSet": false,
"restoreDefaults": false,
"scan": false
},
"schemaId": "public",
"mappingId": "orders",
"datasourceId": "00000000-0000-4000-8000-000000000002"
}
}
},
"public+orders": {
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000006",
"suiteId": "00000000-0000-4000-8000-000000000001",
"partitionId": "00000000-0000-4000-8000-000000000007",
"mappingId": "00000000-0000-4000-8000-000000000005",
"tableName": "orders_1997",
"substitutions": {},
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000005",
"suiteId": "00000000-0000-4000-8000-000000000001",
"pattern": "orders_${partition}",
"substitutions": {},
"mappingId": "00000000-0000-4000-8000-000000000002:public+orders",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"id": "00000000-0000-4000-8000-000000000002:public+orders",
"name": "Orders",
"permissions": {
"write": false,
"hide": false,
"delete": false,
"rename": false,
"changeSet": false,
"restoreDefaults": false,
"scan": false
},
"schemaId": "public",
"mappingId": "orders",
"datasourceId": "00000000-0000-4000-8000-000000000002"
}
}
}
},
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000007",
"name": "1997",
"suiteId": "00000000-0000-4000-8000-000000000001",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"entries": [
{
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000006",
"suiteId": "00000000-0000-4000-8000-000000000001",
"partitionId": "00000000-0000-4000-8000-000000000007",
"mappingId": "00000000-0000-4000-8000-000000000005",
"tableName": "orders_1997",
"substitutions": {},
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000005",
"suiteId": "00000000-0000-4000-8000-000000000001",
"pattern": "orders_${partition}",
"substitutions": {},
"mappingId": "00000000-0000-4000-8000-000000000002:public+orders",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"id": "00000000-0000-4000-8000-000000000002:public+orders",
"name": "Orders",
"permissions": {
"write": false,
"hide": false,
"delete": false,
"rename": false,
"changeSet": false,
"restoreDefaults": false,
"scan": false
},
"schemaId": "public",
"mappingId": "orders",
"datasourceId": "00000000-0000-4000-8000-000000000002"
}
}
}
]
},
{
"entryMap": {
"00000000-0000-4000-8000-000000000002:public+orders": {
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000008",
"suiteId": "00000000-0000-4000-8000-000000000001",
"partitionId": "00000000-0000-4000-8000-000000000009",
"mappingId": "00000000-0000-4000-8000-000000000005",
"tableName": "orders_1998",
"substitutions": {},
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000005",
"suiteId": "00000000-0000-4000-8000-000000000001",
"pattern": "orders_${partition}",
"substitutions": {},
"mappingId": "00000000-0000-4000-8000-000000000002:public+orders",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"id": "00000000-0000-4000-8000-000000000002:public+orders",
"name": "Orders",
"permissions": {
"write": false,
"hide": false,
"delete": false,
"rename": false,
"changeSet": false,
"restoreDefaults": false,
"scan": false
},
"schemaId": "public",
"mappingId": "orders",
"datasourceId": "00000000-0000-4000-8000-000000000002"
}
}
},
"public+orders": {
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000008",
"suiteId": "00000000-0000-4000-8000-000000000001",
"partitionId": "00000000-0000-4000-8000-000000000009",
"mappingId": "00000000-0000-4000-8000-000000000005",
"tableName": "orders_1998",
"substitutions": {},
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000005",
"suiteId": "00000000-0000-4000-8000-000000000001",
"pattern": "orders_${partition}",
"substitutions": {},
"mappingId": "00000000-0000-4000-8000-000000000002:public+orders",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"id": "00000000-0000-4000-8000-000000000002:public+orders",
"name": "Orders",
"permissions": {
"write": false,
"hide": false,
"delete": false,
"rename": false,
"changeSet": false,
"restoreDefaults": false,
"scan": false
},
"schemaId": "public",
"mappingId": "orders",
"datasourceId": "00000000-0000-4000-8000-000000000002"
}
}
}
},
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000009",
"name": "1998",
"suiteId": "00000000-0000-4000-8000-000000000001",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"entries": [
{
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000008",
"suiteId": "00000000-0000-4000-8000-000000000001",
"partitionId": "00000000-0000-4000-8000-000000000009",
"mappingId": "00000000-0000-4000-8000-000000000005",
"tableName": "orders_1998",
"substitutions": {},
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000005",
"suiteId": "00000000-0000-4000-8000-000000000001",
"pattern": "orders_${partition}",
"substitutions": {},
"mappingId": "00000000-0000-4000-8000-000000000002:public+orders",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"id": "00000000-0000-4000-8000-000000000002:public+orders",
"name": "Orders",
"permissions": {
"write": false,
"hide": false,
"delete": false,
"rename": false,
"changeSet": false,
"restoreDefaults": false,
"scan": false
},
"schemaId": "public",
"mappingId": "orders",
"datasourceId": "00000000-0000-4000-8000-000000000002"
}
}
}
]
}
],
"start": 0,
"count": 3,
"total": 3
}
Captured from the API examples test suite; ids and timestamps are normalized.

POST /api/datasources/{id}/suites/{suiteId}/partitions

Add a partition value and generate its entries. Payload { name, generateAllEntries?, preserveSubstitutions? }. Returns the suite.

Add a partitionPOST /api/datasources/admin:northwind/suites/00000000-0000-4000-8000-000000000001/partitions
POST /api/datasources/{id}/suites/{suiteId}/partitions adds a partition value and regenerates entries for it. Payload { name (required), generateAllEntries? (default true), preserveSubstitutions? (default true) }. Returns the suite.
Request body
{
"name": "1999"
}
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/partitions"
},
"inf:suite-mappings": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/partitions/mappings"
},
"inf:suite-partitions": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/partitions/partitions"
},
"inf:suite-generate": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/partitions/_generate"
}
},
"permissions": {
"delete": true,
"rename": true,
"write": true
},
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000001",
"name": "Orders by Year",
"slug": "orders-by-year",
"description": null,
"label": "Year",
"defaultPartitionId": "00000000-0000-4000-8000-000000000002",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"datasourceId": "00000000-0000-4000-8000-000000000003"
}
Captured from the API examples test suite; ids and timestamps are normalized.

GET /api/datasources/{id}/suites/{suiteId}/partitions/{partitionId}

Get one partition.

Get one partitionGET /api/datasources/admin:northwind/suites/00000000-0000-4000-8000-000000000001/partitions/00000000-0000-4000-8000-000000000002
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/partitions/00000000-0000-4000-8000-000000000002"
}
},
"entryMap": {
"00000000-0000-4000-8000-000000000003:public+orders": {
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000004",
"suiteId": "00000000-0000-4000-8000-000000000001",
"partitionId": "00000000-0000-4000-8000-000000000002",
"mappingId": "00000000-0000-4000-8000-000000000005",
"tableName": "orders_1996",
"substitutions": {},
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000005",
"suiteId": "00000000-0000-4000-8000-000000000001",
"pattern": "orders_${partition}",
"substitutions": {},
"mappingId": "00000000-0000-4000-8000-000000000003:public+orders",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"id": "00000000-0000-4000-8000-000000000003:public+orders",
"name": "Orders",
"permissions": {
"write": false,
"hide": false,
"delete": false,
"rename": false,
"changeSet": false,
"restoreDefaults": false,
"scan": false
},
"schemaId": "public",
"mappingId": "orders",
"datasourceId": "00000000-0000-4000-8000-000000000003"
}
}
},
"public+orders": {
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000004",
"suiteId": "00000000-0000-4000-8000-000000000001",
"partitionId": "00000000-0000-4000-8000-000000000002",
"mappingId": "00000000-0000-4000-8000-000000000005",
"tableName": "orders_1996",
"substitutions": {},
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000005",
"suiteId": "00000000-0000-4000-8000-000000000001",
"pattern": "orders_${partition}",
"substitutions": {},
"mappingId": "00000000-0000-4000-8000-000000000003:public+orders",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"id": "00000000-0000-4000-8000-000000000003:public+orders",
"name": "Orders",
"permissions": {
"write": false,
"hide": false,
"delete": false,
"rename": false,
"changeSet": false,
"restoreDefaults": false,
"scan": false
},
"schemaId": "public",
"mappingId": "orders",
"datasourceId": "00000000-0000-4000-8000-000000000003"
}
}
}
},
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000002",
"name": "1996",
"suiteId": "00000000-0000-4000-8000-000000000001",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"entries": [
{
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000004",
"suiteId": "00000000-0000-4000-8000-000000000001",
"partitionId": "00000000-0000-4000-8000-000000000002",
"mappingId": "00000000-0000-4000-8000-000000000005",
"tableName": "orders_1996",
"substitutions": {},
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000005",
"suiteId": "00000000-0000-4000-8000-000000000001",
"pattern": "orders_${partition}",
"substitutions": {},
"mappingId": "00000000-0000-4000-8000-000000000003:public+orders",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"mapping": {
"id": "00000000-0000-4000-8000-000000000003:public+orders",
"name": "Orders",
"permissions": {
"write": true,
"hide": true,
"delete": true,
"rename": true,
"changeSet": true,
"restoreDefaults": true,
"scan": true
},
"schemaId": "public",
"mappingId": "orders",
"datasourceId": "00000000-0000-4000-8000-000000000003"
}
}
}
]
}
Captured from the API examples test suite; ids and timestamps are normalized.

PUT /api/datasources/{id}/suites/{suiteId}/partitions/{partitionId}

Rename a partition (clears and regenerates its entries). Payload { name, generateAllEntries?, preserveSubstitutions? }.

DELETE /api/datasources/{id}/suites/{suiteId}/partitions/{partitionId}

Remove a partition (and its entries). Returns 200 with an empty body.

Remove a partitionDELETE /api/datasources/admin:northwind/suites/00000000-0000-4000-8000-000000000001/partitions/00000000-0000-4000-8000-000000000002
DELETE /api/datasources/{id}/suites/{suiteId}/partitions/{partitionId} removes a partition (and its entries). Returns 200 with an empty body.
Response · 200 · no body
Captured from the API examples test suite; ids and timestamps are normalized.

Entries

Entries are the generated rows that map each (mapping × partition) to a real table. They are usually managed through generation, but a single entry's table can be overridden when a table doesn't follow the pattern.

GET /api/datasources/{id}/suites/{suiteId}/entries

List the materialized entries (each pointing at a real table such as orders_1996).

List a suite’s entriesGET /api/datasources/admin:northwind/suites/00000000-0000-4000-8000-000000000001/entries
GET /api/datasources/{id}/suites/{suiteId}/entries lists the materialized entries — one per (mapping x partition) — each pointing at a real table (e.g. orders_1996).
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/entries"
}
},
"items": [
{
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000002",
"suiteId": "00000000-0000-4000-8000-000000000001",
"partitionId": "00000000-0000-4000-8000-000000000003",
"mappingId": "00000000-0000-4000-8000-000000000004",
"tableName": "orders_1996",
"substitutions": {},
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z"
},
{
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000005",
"suiteId": "00000000-0000-4000-8000-000000000001",
"partitionId": "00000000-0000-4000-8000-000000000006",
"mappingId": "00000000-0000-4000-8000-000000000004",
"tableName": "orders_1997",
"substitutions": {},
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z"
},
{
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000007",
"suiteId": "00000000-0000-4000-8000-000000000001",
"partitionId": "00000000-0000-4000-8000-000000000008",
"mappingId": "00000000-0000-4000-8000-000000000004",
"tableName": "orders_1998",
"substitutions": {},
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z"
},
"… 1 more items (4 total) — omitted from docs"
],
"start": 0,
"count": 4,
"total": 4
}
Captured from the API examples test suite; ids and timestamps are normalized.

GET /api/datasources/{id}/suites/{suiteId}/entries/{entryId}

Get one entry.

Get one entryGET /api/datasources/admin:northwind/suites/00000000-0000-4000-8000-000000000001/entries/00000000-0000-4000-8000-000000000002
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/entries/00000000-0000-4000-8000-000000000002"
}
},
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000002",
"suiteId": "00000000-0000-4000-8000-000000000001",
"partitionId": "00000000-0000-4000-8000-000000000003",
"mappingId": "00000000-0000-4000-8000-000000000004",
"tableName": "orders_1996",
"substitutions": {},
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z"
}
Captured from the API examples test suite; ids and timestamps are normalized.

PUT /api/datasources/{id}/suites/{suiteId}/entries/{entryId}

Override which physical table an entry maps to. Payload { tableName, substitutions? }.

Override an entry’s tablePUT /api/datasources/admin:northwind/suites/00000000-0000-4000-8000-000000000001/entries/00000000-0000-4000-8000-000000000002
PUT /api/datasources/{id}/suites/{suiteId}/entries/{entryId} overrides which physical table an entry maps to. Payload { tableName (required), substitutions? }. Use it when a partition’s table does not follow the pattern.
Request body
{
"tableName": "orders_1996"
}
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasources/admin%3Anorthwind/suites/00000000-0000-4000-8000-000000000001/entries/00000000-0000-4000-8000-000000000002"
}
},
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000002",
"suiteId": "00000000-0000-4000-8000-000000000001",
"partitionId": "00000000-0000-4000-8000-000000000003",
"mappingId": "00000000-0000-4000-8000-000000000004",
"tableName": "orders_1996",
"substitutions": {},
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z"
}
Captured from the API examples test suite; ids and timestamps are normalized.

GET /api/suite-mappings

List the distinct base-mapping ids that participate in any suite (tenant-wide). Used to flag which mappings are part of a suite.

List all suite-mapped mapping idsGET /api/suite-mappings
GET /api/suite-mappings returns the distinct base-mapping ids that participate in any suite (tenant-wide), used to flag mappings that are part of a suite.
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/suite-mappings"
}
},
"00000000-0000-4000-8000-000000000001:public+orders": {
"mappingId": "00000000-0000-4000-8000-000000000001:public+orders"
}
}
Captured from the API examples test suite; ids and timestamps are normalized.