Skip to main content

Discovery & Templates

Template discovery endpoints. They all answer the same shape: a collection of suggestions, each with the detective that produced it and a value payload ready to feed the corresponding builder UI.

GET /api/datasets/{id}/discover

Suggest visuals for a chosen set of fields: each item's value.component is a ready-to-POST visual starter.

Authentication: Required

Query Parameters:

ParameterTypeDescription
fieldsarrayField names to base suggestions on (comma-separated or repeated)
aliasstringReport-Dataset alias context
Discover visuals for fieldsGET /api/datasets/admin:northwind-orders/discover?fields=ShipCountry,orderAmount
Suggests visual templates that fit the chosen fields, ready to feed the visual builder.
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasets/admin%3Anorthwind-orders/discover"
}
},
"items": [
{
"detective": "chart-single-group",
"id": "chart-single-group:0",
"value": {
"component": {
"chart": {
"dataset": "00000000-0000-4000-8000-000000000001",
"x": "ShipCountry",
"series": [
{
"y": "sum:orderAmount",
"type": "bar"
}
],
"legend": {
"enabled": false,
"maxHeight": 70
}
}
}
}
},
{
"detective": "country-map",
"id": "country-map:0",
"value": {
"component": {
"map": {
"dataset": "00000000-0000-4000-8000-000000000001",
"field": "ShipCountry",
"group": "world",
"map": "world/world-lowres",
"joinBy": "name",
"y": "sum:orderAmount"
}
}
}
},
{
"detective": "kpi",
"id": "kpi:0",
"value": {
"component": {
"kpi": {
"dataset": "00000000-0000-4000-8000-000000000001",
"y": "sum:orderAmount"
}
}
}
},
"… 2 more items (5 total) — omitted from docs"
],
"start": 0,
"count": 5,
"total": 5
}
Captured from the API examples test suite; ids and timestamps are normalized.

GET /api/datasets/{id}/visual-templates

List every visual type that can be built on this Dataset, with starter component configs. The starters are seeded with sampled example fields from the Dataset.

Authentication: Required

List visual templatesGET /api/datasets/admin:northwind-orders/visual-templates
Every visual type that can be built on this Dataset, with starter component configs. The starters are seeded with sampled example fields from your Dataset (omitted here because they vary).
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasets/admin%3Anorthwind-orders/visual-templates"
}
},
"items": [
{
"detective": "datasetGrid",
"id": "datasetGrid:0",
"value": {
"group": "Tables",
"label": "Data Grid",
"component": {
"datasetGrid": {
"dataset": "00000000-0000-4000-8000-000000000001"
}
}
}
},
{
"detective": "pivot-viz",
"id": "pivot-viz:0",
"value": {
"group": "Tables",
"label": "Pivot Table",
"component": {
"pivot": {
"dataset": "00000000-0000-4000-8000-000000000001",
"alias": "00000000-0000-4000-8000-000000000001",
"layout": "tabular"
}
}
}
},
{
"detective": "summary-viz",
"id": "summary-viz:0",
"value": {
"group": "Tables",
"label": "Summary Table",
"component": {
"summary": {
"dataset": "00000000-0000-4000-8000-000000000001",
"alias": "00000000-0000-4000-8000-000000000001"
}
}
}
},
"… 16 more items (19 total) — omitted from docs"
],
"start": 0,
"count": 19,
"total": 19
}
Captured from the API examples test suite; ids and timestamps are normalized.

GET /api/dataset-templates

List the ways a new Dataset can be built (upload a file, query a Datasource, …), as editorComponent configs for the new-Dataset dialog.

Authentication: Required

