Skip to main content

Data Operations

Endpoints for managing Dataset records: retrieving, adding, replacing, deleting, and searching data.

GET /api/datasets/{id}/data

Get Dataset records with pagination, sorting, and full-text search. Records arrive flattened: each item is just the row values.

Authentication: Required

Path Parameters:

ParameterTypeDescription
idstringDataset UUID or ownerId:slug natural id

Query Parameters:

ParameterTypeDefaultDescription
qstringFull-text search across the index
sortstringField name to sort by (repeat for several)
startinteger0Pagination offset
limitinteger50Number of results per page
report / aliasstringReport context (applies the Report's field restrictions)
filterobjectAccepted for legacy reasons but ignored; express criteria through _search
Read Dataset recordsGET /api/datasets/admin:reorder-points/data?limit=2&sort=sku
Records arrive flattened (just the row values). sort entries are field names; q full-text searches the index. The filter query parameter is accepted for legacy reasons but ignored; express criteria through _search instead.
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasets/admin%3Areorder-points/data?start=0&limit=2&sort=sku"
}
},
"items": [
{
"product": "Chai",
"reorderAt": 25,
"sku": "BEV-001"
},
{
"product": "Chang",
"reorderAt": 40,
"sku": "BEV-002"
}
],
"start": 0,
"count": 2,
"total": 2
}
Captured from the API examples test suite; ids and timestamps are normalized.

ETag Support: Based on the Dataset's dataUpdatedAt.


POST /api/datasets/{id}/data

Append records to the Dataset.

Authentication: Required

Permission: dataset:write (Data Wizard or above on the owning team)

Request Body: an array of record objects (or a single object).

Append recordsPOST /api/datasets/admin:reorder-points/data
Accepts an array (or a single object). New columns are added to the mapping on the fly. Responds 200 with an empty body.
Request body
[
{
"sku": "CON-001",
"product": "Aniseed Syrup",
"reorderAt": 25
}
]
Response · 200 · no body
Captured from the API examples test suite; ids and timestamps are normalized.

Behavior:

  • Records are appended; existing data is untouched
  • New columns are added to the index mapping on the fly (Informer's dynamic templates type them; run _syncFields to pick them up as fields)
  • Responds 200 with an empty body

PUT /api/datasets/{id}/data

Replace all Dataset data: the index is cleared, then the payload is written.

Authentication: Required

Request Body: an array of record objects.

Replace all recordsPUT /api/datasets/admin:reorder-points/data
Clears the index, then writes the payload. Responds 200 with an empty body.
Request body
[
{
"sku": "BEV-001",
"product": "Chai",
"reorderAt": 30
},
{
"sku": "BEV-002",
"product": "Chang",
"reorderAt": 45
}
]
Response · 200 · no body
Captured from the API examples test suite; ids and timestamps are normalized.
Data Replacement

All existing records are deleted before the new ones are indexed. Use POST to append instead.


DELETE /api/datasets/{id}/data

Clear all data from the Dataset index.

Authentication: Required

Permission: dataset:write (Data Wizard or above on the owning team)

Query Parameters:

ParameterTypeDefaultDescription
removeFieldsbooleanfalseAlso delete the field definitions. Calculated (script) fields are kept
Clear all recordsDELETE /api/datasets/admin:reorder-points/data
Drops the index; the Dataset and its fields survive. removeFields=true also deletes the non-calculated field definitions. Responds 200 with an empty body.
Response · 200 · no body
Captured from the API examples test suite; ids and timestamps are normalized.

Behavior:

  • The index is dropped; the Dataset row, fields, filters, and configuration survive
  • Refresh exceptions for the Dataset are cleared
  • Responds 200 with an empty body

POST /api/datasets/{id}/_search

Execute an Elasticsearch search against the Dataset. The body is a standard Elasticsearch search body; the response is the raw search result.

Authentication: Required

Request Body (top-level keys):

FieldTypeDescription
queryobjectElasticsearch query DSL
_sourcearray/string/booleanFields to return
sortarrayElasticsearch sort clauses ([{ "field": "asc" }])
from / sizeintegerPagination
aggsobjectElasticsearch aggregations
snapshotsobjectOverride your snapshot view settings for this search (see Settings)
report / aliasstringReport context (applies the Report's field restrictions)
Search a Dataset (Elasticsearch DSL)POST /api/datasets/admin:northwind-orders/_search
The body is an Elasticsearch search body; the response is the raw search result. snapshots overrides your snapshot view settings for this search.
Request body
{
"query": {
"bool": {
"filter": [
{
"term": {
"ShipCountry": "Norway"
}
},
{
"range": {
"orderAmount": {
"gte": 100
}
}
}
]
}
},
"sort": [
{
"orderAmount": "asc"
}
],
"size": 524288,
"_source": [
"OrderDate",
"ProductName",
"ShipCountry",
"orderAmount"
]
}
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasets/admin%3Anorthwind-orders/_search"
}
},
"took": 5,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 12,
"max_score": null,
"hits": [
{
"_index": "docsex.acme.northwind-orders.1700000000000",
"_type": "_doc",
"_id": "doc-1",
"_score": null,
"_source": {
"OrderDate": "2026-01-15T16:20:00.000Z",
"ProductName": "Steeleye Stout",
"ShipCountry": "Norway",
"orderAmount": 144
},
"sort": [
144
]
},
{
"_index": "docsex.acme.northwind-orders.1700000000000",
"_type": "_doc",
"_id": "doc-2",
"_score": null,
"_source": {
"OrderDate": "2026-01-15T16:20:00.000Z",
"ProductName": "Perth Pasties",
"ShipCountry": "Norway",
"orderAmount": 164
},
"sort": [
164
]
}
]
}
}
Captured from the API examples test suite; ids and timestamps are normalized.

Error Mapping: invalid queries answer 400; a missing index (Dataset never refreshed) answers 422.


The same search expressed as query parameters: query, aggs, aggregations, and snapshots take URL-encoded JSON; _source, sort, from, size, and searchType pass through. Use the POST form for anything non-trivial.

Authentication: Required

Search a Dataset (query string)GET /api/datasets/admin:northwind-orders/_search?size=0&aggs=%7B%22countries%22%3A%7B%22cardinality%22%3A%7B%22field%22%3A%22ShipCountry%22%7D%7D%7D
The same search expressed as query parameters; object parameters (query, aggs) take URL-encoded JSON. Use the POST form for anything non-trivial.
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasets/admin%3Anorthwind-orders/_search?size=0&aggs=countries,%5Bobject%20Object%5D"
}
},
"took": 5,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2155,
"max_score": null,
"hits": []
},
"aggregations": {
"countries": {
"meta": {
"field": "ShipCountry"
},
"value": 21
}
}
}
Captured from the API examples test suite; ids and timestamps are normalized.

ETag Support: Based on the Dataset's data and visuals timestamps.

Field names

Queries address fields by their Dataset field names. String fields index as keyword (exact term matches, sorting) with a .text sub-field for full-text match queries.