API Documentation
Read your organisation's artifact data (the same records you see in the grids) from your own scripts and tools.
Base URL:
https://<your-cybercyte-host>/grid-apiAuthentication: send your organisation's API key in the
x-api-keyheader on every request.Format: JSON in, JSON out.
POSTbodies useContent-Type: application/json.Interactive reference: Help → API Documentation in the product lists every field and lets you try the calls.
export CC_HOST="https://<your-cybercyte-host>"
export CC_KEY="<your-api-key>"A typical integration takes three steps: find the artifact, check its columns, then read its data.
GET /grid-api/artifacts
List the artifact types you can read
GET /grid-api/columns/{artifact}
Get the columns of one artifact type
POST /grid-api/columns-batch
Get the columns of several artifact types at once
POST /grid-api/data/{artifact}
Read a page of records, with filters, search and sorting
1. List artifact types
GET /grid-api/artifacts (or POST with the same fields as a JSON body)
search
Words that must all appear in the artifact's name or table name, ignoring case
parent
Only artifacts in this group, e.g. Threat Analytics, Windows, GRC
includeColumns
true to include each artifact's columns in the same response
Pass the artifact value, or the table value, to the other endpoints. URL-encode it in paths, e.g. Windows%20Threat%20Monitoring%20Events.
2. Get an artifact's columns
GET /grid-api/columns/{artifact}
Use field names in selectFields, sort, searchFields and filters. Columns with hidden: false are the ones returned by default.
Several artifacts at once: POST /grid-api/columns-batch
The response is keyed by exactly the names you sent. An unknown name is left out rather than failing the call.
3. Read data
POST /grid-api/data/{artifact}. The body is optional: without one, you get the first page of default columns, newest first.
selectFields
Columns to return, in this order
filters
Conditions the records must match (see below)
search / searchFields
Free-text search, optionally limited to some columns
sort
{ "<column>": "asc" | "desc" }, or an array of these for several columns
pageSize / pageOffset
Page size (1–1000) and number of records to skip
Example: high-risk threat events from the last 30 days
High or critical risk (risk_score 71 and above) or a high AI risk score, tagged as malicious or suspicious, sorted by risk, then newest first:
Each record in doc is an array whose values line up with cols. len is the total number of matches across all pages (counting stops at 10,000). To get the next page, add pageSize to pageOffset.
A
risk_scoreof exactly 70 means the record has not been classified yet. To get elevated risk only, usegte: 71.
More examples
Search for a process name, limited to the image path column:
Unacknowledged critical events since a fixed date:
Filter reference
Equals
{ "risk_score": 90 }
Operators
eq, ne, gt, gte, lt, lte, in, nin: { "risk_score": { "gt": 70, "lte": 89 } }
Combine
{ "AND": [ … ] }, { "OR": [ … ] }, { "NOT": { … } }, nestable. Several columns in one object must all match.
Scores
risk_score, ai_risk_score, exposure_risk_score: any operator
Dates
first_discovery_date, last_update_date: a date ("2026-09-01") or relative to now ("NOW-30d", "NOW-12H", "NOW-1y2m"). Units: y m w d H M S
Flags
is_acknowledged, is_malicious, is_shadow_it: 0 or 1
Tags
has (this tag), anyin (any of these), allin (only tags from this list)
Empty values
Records with no value are excluded by ne and NOT. Add null to a list to include them: { "in": [90, null] }
Conditions on columns the artifact doesn't have, unknown operators and wrongly typed values are ignored rather than rejected. If a filter seems to have no effect, check the column names against /grid-api/columns/{artifact}.
Errors
400
A required field is missing or has the wrong type, e.g. { "err": "A non-empty \"artifacts\" (or \"tables\") array is required." }
401
The x-api-key header is missing, unknown or expired: { "err": "Wrong API key!" }
404
Unknown artifact type: { "err": "The artifact type \"…\" was not found." }
500
Server-side error
Last updated
Was this helpful?