List Dataset builder templatesGET /api/dataset-templates
The ways a new Dataset can be built (from a Datasource query, an upload, ...).
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/dataset-templates"
}
},
"items": [
{
"detective": "00000000-0000-4000-8000-000000000001",
"id": "00000000-0000-4000-8000-000000000001:0",
"value": {
"group": "__top",
"groupPriority": 500,
"name": "Upload a File",
"priority": 100,
"editorComponent": {
"newDatasetDialog": {
"name": "Upload a File",
"description": "Create a Dataset from a File containing data, such as an Excel Spreadsheet",
"color": "blueGrey",
"component": "newDatasetFileUploadEditor"
}
},
"dataset": {}
}
},
{
"detective": "00000000-0000-4000-8000-000000000002",
"id": "00000000-0000-4000-8000-000000000002:0",
"value": {
"group": "__top",
"groupPriority": 1000,
"name": "Native SQL",
"priority": 10,
"iconSvg": "/images/query/native-sql-query.svg",
"editOnCreate": true,
"editorComponent": {
"newDatasetDialog": {
"name": "Native SQL",
"description": "Create a Dataset based on your own SQL statement",
"iconSvg": "/images/query/native-sql-query.svg",
"color": "deepPurple",
"component": {
"newDatasetNativeSqlEditor": {
"datasources": [
{
"defaultLinkType": "sql",
"aiSystemMessage": "This is a PostgresSQL database. Identifiers are case-sensitive by default. \n Always surround all column names, table names, and schema names in double-quotes (\"). \n For example:\n SELECT \"OrderID\", \"ShipCountry\" FROM \"public\".\"orders\" WHERE \"ShipCity\" = 'Raleigh';\n ---",
"family": "sql",
"languages": [
"informer",
"sql",
"distinctValue",
"… 2 more items (5 total) — omitted from docs"
],
"naturalId": "admin:northwind",
"image": "/opt/informer/packages/informer-server/modules/sql/images/postgres.svg",
"compatibility": [],
"permissions": {
"assignTags": false,
"edit": false,
"delete": false,
"share": false,
"write": false,
"changeOwner": false,
"ping": false,
"scan": false,
"downloadSchema": false,
"importData": false,
"importSchema": false,
"rename": false,
"editConnection": false,
"createLink": false,
"setWrite": false,
"createSuite": false,
"createFieldExpression": false,
"createMapping": false,
"bundle": false,
"query": false
},
"id": "00000000-0000-4000-8000-000000000003",
"tenant": "acme",
"ownerId": "admin",
"slug": "northwind",
"name": "Northwind",
"description": null,
"embedded": false,
"type": "postgres",
"connection": {
"host": "localhost",
"pool": {
"max": 5,
"min": 0,
"idle": 10000,
"acquire": 10000
},
"port": 5432,
"user": "northwinduser",
"database": "northwind",
"password": "encrypted:iv:0000000000000000",
"idleTimeoutMillis": 7
},
"scannedAt": "2026-01-15T16:20:00.000Z",
"schemaUpdatedAt": "2026-01-15T16:20:00.000Z",
"rescanRequired": false,
"shared": false,
"schemas": "(omitted)",
"source": null,
"sourceId": null,
"settings": {
"multiSchema": false,
"useFakeData": false,
"remoteQueryBatchSize": {
"multiKey": 500,
"singleKey": 500
},
"usePreparedStatements": false
},
"data": null,
"appId": null,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"folderId": null,
"fileId": null
}
]
}
}
}
},
"dataset": {
"query": {}
}
}
},
{
"detective": "00000000-0000-4000-8000-000000000004",
"id": "00000000-0000-4000-8000-000000000004:0",
"value": {
"group": "Northwind",
"groupPriority": 10,
"name": "Northwind Orders",
"description": "A pre-built Dataset that shows all the orders in the Northwind Datasource",
"image": "/opt/informer/packages/informer-server/modules/sql/images/postgres.svg",
"editorComponent": {
"newDatasetDialog": {
"name": "Northwind Orders",
"description": "A pre-built Dataset that shows all the orders in the Northwind Datasource",
"materialIcon": "shopping_cart",
"color": "blue",
"component": "newDatasetBasicEditor"
}
},
"dataset": {
"name": "Northwind Orders",
"description": "A Dataset consisting of all orders in the Northwind system (public schema)",
"namespace": "admin",
"source": "northwind-datasets",
"query": {
"embedded": true,
"language": "informer",
"datasourceId": "00000000-0000-4000-8000-000000000003",
"flow": [
{
"calculatedField": {
"alias": "salesperson",
"label": "Salesperson",
"script": "FirstName + ' ' + LastName"
}
},
{
"calculatedField": {
"alias": "orderAmount",
"label": "Order Amount",
"script": "UnitPrice * Quantity"
}
},
{
"calculatedField": {
"alias": "shipState",
"label": "Ship State",
"script": "ShipCountry === \"USA\" ? ShipRegion : null"
}
}
],
"payload": {
"source": {
"id": "00000000-0000-4000-8000-000000000003:public+orders",
"mappingId": "orders",
"schemaId": "public"
},
"fields": [
{
"id": "OrderDate",
"path": "OrderDate",
"type": "field",
"label": "Order Date",
"fieldId": "OrderDate",
"linkRef": null,
"rawType": "date",
"dataType": "date_tz",
"position": 0
},
{
"id": "RequiredDate",
"path": "RequiredDate",
"type": "field",
"label": "Required Date",
"fieldId": "RequiredDate",
"linkRef": null,
"rawType": "date",
"dataType": "date_tz",
"position": 1
},
{
"id": "ShipAddress",
"path": "ShipAddress",
"type": "field",
"label": "Ship Address",
"fieldId": "ShipAddress",
"linkRef": null,
"rawType": "character varying",
"dataType": "keyword_text",
"position": 2
},
"… 10 more items (13 total) — omitted from docs"
],
"linkRefs": [
{
"id": "employees",
"linkId": "00000000-0000-4000-8000-000000000003:public+orders:employees",
"details": {
"id": "00000000-0000-4000-8000-000000000003:public+orders:employees",
"defn": [
{
"toField": "EmployeeID",
"operator": "=",
"fromField": "EmployeeID",
"toMapping": "employees",
"fromMapping": "orders",
"toSchema": "public",
"fromSchema": "public"
}
],
"toId": "00000000-0000-4000-8000-000000000003:public+employees",
"type": "sql",
"fromId": "00000000-0000-4000-8000-000000000003:public+orders",
"linkId": "employees"
}
},
{
"id": "order-details",
"linkId": "00000000-0000-4000-8000-000000000003:public+orders:order-details",
"details": {
"id": "00000000-0000-4000-8000-000000000003:public+orders:order-details",
"defn": [
{
"toField": "OrderID",
"operator": "=",
"fromField": "OrderID",
"toMapping": "order_details",
"fromMapping": "orders",
"toSchema": "public",
"fromSchema": "public"
}
],
"toId": "00000000-0000-4000-8000-000000000003:public+order_details",
"type": "sql",
"fromId": "00000000-0000-4000-8000-000000000003:public+orders",
"linkId": "order-details"
}
},
{
"id": "order-details/products",
"linkId": "00000000-0000-4000-8000-000000000003:public+order_details:products",
"details": {
"id": "00000000-0000-4000-8000-000000000003:public+order_details:products",
"defn": [
{
"toField": "ProductID",
"operator": "=",
"fromField": "ProductID",
"toMapping": "products",
"fromMapping": "order_details",
"toSchema": "public",
"fromSchema": "public"
}
],
"toId": "00000000-0000-4000-8000-000000000003:public+products",
"type": "sql",
"fromId": "00000000-0000-4000-8000-000000000003:public+order_details",
"linkId": "products"
}
}
]
}
}
}
}
},
"… 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/datasets/{id}/job-templates

List Job starters for the Dataset (for example a scheduled refresh), as prefilled Job payloads.

Authentication: Required

List job templates for a DatasetGET /api/datasets/admin:northwind-orders/job-templates
Job types that can be scheduled against the Dataset (refresh, snapshot, ...).
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasets/admin%3Anorthwind-orders/job-templates"
}
},
"items": [
{
"detective": "00000000-0000-4000-8000-000000000001",
"id": "00000000-0000-4000-8000-000000000001:0",
"value": {
"group": "__top",
"name": "New Job",
"description": "Access or refresh a Dataset, add Filters, and then perform various actions.",
"materialIcon": "lightbulb_outline",
"datasetId": "00000000-0000-4000-8000-000000000002",
"job": {
"name": "Refresh Northwind Orders",
"type": "smart-job",
"datasets": {
"northwindOrders": {
"datasetId": "00000000-0000-4000-8000-000000000002",
"refresh": true
}
},
"data": {
"actions": []
}
}
}
}
],
"start": 0,
"count": 1,
"total": 1
}
Captured from the API examples test suite; ids and timestamps are normalized.

GET /api/datasets/{id}/jobs

List the Jobs that target this Dataset. The response is a plain array, empty when nothing is scheduled.

Authentication: Required

List a Dataset's jobsGET /api/datasets/admin:northwind-orders/jobs
A plain array of the Jobs targeting this Dataset; empty when nothing is scheduled.
Response · 200 · empty list (no items in this example)
Captured from the API examples test suite; ids and timestamps are normalized.

ETag Support: Based on job table changes.


GET /api/datasets/{id}/painless-templates

List the script builders available for calculated fields: the raw script driver plus guided builders (Time Between, …). Each item's value is the script payload skeleton for POST /fields.

Authentication: Required

List painless script templatesGET /api/datasets/admin:northwind-orders/painless-templates
The script builders available for calculated fields; the raw script driver is one of them.
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasets/admin%3Anorthwind-orders/painless-templates"
}
},
"items": [
{
"detective": "00000000-0000-4000-8000-000000000001",
"id": "00000000-0000-4000-8000-000000000001:0",
"value": {
"name": "Elasticsearch Script",
"group": "__top",
"icon": "fas fa-scroll",
"value": {
"script": {
"script": {}
}
}
}
},
{
"detective": "00000000-0000-4000-8000-000000000002",
"id": "00000000-0000-4000-8000-000000000002:0",
"value": {
"name": "Time Between",
"group": "__top",
"iconSvg": "/assets/painless/images/time-between.svg",
"value": {
"script": {
"timeBetween": {}
}
}
}
},
{
"detective": "00000000-0000-4000-8000-000000000003",
"id": "00000000-0000-4000-8000-000000000003:0",
"value": {
"name": "Concatenate",
"group": "__top",
"image": "/assets/painless/images/concatenate.svg",
"value": {
"script": {
"concatenate": {}
}
}
}
}
],
"start": 0,
"count": 3,
"total": 3
}
Captured from the API examples test suite; ids and timestamps are normalized.