Download OpenAPI specification:
The Colrows REST API manages users, groups and the Consensus semantic layer: business terms, metrics, semantic datasets, semantic tables, semantic columns, table relationships, category sets, semantic objects, semantic events, semantic actions, semantic relationships, semantic categories and verified queries.
All paths are relative to https://cloud.colrows.com.
Every call except login and the OAuth token endpoints needs an Authorization: Bearer <token> header. The API accepts two kinds of token:
| Token | How to get it | What it can call |
|---|---|---|
| User session token | POST /api/user/login with a username and password |
Everything the user's role allows |
OAuth client access token (cr_oauth_cc_at_…) |
POST /api/oauth/token with an OAuth client's ID and secret |
Only the operations its scopes cover |
Use an OAuth client when a backend service, pipeline or script works with the semantic layer without a person signed in.
An organization admin creates a client with POST /api/sys/org/oauth-clients, or from the OAuth clients tab of the organization settings. Copy the client secret straight away: Colrows shows it only once.
Exchange the client ID and secret for an access token:
curl -X POST https://cloud.colrows.com/api/oauth/token \
-u "$CLIENT_ID:$CLIENT_SECRET" \
-d grant_type=client_credentials \
-d scope=semantic:read
Call the Semantic API with the token until it expires after 15 minutes, then request a new one:
curl https://cloud.colrows.com/api/consensus/metrics \
-H "Authorization: Bearer $ACCESS_TOKEN"
| Scope | Grants |
|---|---|
semantic:read |
Read every semantic entity in the Consensus semantic layer, including versions and lists |
semantic:read-write |
Create, update and delete semantic entities; includes read |
access-control:read |
List and get data access and data masking policies |
access-control:read-write |
Read, create, update and delete data access and data masking policies; includes read |
The semantic scopes cover every semantic entity, including the ones this reference documents: business terms, metrics, semantic datasets, semantic tables, semantic columns, table relationships, category sets, semantic objects, semantic events, semantic actions, semantic relationships, semantic categories and verified queries. Each operation lists the scope it needs. Semantic tables and columns come from metadata scans, so a client can read and update them but not create or delete them. Semantic categories can be created and read, but not updated or deleted.
Role requirements on an operation apply to user sessions. An OAuth client acts as a curator in its organization, so the scope is all it needs: semantic:read-write is enough to create, update and delete the semantic entities on this page. Verified queries can't be run over the REST API; agents run them with the MCP executeVerifiedQuery tool.
A few semantic operations don't accept OAuth client tokens at any scope: column distinct counts and distinct values, which read data from your database, and the business term draft-validation and intent-assessment helpers.
No operation in this reference runs queries you write against your data; metric, dataset and category set operations read from the datasource only to check output columns and values. A client can also hold semantic:sql, sql:execute, data:query, data:sql, documents:read, memory:read or memory:write; these scopes apply only to the Agent API routes under /api/agents/v1, which this reference does not cover. To give an AI agent query access as a signed-in user, connect it through MCP; MCP tokens act for that user and apply the user's data access rules.
A token without the required scope gets 403 Forbidden. Revoking a client stops all of its tokens at once.
A client with access-control:read or access-control:read-write manages data access and data masking policies with no user account. These scopes use client credentials only: no user sign-in, consent page, callback URL, or authorization code. Create the client as Server-to-server in Administration → Settings → OAuth clients, then request a token with scope=access-control:read-write (or access-control:read). access-control:read-write includes read access, so the token does not need both scopes.
| Method | Data access policy route | Data masking policy route | Required scope |
|---|---|---|---|
| GET | /api/access/list |
/api/masking/list |
access-control:read |
| GET | /api/access/list/{policyId} |
/api/masking/get/{policyId} |
access-control:read |
| GET | (none) | /api/masking/list/{policyId}/{version} |
access-control:read |
| POST | /api/access/create |
/api/masking/create |
access-control:read-write |
| PUT | /api/access/update |
/api/masking/update |
access-control:read-write |
| DELETE | /api/access/delete/{policyId} |
/api/masking/delete/{policyId} |
access-control:read-write |
Data masking policies replace redaction policies: the routes moved from /api/redaction/* to /api/masking/*, and the old routes no longer exist. Both policy types use scope, subjects and typed rules; see the request schemas on each operation. Unknown fields are rejected with 400. All calls act in the client's organization and use the same services as the UI, and policy creation records the creator as oauth-client:<clientId>. A token that holds access-control:read-write acts with the Admin role; other client tokens act as Curator. User sessions still need the Admin role to change policies; authorization-code tokens cannot call these routes.
Successful calls return HTTP 200 with this envelope:
{
"meta": { "ctime": "2026-09-27T10:15:30.123" },
"result": { "status": "SUCCESS", "outcome": "RESOLVED" },
"payload": { }
}
List calls may also include a pagination object. Errors return an HTTP 4xx or 5xx status with { "code": "...", "message": "..." }.
A few operations use their own format, described on each operation: login and token refresh return only payload, and the OAuth client and token endpoints return plain objects.
Sign in with a username and password to get a user session token, and refresh it before it expires.
Authenticates a user (native password, or a configured LDAP/OAuth/SAML realm) and opens a session. The response body is {payload: {...}} without the standard meta/result envelope; the access token and a refresh token are also set as HttpOnly cookies. When Turnstile is enabled on the server, turnstileToken must be supplied and valid.
User credentials.
| userName required | string User id (the user's email address). Lower-cased by the server; must not be null. |
| pwd required | string <password> User password. Trimmed by the server; must not be null. Never returned. |
| turnstileToken | string Cloudflare Turnstile response token. Required only when the server has Turnstile verification enabled; ignored otherwise. |
{- "userName": "priya.sharma@example.com",
- "pwd": "pa$$word",
- "turnstileToken": "0.aBcD1234-turnstile-response"
}{- "payload": {
- "token": "eyJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJwcml5YS5zaGFybWFAZXhhbXBsZS5jb20ifQ.c2lnbmF0dXJl",
- "timeToLive": 1790474400000,
- "authorizedAs": "ADMIN",
- "user": {
- "userId": "priya.sharma@example.com",
- "name": "Priya Sharma",
- "realm": "NATIVE",
- "active": true,
- "email": "priya.sharma@example.com",
- "ctime": 1785312000000,
- "admin": false,
- "orgId": "org_7f3a9c2e",
- "personaId": null
}
}
}Issues a new access token and rotates the refresh token. Send the CRrefresh cookie; if it is absent, a still-valid Bearer access token of an active user session is accepted to bootstrap a refresh session (OAuth client and MCP tokens are not accepted). The response body is {payload: {...}} without the standard envelope, and new CRtoken and CRrefresh cookies are set.
| CRrefresh | string Example: CRrefresh=Zm9vYmFyLXJlZnJlc2gtdG9rZW4tZXhhbXBsZQ Refresh token cookie set by login or a previous refresh (HttpOnly, Path=/api/user). |
{- "payload": {
- "token": "eyJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJwcml5YS5zaGFybWFAZXhhbXBsZS5jb20ifQ.c2lnbmF0dXJl",
- "timeToLive": 1790474400000,
- "authorizedAs": "ADMIN",
- "user": {
- "userId": "priya.sharma@example.com",
- "name": "Priya Sharma",
- "realm": "NATIVE",
- "active": true,
- "email": "priya.sharma@example.com",
- "ctime": 1785312000000,
- "admin": false,
- "orgId": "org_7f3a9c2e",
- "personaId": null
}
}
}Create, list and revoke OAuth clients: org-level credentials that let a backend service call the Semantic API without a user account. Only organization admins can manage them.
Creates an OAuth client (client ID and secret) for your organization. A backend service uses it to call the Semantic API without a user account.
Only organization admins can call this, with a user session token. OAuth client tokens are rejected.
The response contains clientSecret. This is the only time Colrows returns it: only a hash is stored, so copy it straight into your secret store. The response is sent with Cache-Control: no-store.
In the app, admins can do the same from the OAuth clients tab of the organization settings.
| name required | string Display name for the client. Must not be blank. The app limits it to 100 characters. |
| scopes required | Array of strings (OAuthScope) non-empty Items Enum: "semantic:read" "semantic:read-write" "access-control:read" "access-control:read-write" "semantic:sql" "sql:execute" "data:query" "data:sql" "documents:read" "memory:read" "memory:write" Scopes the client may request. At least one is required. Duplicates are removed. |
| expiresAt required | integer <int64> When the client stops working, in milliseconds since the Unix epoch. Must be in the future and no more than one year from now. |
{- "name": "Nightly metric sync",
- "scopes": [
- "semantic:read",
- "semantic:read-write"
], - "expiresAt": 1822478400000
}{- "clientId": "cr_sem_client_Xq3v9bT2mK8pLw4nR7sD1fGh6jZ0aYcE5uVoNiQeWxA",
- "clientSecret": "Jd8Kq2Lm5Np9Rs3Tv7Wx1Yz4Ab6Cd0Ef2Gh8Ij5Kl3M",
- "name": "Nightly metric sync",
- "scopes": [
- "semantic:read",
- "semantic:read-write"
], - "expiresAt": 1822478400000
}Lists your organization's OAuth clients, including revoked and expired ones. Secrets are never returned. Scopes that are no longer supported, such as semantic:write, are left out of scopes.
Any signed-in user of the organization can call this, with a user session token. OAuth client tokens are rejected.
[- {
- "clientId": "cr_sem_client_Xq3v9bT2mK8pLw4nR7sD1fGh6jZ0aYcE5uVoNiQeWxA",
- "name": "Nightly metric sync",
- "scopes": [
- "semantic:read",
- "semantic:read-write"
], - "createdAt": 1790942400000,
- "expiresAt": 1822478400000,
- "active": true
}
]Revokes a client. From then on, the client can't get new access tokens, and any access tokens it already has stop working on their next request. The client stays in the list with active: false.
Only organization admins can call this, with a user session token.
| clientId required | string Example: cr_sem_client_Xq3v9bT2mK8pLw4nR7sD1fGh6jZ0aYcE5uVoNiQeWxA ID of the client to revoke. |
{- "code": "INSUFFICIENT_PRIVILEGE",
- "message": "You do not have sufficient permissions to perform this operation."
}Exchange an OAuth client ID and secret for a 15-minute access token, and revoke tokens early.
Exchanges an OAuth client's ID and secret for an access token, using the OAuth 2.0 client credentials grant. Send the ID and secret with HTTP Basic authentication: Authorization: Basic base64(clientId:clientSecret).
The access token starts with cr_oauth_cc_at_ and is valid for 15 minutes. Send it as Authorization: Bearer <access_token> to the Semantic API, and request a new one when it expires. No refresh token is issued for this grant.
The token acts inside the client's organization with curator-level permissions, or admin-level permissions when it holds access-control:read-write. Every call is still limited to the scopes the token was issued with.
This endpoint also serves the authorization_code and refresh_token grants that MCP clients use; those are covered in the MCP documentation.
| grant_type required | string Value: "client_credentials" Must be |
| scope | string Optional. A space-separated subset of the client's scopes. If omitted, the token gets all of the client's scopes. An unsupported scope, including the legacy |
{- "access_token": "cr_oauth_cc_at_N4pQ8sV2xY6zB1cD5fG9hJ3kL7mR0tW4uA8eI2oS6yU",
- "token_type": "Bearer",
- "expires_in": 900,
- "scope": "semantic:read semantic:read-write"
}Revokes one access token before it expires. Authenticate with the same client's ID and secret over HTTP Basic. Tokens issued to other clients are left unchanged.
| token required | string The access token to revoke. |
{- "error": "invalid_client",
- "error_description": "Client credentials are invalid"
}Returns the organization's business terms. With personaId, returns the terms for that persona's semantic scope (the persona must exist in the organization). Required scope for OAuth clients: semantic:read.
| personaId | string Example: personaId=persona_finance Persona ID. When blank or omitted, all business terms of the organization are returned. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "termId": "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47",
- "label": "Net Revenue",
- "description": "Gross order value minus refunds and discounts, in USD.",
- "synonyms": [
- "net sales",
- "revenue after refunds"
], - "tableHints": [
- {
- "tableId": "tbl_4e8b2c19",
- "datasourceId": "ds_7f3a91c2",
- "schema": "sales",
- "tableName": "orders"
}
], - "dependencyTermIds": [
- "a31e9d44-0c6b-4f2a-8e7d-91b5c3f2e6a0"
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}
}
]
}Creates a business term in organization scope, or a persona variant of an organization term. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| baseEntityId | string or null Organization base term ID. Must be omitted for ORGANIZATION scope; required for PERSONA scope (must reference an organization-scoped term). |
object or null Defaults to ORGANIZATION when omitted. | |
| label required | string |
| description required | string |
| synonyms | Array of strings or null unique |
Array of objects or null (TableHint) Each hint must resolve to an active Semantic Table. | |
| dependencyTermIds | Array of strings or null Active Business Term IDs; no duplicates, no self-reference, no cycles. |
Array of objects or null (SemanticCategoryRef) |
{- "baseEntityId": "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "label": "Net Revenue",
- "description": "Gross order value minus refunds and discounts, in USD.",
- "synonyms": [
- "net sales"
], - "tableHints": [
- {
- "datasourceId": "ds_7f3a91c2",
- "schema": "sales",
- "tableName": "orders"
}
], - "dependencyTermIds": [
- "a31e9d44-0c6b-4f2a-8e7d-91b5c3f2e6a0"
], - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "termId": "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47",
- "label": "Net Revenue",
- "description": "Gross order value minus refunds and discounts, in USD.",
- "synonyms": [
- "net sales",
- "revenue after refunds"
], - "tableHints": [
- {
- "tableId": "tbl_4e8b2c19",
- "datasourceId": "ds_7f3a91c2",
- "schema": "sales",
- "tableName": "orders"
}
], - "dependencyTermIds": [
- "a31e9d44-0c6b-4f2a-8e7d-91b5c3f2e6a0"
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}
}
}Returns the current version of a business term. Table hints missing a tableId are filled from the matching Semantic Table when one is found. Required scope for OAuth clients: semantic:read.
| termId required | string Example: 5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47 Business Term ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "termId": "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47",
- "label": "Net Revenue",
- "description": "Gross order value minus refunds and discounts, in USD.",
- "synonyms": [
- "net sales",
- "revenue after refunds"
], - "tableHints": [
- {
- "tableId": "tbl_4e8b2c19",
- "datasourceId": "ds_7f3a91c2",
- "schema": "sales",
- "tableName": "orders"
}
], - "dependencyTermIds": [
- "a31e9d44-0c6b-4f2a-8e7d-91b5c3f2e6a0"
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}
}
}Saves a new version of a business term. Send the same termId in the path and in the request body. Scope and base term cannot change. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| termId required | string Example: 5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47 Business Term ID. |
| termId required | string ID of the term to update. This body field (not the path parameter) selects the term. |
| baseEntityId | string or null Optional. If present it must match the existing baseEntityId. |
object or null Optional. If present it must match the existing scope; scope cannot change on update. | |
| label required | string |
| description required | string |
| synonyms | Array of strings or null unique |
Array of objects or null (TableHint) Each hint must resolve to an active Semantic Table. | |
| dependencyTermIds | Array of strings or null Active Business Term IDs; no duplicates, no self-reference, no cycles. |
Array of objects or null (SemanticCategoryRef) When omitted/null, existing categories are kept. |
{- "termId": "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47",
- "baseEntityId": "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "label": "Net Revenue",
- "description": "Gross order value minus refunds and discounts, in USD.",
- "synonyms": [
- "net sales"
], - "tableHints": [
- {
- "datasourceId": "ds_7f3a91c2",
- "schema": "sales",
- "tableName": "orders"
}
], - "dependencyTermIds": [
- "a31e9d44-0c6b-4f2a-8e7d-91b5c3f2e6a0"
], - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "termId": "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47",
- "label": "Net Revenue",
- "description": "Gross order value minus refunds and discounts, in USD.",
- "synonyms": [
- "net sales",
- "revenue after refunds"
], - "tableHints": [
- {
- "tableId": "tbl_4e8b2c19",
- "datasourceId": "ds_7f3a91c2",
- "schema": "sales",
- "tableName": "orders"
}
], - "dependencyTermIds": [
- "a31e9d44-0c6b-4f2a-8e7d-91b5c3f2e6a0"
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}
}
}Deletes a business term. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| termId required | string Example: 5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47 Business Term ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "code": "OPERATION_SUCCESSFUL",
- "message": "Successful"
}
}Returns a specific version of a business term. Required scope for OAuth clients: semantic:read.
| termId required | string Example: 5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47 Business Term ID. |
| version required | integer <int32> Example: 2 Business term version number. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "termId": "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47",
- "label": "Net Revenue",
- "description": "Gross order value minus refunds and discounts, in USD.",
- "synonyms": [
- "net sales",
- "revenue after refunds"
], - "tableHints": [
- {
- "tableId": "tbl_4e8b2c19",
- "datasourceId": "ds_7f3a91c2",
- "schema": "sales",
- "tableName": "orders"
}
], - "dependencyTermIds": [
- "a31e9d44-0c6b-4f2a-8e7d-91b5c3f2e6a0"
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}
}
}Returns the organization's metrics. Required scope for OAuth clients: semantic:read.
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "metricId": "c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e",
- "datasourceId": "ds_7f3a91c2",
- "label": "Net Revenue",
- "description": "Order revenue net of refunds, per day and region.",
- "synonyms": [
- "net sales"
], - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "grain": {
- "keys": [
- "order_date",
- "region"
], - "description": "One row per order date and region."
}, - "computation": {
- "datasetInputs": [
- {
- "alias": "orders",
- "datasetId": "dset_6a1f93b2",
- "version": 2
}
], - "metricInputs": [
- {
- "alias": "refunds",
- "metricId": "b19e4c2d-3f6a-4d8e-a1b2-c3d4e5f6a7b8",
- "version": 1
}
], - "sql": "SELECT order_date, region, SUM(amount) AS net_revenue FROM {{dataset.orders}} GROUP BY order_date, region"
}, - "guidance": [
- "Use for finance reporting; excludes tax."
], - "examples": [
- {
- "question": "What was net revenue by region last month?",
- "usageType": "CORRECT",
- "explanation": "Region is part of the metric grain, so this aggregation is valid."
}
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}
}
]
}Creates a metric after validating its business terms, grain, examples and SQL against the datasource. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| baseEntityId | string or null Organization base entity ID. For ORGANIZATION scope it may be omitted (defaults to the metric ID). |
object or null Defaults to ORGANIZATION when omitted. | |
| datasourceId required | string |
| label required | string |
| description required | string |
| synonyms | Array of strings or null |
Array of objects or null (SemanticCategoryRef) | |
| businessTermIds | Array of strings or null Business Terms that ground this metric. Unique, active IDs. |
required | object (MetricGrain) |
required | object (MetricComputation) |
| guidance | Array of strings or null |
Array of objects or null (MetricUsageExample) |
{- "baseEntityId": "string",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "datasourceId": "ds_7f3a91c2",
- "label": "Net Revenue",
- "description": "Order revenue net of refunds, per day and region.",
- "synonyms": [
- "net sales"
], - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "grain": {
- "keys": [
- "order_date",
- "region"
], - "description": "One row per order date and region."
}, - "computation": {
- "datasetInputs": [
- {
- "alias": "orders",
- "datasetId": "dset_6a1f93b2",
- "version": 2
}
], - "metricInputs": [
- {
- "alias": "refunds",
- "metricId": "b19e4c2d-3f6a-4d8e-a1b2-c3d4e5f6a7b8",
- "version": 1
}
], - "sql": "SELECT order_date, region, SUM(amount) AS net_revenue FROM {{dataset.orders}} GROUP BY order_date, region"
}, - "guidance": [
- "Use for finance reporting; excludes tax."
], - "examples": [
- {
- "question": "What was net revenue by region last month?",
- "usageType": "CORRECT",
- "explanation": "Region is part of the metric grain, so this aggregation is valid."
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "metricId": "c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e",
- "datasourceId": "ds_7f3a91c2",
- "label": "Net Revenue",
- "description": "Order revenue net of refunds, per day and region.",
- "synonyms": [
- "net sales"
], - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "grain": {
- "keys": [
- "order_date",
- "region"
], - "description": "One row per order date and region."
}, - "computation": {
- "datasetInputs": [
- {
- "alias": "orders",
- "datasetId": "dset_6a1f93b2",
- "version": 2
}
], - "metricInputs": [
- {
- "alias": "refunds",
- "metricId": "b19e4c2d-3f6a-4d8e-a1b2-c3d4e5f6a7b8",
- "version": 1
}
], - "sql": "SELECT order_date, region, SUM(amount) AS net_revenue FROM {{dataset.orders}} GROUP BY order_date, region"
}, - "guidance": [
- "Use for finance reporting; excludes tax."
], - "examples": [
- {
- "question": "What was net revenue by region last month?",
- "usageType": "CORRECT",
- "explanation": "Region is part of the metric grain, so this aggregation is valid."
}
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}
}
}Returns the current version of a metric. Required scope for OAuth clients: semantic:read.
| metricId required | string Example: c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e Metric ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "metricId": "c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e",
- "datasourceId": "ds_7f3a91c2",
- "label": "Net Revenue",
- "description": "Order revenue net of refunds, per day and region.",
- "synonyms": [
- "net sales"
], - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "grain": {
- "keys": [
- "order_date",
- "region"
], - "description": "One row per order date and region."
}, - "computation": {
- "datasetInputs": [
- {
- "alias": "orders",
- "datasetId": "dset_6a1f93b2",
- "version": 2
}
], - "metricInputs": [
- {
- "alias": "refunds",
- "metricId": "b19e4c2d-3f6a-4d8e-a1b2-c3d4e5f6a7b8",
- "version": 1
}
], - "sql": "SELECT order_date, region, SUM(amount) AS net_revenue FROM {{dataset.orders}} GROUP BY order_date, region"
}, - "guidance": [
- "Use for finance reporting; excludes tax."
], - "examples": [
- {
- "question": "What was net revenue by region last month?",
- "usageType": "CORRECT",
- "explanation": "Region is part of the metric grain, so this aggregation is valid."
}
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}
}
}Saves a new version of a metric, re-validating its definition and SQL. Use expectedVersion for optimistic concurrency. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| metricId required | string Example: c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e Metric ID. |
| baseEntityId | string or null Organization base entity ID. For ORGANIZATION scope it may be omitted (defaults to the metric ID). |
object or null Defaults to ORGANIZATION when omitted. | |
| datasourceId required | string |
| label required | string |
| description required | string |
| synonyms | Array of strings or null |
Array of objects or null (SemanticCategoryRef) When omitted/null, existing categories are kept. | |
| businessTermIds | Array of strings or null Business Terms that ground this metric. Unique, active IDs. |
required | object (MetricGrain) |
required | object (MetricComputation) |
| guidance | Array of strings or null |
Array of objects or null (MetricUsageExample) | |
| expectedVersion | integer or null <int32> >= 1 Version the editor loaded. Must be positive; if it differs from the latest version the request fails with 409. When omitted the latest version is used. |
{- "baseEntityId": "string",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "datasourceId": "ds_7f3a91c2",
- "label": "Net Revenue",
- "description": "Order revenue net of refunds, per day and region.",
- "synonyms": [
- "net sales"
], - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "grain": {
- "keys": [
- "order_date",
- "region"
], - "description": "One row per order date and region."
}, - "computation": {
- "datasetInputs": [
- {
- "alias": "orders",
- "datasetId": "dset_6a1f93b2",
- "version": 2
}
], - "metricInputs": [
- {
- "alias": "refunds",
- "metricId": "b19e4c2d-3f6a-4d8e-a1b2-c3d4e5f6a7b8",
- "version": 1
}
], - "sql": "SELECT order_date, region, SUM(amount) AS net_revenue FROM {{dataset.orders}} GROUP BY order_date, region"
}, - "guidance": [
- "Use for finance reporting; excludes tax."
], - "examples": [
- {
- "question": "What was net revenue by region last month?",
- "usageType": "CORRECT",
- "explanation": "Region is part of the metric grain, so this aggregation is valid."
}
], - "expectedVersion": 3
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "metricId": "c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e",
- "datasourceId": "ds_7f3a91c2",
- "label": "Net Revenue",
- "description": "Order revenue net of refunds, per day and region.",
- "synonyms": [
- "net sales"
], - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "grain": {
- "keys": [
- "order_date",
- "region"
], - "description": "One row per order date and region."
}, - "computation": {
- "datasetInputs": [
- {
- "alias": "orders",
- "datasetId": "dset_6a1f93b2",
- "version": 2
}
], - "metricInputs": [
- {
- "alias": "refunds",
- "metricId": "b19e4c2d-3f6a-4d8e-a1b2-c3d4e5f6a7b8",
- "version": 1
}
], - "sql": "SELECT order_date, region, SUM(amount) AS net_revenue FROM {{dataset.orders}} GROUP BY order_date, region"
}, - "guidance": [
- "Use for finance reporting; excludes tax."
], - "examples": [
- {
- "question": "What was net revenue by region last month?",
- "usageType": "CORRECT",
- "explanation": "Region is part of the metric grain, so this aggregation is valid."
}
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}
}
}Deletes a metric. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| metricId required | string Example: c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e Metric ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "code": "OPERATION_SUCCESSFUL",
- "message": "Successful"
}
}Returns a specific version of a metric. Required scope for OAuth clients: semantic:read.
| metricId required | string Example: c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e Metric ID. |
| version required | integer <int32> Example: 2 Metric version number. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "metricId": "c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e",
- "datasourceId": "ds_7f3a91c2",
- "label": "Net Revenue",
- "description": "Order revenue net of refunds, per day and region.",
- "synonyms": [
- "net sales"
], - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "grain": {
- "keys": [
- "order_date",
- "region"
], - "description": "One row per order date and region."
}, - "computation": {
- "datasetInputs": [
- {
- "alias": "orders",
- "datasetId": "dset_6a1f93b2",
- "version": 2
}
], - "metricInputs": [
- {
- "alias": "refunds",
- "metricId": "b19e4c2d-3f6a-4d8e-a1b2-c3d4e5f6a7b8",
- "version": 1
}
], - "sql": "SELECT order_date, region, SUM(amount) AS net_revenue FROM {{dataset.orders}} GROUP BY order_date, region"
}, - "guidance": [
- "Use for finance reporting; excludes tax."
], - "examples": [
- {
- "question": "What was net revenue by region last month?",
- "usageType": "CORRECT",
- "explanation": "Region is part of the metric grain, so this aggregation is valid."
}
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}
}
}Returns the output columns of the metric's resolved SQL as reported by the datasource. Required scope for OAuth clients: semantic:read.
| metricId required | string Example: c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e Metric ID. |
| version required | integer <int32> Example: 2 Metric version number. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "ordinal": 1,
- "name": "net_revenue",
- "typeName": "NUMERIC",
- "sourceTable": "orders",
- "sourceColumn": "amount"
}
]
}Named SQL over one datasource in the Consensus semantic layer. Colrows fixes each version's output columns, and metrics bind to a dataset by ID and version.
Returns the organization's semantic datasets. Required scope for OAuth clients: semantic:read.
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "datasetId": "dset_6a1f93b2",
- "datasourceId": "ds_7f3a91c2",
- "label": "Completed orders",
- "description": "Orders that reached the COMPLETED status, one row per order.",
- "sql": "SELECT order_id, customer_id, amount FROM sales.orders WHERE status = 'COMPLETED'",
- "synonyms": [
- "closed orders"
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "dset_6a1f93b2",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
]
}Creates a Semantic Dataset. Colrows checks that the SQL references Semantic Tables of the datasource, asks the datasource for the SQL's output columns, and fixes those columns for this version. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| baseEntityId | string or null Organization entity ID that a persona variant belongs to. Required for PERSONA scope; omit it for ORGANIZATION scope. |
object or null Defaults to ORGANIZATION when omitted. | |
| datasourceId required | string |
| label required | string |
| description required | string |
| sql required | string Must reference at least one table, and each table it references must be a Semantic Table of the datasource. The datasource must be able to describe its output columns. |
| synonyms | Array of strings or null |
Array of objects or null (SemanticCategoryRef) |
{- "baseEntityId": "dset_6a1f93b2",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "datasourceId": "ds_7f3a91c2",
- "label": "Completed orders",
- "description": "Orders that reached the COMPLETED status, one row per order.",
- "sql": "SELECT order_id, customer_id, amount FROM sales.orders WHERE status = 'COMPLETED'",
- "synonyms": [
- "closed orders"
], - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "datasetId": "dset_6a1f93b2",
- "datasourceId": "ds_7f3a91c2",
- "label": "Completed orders",
- "description": "Orders that reached the COMPLETED status, one row per order.",
- "sql": "SELECT order_id, customer_id, amount FROM sales.orders WHERE status = 'COMPLETED'",
- "synonyms": [
- "closed orders"
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "dset_6a1f93b2",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Returns the current version of a semantic dataset. Required scope for OAuth clients: semantic:read.
| id required | string Example: dset_6a1f93b2 Semantic Dataset ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "datasetId": "dset_6a1f93b2",
- "datasourceId": "ds_7f3a91c2",
- "label": "Completed orders",
- "description": "Orders that reached the COMPLETED status, one row per order.",
- "sql": "SELECT order_id, customer_id, amount FROM sales.orders WHERE status = 'COMPLETED'",
- "synonyms": [
- "closed orders"
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "dset_6a1f93b2",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Saves a new version of a Semantic Dataset, re-checking its SQL and output columns. The path parameter selects the dataset. Use expectedVersion for optimistic concurrency. When categories is omitted, existing categories are kept. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| id required | string Example: dset_6a1f93b2 Semantic Dataset ID. |
| baseEntityId | string or null Organization entity ID that a persona variant belongs to. Required for PERSONA scope; omit it for ORGANIZATION scope. |
object or null Defaults to ORGANIZATION when omitted. | |
| datasourceId required | string |
| label required | string |
| description required | string |
| sql required | string Must reference at least one table, and each table it references must be a Semantic Table of the datasource. The datasource must be able to describe its output columns. |
| synonyms | Array of strings or null |
Array of objects or null (SemanticCategoryRef) When omitted/null, existing categories are kept. | |
| expectedVersion | integer or null <int32> >= 1 Version the editor loaded. Must be positive; if it differs from the latest version the request fails with 409. When omitted the latest version is used. |
{- "baseEntityId": "dset_6a1f93b2",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "datasourceId": "ds_7f3a91c2",
- "label": "Completed orders",
- "description": "Orders that reached the COMPLETED status, one row per order.",
- "sql": "SELECT order_id, customer_id, amount FROM sales.orders WHERE status = 'COMPLETED'",
- "synonyms": [
- "closed orders"
], - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "expectedVersion": 3
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "datasetId": "dset_6a1f93b2",
- "datasourceId": "ds_7f3a91c2",
- "label": "Completed orders",
- "description": "Orders that reached the COMPLETED status, one row per order.",
- "sql": "SELECT order_id, customer_id, amount FROM sales.orders WHERE status = 'COMPLETED'",
- "synonyms": [
- "closed orders"
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "dset_6a1f93b2",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Deletes a semantic dataset. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| id required | string Example: dset_6a1f93b2 Semantic Dataset ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "code": "OPERATION_SUCCESSFUL",
- "message": "Successful"
}
}Returns a specific version of a semantic dataset. Required scope for OAuth clients: semantic:read.
| id required | string Example: dset_6a1f93b2 Semantic Dataset ID. |
| version required | integer <int32> Example: 2 Semantic dataset version number. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "datasetId": "dset_6a1f93b2",
- "datasourceId": "ds_7f3a91c2",
- "label": "Completed orders",
- "description": "Orders that reached the COMPLETED status, one row per order.",
- "sql": "SELECT order_id, customer_id, amount FROM sales.orders WHERE status = 'COMPLETED'",
- "synonyms": [
- "closed orders"
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "dset_6a1f93b2",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Returns the output columns of the dataset version's SQL as reported by the datasource. Required scope for OAuth clients: semantic:read.
| id required | string Example: dset_6a1f93b2 Semantic Dataset ID. |
| version required | integer <int32> Example: 2 Semantic dataset version number. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "ordinal": 1,
- "name": "net_revenue",
- "typeName": "NUMERIC",
- "sourceTable": "orders",
- "sourceColumn": "amount"
}
]
}Returns the current semantic table entity by ID. Required scope for OAuth clients: semantic:read.
| tableId required | string Example: 7f3c2a9e-5b1d-4c8e-9a6f-2d4e8b1c0a37 Semantic table ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "tableId": "7f3c2a9e-5b1d-4c8e-9a6f-2d4e8b1c0a37",
- "datasourceId": "ds_5f8a2c1e9b7d",
- "schema": "sales",
- "name": "orders",
- "description": "One record per customer order placed through the web store.",
- "rowDefinition": "One customer order",
- "role": "FACT",
- "relationKind": "TABLE",
- "columns": [
- {
- "name": "order_total",
- "typeName": "DECIMAL"
}
], - "primaryKey": [
- "order_id"
], - "foreignKeys": [
- {
- "refSchema": "sales",
- "refTable": "customers",
- "refColumns": [
- {
- "source": "customer_id",
- "ref": "id"
}
]
}
], - "indexes": [
- {
- "name": "idx_orders_order_date",
- "unique": false,
- "type": "BTREE",
- "columns": [
- {
- "name": "order_date",
- "ordinal": 1,
- "sortOrder": "ASC"
}
], - "filterCondition": null
}
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f4a6c1d93",
- "orgId": "org_3b7e1d9c",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_1a2b3c4d",
- "name": "Sales"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "7f3c2a9e-5b1d-4c8e-9a6f-2d4e8b1c0a37",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}
}
}Updates the table description and row definition and returns the updated entity. Only organization scope is accepted. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| tableId required | string Example: 7f3c2a9e-5b1d-4c8e-9a6f-2d4e8b1c0a37 Semantic table ID. |
| description | string or null New table description. |
| rowDefinition | string or null What one physical row represents. |
| baseEntityId | string or null Organization entity ID. Ignored for organization scope (reset to the entity's own ID when blank). |
object or null Semantic scope. Omitted means ORGANIZATION; PERSONA is rejected with 400. |
{- "description": "One record per customer order placed through the web store.",
- "rowDefinition": "One customer order",
- "baseEntityId": null,
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "tableId": "7f3c2a9e-5b1d-4c8e-9a6f-2d4e8b1c0a37",
- "datasourceId": "ds_5f8a2c1e9b7d",
- "schema": "sales",
- "name": "orders",
- "description": "One record per customer order placed through the web store.",
- "rowDefinition": "One customer order",
- "role": "FACT",
- "relationKind": "TABLE",
- "columns": [
- {
- "name": "order_total",
- "typeName": "DECIMAL"
}
], - "primaryKey": [
- "order_id"
], - "foreignKeys": [
- {
- "refSchema": "sales",
- "refTable": "customers",
- "refColumns": [
- {
- "source": "customer_id",
- "ref": "id"
}
]
}
], - "indexes": [
- {
- "name": "idx_orders_order_date",
- "unique": false,
- "type": "BTREE",
- "columns": [
- {
- "name": "order_date",
- "ordinal": 1,
- "sortOrder": "ASC"
}
], - "filterCondition": null
}
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f4a6c1d93",
- "orgId": "org_3b7e1d9c",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_1a2b3c4d",
- "name": "Sales"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "7f3c2a9e-5b1d-4c8e-9a6f-2d4e8b1c0a37",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}
}
}Returns a specific version of a semantic table. Required scope for OAuth clients: semantic:read.
| tableId required | string Example: 7f3c2a9e-5b1d-4c8e-9a6f-2d4e8b1c0a37 Semantic table ID. |
| version required | integer <int32> Example: 2 Table version number. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "tableId": "7f3c2a9e-5b1d-4c8e-9a6f-2d4e8b1c0a37",
- "datasourceId": "ds_5f8a2c1e9b7d",
- "schema": "sales",
- "name": "orders",
- "description": "One record per customer order placed through the web store.",
- "rowDefinition": "One customer order",
- "role": "FACT",
- "relationKind": "TABLE",
- "columns": [
- {
- "name": "order_total",
- "typeName": "DECIMAL"
}
], - "primaryKey": [
- "order_id"
], - "foreignKeys": [
- {
- "refSchema": "sales",
- "refTable": "customers",
- "refColumns": [
- {
- "source": "customer_id",
- "ref": "id"
}
]
}
], - "indexes": [
- {
- "name": "idx_orders_order_date",
- "unique": false,
- "type": "BTREE",
- "columns": [
- {
- "name": "order_date",
- "ordinal": 1,
- "sortOrder": "ASC"
}
], - "filterCondition": null
}
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f4a6c1d93",
- "orgId": "org_3b7e1d9c",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_1a2b3c4d",
- "name": "Sales"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "7f3c2a9e-5b1d-4c8e-9a6f-2d4e8b1c0a37",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}
}
}Returns summaries of all semantic tables in a datasource; an empty array when there are none. Required scope for OAuth clients: semantic:read.
| datasourceId required | string Example: ds_5f8a2c1e9b7d Datasource ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "tableId": "7f3c2a9e-5b1d-4c8e-9a6f-2d4e8b1c0a37",
- "datasource": {
- "datasourceId": "ds_5f8a2c1e9b7d",
- "name": "Sales Warehouse"
}, - "schema": "sales",
- "name": "orders",
- "description": "One record per customer order placed through the web store.",
- "rowDefinition": "One customer order",
- "role": "FACT",
- "relationKind": "TABLE"
}
]
}Returns the distinct schemas that have semantic tables in a datasource, sorted by name. Required scope for OAuth clients: semantic:read.
| datasourceId required | string Example: ds_5f8a2c1e9b7d Datasource ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "datasourceId": "ds_5f8a2c1e9b7d",
- "schema": "sales"
}
]
}Returns the semantic tables in one schema of a datasource, sorted by table name; an empty array when none match. Required scope for OAuth clients: semantic:read.
| datasourceId required | string Example: ds_5f8a2c1e9b7d Datasource ID. |
| schema required | string Example: sales Schema name. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "datasourceId": "ds_5f8a2c1e9b7d",
- "tableId": "7f3c2a9e-5b1d-4c8e-9a6f-2d4e8b1c0a37",
- "schema": "sales",
- "table": "orders",
- "description": "One record per customer order placed through the web store."
}
]
}Returns the current semantic column entity by ID. Required scope for OAuth clients: semantic:read.
| columnId required | string Example: c41e9b2a-8d73-4f15-b6a0-3e9d2c7f5a18 Semantic column ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "columnId": "c41e9b2a-8d73-4f15-b6a0-3e9d2c7f5a18",
- "nested": {
- "parentColumnId": "a92d5e17-3c48-4b6f-8e21-7d0c4f9b6e53",
- "rootColumnId": "a92d5e17-3c48-4b6f-8e21-7d0c4f9b6e53",
- "childRole": "STRUCT_FIELD",
- "path": [
- {
- "traversal": "STRUCT_FIELD",
- "name": "city",
- "nativeAttributes": {
- "type": "ICEBERG",
- "fieldId": 12
}, - "ordinal": 2,
- "generatedName": false
}
]
}, - "tableId": "7f3c2a9e-5b1d-4c8e-9a6f-2d4e8b1c0a37",
- "datasourceId": "ds_5f8a2c1e9b7d",
- "schema": "sales",
- "tableName": "orders",
- "name": "order_status",
- "description": "Current fulfilment status of the order.",
- "useDescriptionForLlm": true,
- "typeName": "VARCHAR",
- "nativeTypeSignature": "varchar(32)",
- "complexTypeCategory": null,
- "nativeAttributes": {
- "type": "ICEBERG",
- "fieldId": 12
}, - "databaseTypeName": "varchar",
- "characterMaximumLength": 32,
- "numericScale": null,
- "nullable": false,
- "role": "CATEGORY",
- "categorySetId": "cs_2d9f7a1e4c6b",
- "categoryDecision": "CONFIRMED",
- "valueSearchEnabled": true,
- "primaryKey": false,
- "foreignKey": false,
- "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f4a6c1d93",
- "orgId": "org_3b7e1d9c",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_1a2b3c4d",
- "name": "Sales"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "c41e9b2a-8d73-4f15-b6a0-3e9d2c7f5a18",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}
}
}Updates a column's description, LLM description flag and value search flag and returns the updated entity. Only organization scope is accepted; a PERSONA scope returns 400. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| columnId required | string Example: c41e9b2a-8d73-4f15-b6a0-3e9d2c7f5a18 Semantic column ID. |
| description | string or null New column description. |
| useDescriptionForLlm | boolean or null Whether the description may be included in LLM context. Unchanged when null. |
| valueSearchEnabled | boolean or null Enable value search. true is rejected (currently as a 500 error) when the column hierarchy is not accessible. Unchanged when null. |
| baseEntityId | string or null Organization entity ID. Ignored for organization scope (reset to the entity's own ID when blank). |
object or null Semantic scope. Omitted means ORGANIZATION; PERSONA is rejected with 400. |
{- "description": "Current fulfilment status of the order.",
- "useDescriptionForLlm": true,
- "valueSearchEnabled": true,
- "baseEntityId": null,
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "columnId": "c41e9b2a-8d73-4f15-b6a0-3e9d2c7f5a18",
- "nested": {
- "parentColumnId": "a92d5e17-3c48-4b6f-8e21-7d0c4f9b6e53",
- "rootColumnId": "a92d5e17-3c48-4b6f-8e21-7d0c4f9b6e53",
- "childRole": "STRUCT_FIELD",
- "path": [
- {
- "traversal": "STRUCT_FIELD",
- "name": "city",
- "nativeAttributes": {
- "type": "ICEBERG",
- "fieldId": 12
}, - "ordinal": 2,
- "generatedName": false
}
]
}, - "tableId": "7f3c2a9e-5b1d-4c8e-9a6f-2d4e8b1c0a37",
- "datasourceId": "ds_5f8a2c1e9b7d",
- "schema": "sales",
- "tableName": "orders",
- "name": "order_status",
- "description": "Current fulfilment status of the order.",
- "useDescriptionForLlm": true,
- "typeName": "VARCHAR",
- "nativeTypeSignature": "varchar(32)",
- "complexTypeCategory": null,
- "nativeAttributes": {
- "type": "ICEBERG",
- "fieldId": 12
}, - "databaseTypeName": "varchar",
- "characterMaximumLength": 32,
- "numericScale": null,
- "nullable": false,
- "role": "CATEGORY",
- "categorySetId": "cs_2d9f7a1e4c6b",
- "categoryDecision": "CONFIRMED",
- "valueSearchEnabled": true,
- "primaryKey": false,
- "foreignKey": false,
- "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f4a6c1d93",
- "orgId": "org_3b7e1d9c",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_1a2b3c4d",
- "name": "Sales"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "c41e9b2a-8d73-4f15-b6a0-3e9d2c7f5a18",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}
}
}Returns a specific version of a semantic column. Required scope for OAuth clients: semantic:read.
| columnId required | string Example: c41e9b2a-8d73-4f15-b6a0-3e9d2c7f5a18 Semantic column ID. |
| version required | integer <int32> Example: 2 Column version number. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "columnId": "c41e9b2a-8d73-4f15-b6a0-3e9d2c7f5a18",
- "nested": {
- "parentColumnId": "a92d5e17-3c48-4b6f-8e21-7d0c4f9b6e53",
- "rootColumnId": "a92d5e17-3c48-4b6f-8e21-7d0c4f9b6e53",
- "childRole": "STRUCT_FIELD",
- "path": [
- {
- "traversal": "STRUCT_FIELD",
- "name": "city",
- "nativeAttributes": {
- "type": "ICEBERG",
- "fieldId": 12
}, - "ordinal": 2,
- "generatedName": false
}
]
}, - "tableId": "7f3c2a9e-5b1d-4c8e-9a6f-2d4e8b1c0a37",
- "datasourceId": "ds_5f8a2c1e9b7d",
- "schema": "sales",
- "tableName": "orders",
- "name": "order_status",
- "description": "Current fulfilment status of the order.",
- "useDescriptionForLlm": true,
- "typeName": "VARCHAR",
- "nativeTypeSignature": "varchar(32)",
- "complexTypeCategory": null,
- "nativeAttributes": {
- "type": "ICEBERG",
- "fieldId": 12
}, - "databaseTypeName": "varchar",
- "characterMaximumLength": 32,
- "numericScale": null,
- "nullable": false,
- "role": "CATEGORY",
- "categorySetId": "cs_2d9f7a1e4c6b",
- "categoryDecision": "CONFIRMED",
- "valueSearchEnabled": true,
- "primaryKey": false,
- "foreignKey": false,
- "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f4a6c1d93",
- "orgId": "org_3b7e1d9c",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_1a2b3c4d",
- "name": "Sales"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "c41e9b2a-8d73-4f15-b6a0-3e9d2c7f5a18",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}
}
}Returns the nested fields under a complex root column (ARRAY, MAP or ROW). Returns 404 when the root column does not exist. Required scope for OAuth clients: semantic:read.
| columnId required | string Example: a92d5e17-3c48-4b6f-8e21-7d0c4f9b6e53 Root semantic column ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "columnId": "c41e9b2a-8d73-4f15-b6a0-3e9d2c7f5a18",
- "nested": {
- "parentColumnId": "a92d5e17-3c48-4b6f-8e21-7d0c4f9b6e53",
- "rootColumnId": "a92d5e17-3c48-4b6f-8e21-7d0c4f9b6e53",
- "childRole": "STRUCT_FIELD",
- "path": [
- {
- "traversal": "STRUCT_FIELD",
- "name": "city",
- "nativeAttributes": {
- "type": "ICEBERG",
- "fieldId": 12
}, - "ordinal": 2,
- "generatedName": false
}
]
}, - "tableId": "7f3c2a9e-5b1d-4c8e-9a6f-2d4e8b1c0a37",
- "datasourceId": "ds_5f8a2c1e9b7d",
- "schema": "sales",
- "tableName": "orders",
- "name": "order_status",
- "description": "Current fulfilment status of the order.",
- "useDescriptionForLlm": true,
- "typeName": "VARCHAR",
- "nativeTypeSignature": "varchar(32)",
- "complexTypeCategory": null,
- "nativeAttributes": {
- "type": "ICEBERG",
- "fieldId": 12
}, - "databaseTypeName": "varchar",
- "characterMaximumLength": 32,
- "numericScale": null,
- "nullable": false,
- "role": "CATEGORY",
- "categorySetId": "cs_2d9f7a1e4c6b",
- "categoryDecision": "CONFIRMED",
- "valueSearchEnabled": true,
- "primaryKey": false,
- "foreignKey": false,
- "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f4a6c1d93",
- "orgId": "org_3b7e1d9c",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_1a2b3c4d",
- "name": "Sales"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "c41e9b2a-8d73-4f15-b6a0-3e9d2c7f5a18",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}
}
]
}Returns summaries of all semantic columns in a datasource; an empty array when there are none. Required scope for OAuth clients: semantic:read.
| datasourceId required | string Example: ds_5f8a2c1e9b7d Datasource ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "columnId": "c41e9b2a-8d73-4f15-b6a0-3e9d2c7f5a18",
- "tableId": "7f3c2a9e-5b1d-4c8e-9a6f-2d4e8b1c0a37",
- "datasource": {
- "datasourceId": "ds_5f8a2c1e9b7d",
- "name": "Sales Warehouse"
}, - "schema": "sales",
- "tableName": "orders",
- "name": "order_status",
- "description": "Current fulfilment status of the order.",
- "useDescriptionForLlm": true,
- "typeName": "VARCHAR",
- "nullable": false,
- "primaryKey": false,
- "foreignKey": false,
- "role": "CATEGORY",
- "categoryDecision": "CONFIRMED",
- "categoryColumn": true,
- "categorySetId": "cs_2d9f7a1e4c6b",
- "valueSearchEnabled": true,
- "valueSearchEligible": true,
- "version": 3,
- "lineageId": "lin_8e2f4a6c1d93",
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "nested": {
- "parentColumnId": "a92d5e17-3c48-4b6f-8e21-7d0c4f9b6e53",
- "rootColumnId": "a92d5e17-3c48-4b6f-8e21-7d0c4f9b6e53",
- "childRole": "STRUCT_FIELD",
- "path": [
- {
- "traversal": "STRUCT_FIELD",
- "name": "city",
- "nativeAttributes": {
- "type": "ICEBERG",
- "fieldId": 12
}, - "ordinal": 2,
- "generatedName": false
}
]
}
}
]
}Returns the semantic columns of one table, sorted by column name; an empty array when the table is unknown. Required scope for OAuth clients: semantic:read.
| datasourceId required | string Example: ds_5f8a2c1e9b7d Datasource ID. |
| schema required | string Example: sales Schema name. |
| tableName required | string Example: orders Table name. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "datasourceId": "ds_5f8a2c1e9b7d",
- "columnId": "c41e9b2a-8d73-4f15-b6a0-3e9d2c7f5a18",
- "nested": {
- "parentColumnId": "a92d5e17-3c48-4b6f-8e21-7d0c4f9b6e53",
- "rootColumnId": "a92d5e17-3c48-4b6f-8e21-7d0c4f9b6e53",
- "childRole": "STRUCT_FIELD",
- "path": [
- {
- "traversal": "STRUCT_FIELD",
- "name": "city",
- "nativeAttributes": {
- "type": "ICEBERG",
- "fieldId": 12
}, - "ordinal": 2,
- "generatedName": false
}
]
}, - "tableId": "7f3c2a9e-5b1d-4c8e-9a6f-2d4e8b1c0a37",
- "schema": "sales",
- "table": "orders",
- "column": "order_status",
- "description": "Current fulfilment status of the order.",
- "useDescriptionForLlm": true,
- "typeName": "VARCHAR",
- "complexTypeCategory": null,
- "nullable": false,
- "valueSearchEnabled": true
}
]
}Updates a nested field under a complex root column and returns the updated field. Returns 404 when the root or the field is missing or the field does not belong to the root. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| rootColumnId required | string Example: a92d5e17-3c48-4b6f-8e21-7d0c4f9b6e53 Root semantic column ID. |
| fieldId required | string Example: c41e9b2a-8d73-4f15-b6a0-3e9d2c7f5a18 Nested field (semantic column) ID. |
| description | string or null New field description. |
| useDescriptionForLlm | boolean or null Whether the description may be included in LLM context. |
| categorySetId | string or null Category set to link (must belong to the root column's datasource). Empty string removes the link and sets categoryDecision to UNKNOWN; a non-empty value sets it to CONFIRMED. |
| valueSearchEnabled | boolean or null Enable value search. true is rejected (400) unless the field is a string field with a complete hierarchy. |
{- "description": "City of the shipping address.",
- "useDescriptionForLlm": true,
- "categorySetId": "cs_2d9f7a1e4c6b",
- "valueSearchEnabled": false
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "columnId": "c41e9b2a-8d73-4f15-b6a0-3e9d2c7f5a18",
- "nested": {
- "parentColumnId": "a92d5e17-3c48-4b6f-8e21-7d0c4f9b6e53",
- "rootColumnId": "a92d5e17-3c48-4b6f-8e21-7d0c4f9b6e53",
- "childRole": "STRUCT_FIELD",
- "path": [
- {
- "traversal": "STRUCT_FIELD",
- "name": "city",
- "nativeAttributes": {
- "type": "ICEBERG",
- "fieldId": 12
}, - "ordinal": 2,
- "generatedName": false
}
]
}, - "tableId": "7f3c2a9e-5b1d-4c8e-9a6f-2d4e8b1c0a37",
- "datasourceId": "ds_5f8a2c1e9b7d",
- "schema": "sales",
- "tableName": "orders",
- "name": "order_status",
- "description": "Current fulfilment status of the order.",
- "useDescriptionForLlm": true,
- "typeName": "VARCHAR",
- "nativeTypeSignature": "varchar(32)",
- "complexTypeCategory": null,
- "nativeAttributes": {
- "type": "ICEBERG",
- "fieldId": 12
}, - "databaseTypeName": "varchar",
- "characterMaximumLength": 32,
- "numericScale": null,
- "nullable": false,
- "role": "CATEGORY",
- "categorySetId": "cs_2d9f7a1e4c6b",
- "categoryDecision": "CONFIRMED",
- "valueSearchEnabled": true,
- "primaryKey": false,
- "foreignKey": false,
- "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f4a6c1d93",
- "orgId": "org_3b7e1d9c",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_1a2b3c4d",
- "name": "Sales"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "c41e9b2a-8d73-4f15-b6a0-3e9d2c7f5a18",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}
}
}Joins between two tables of a datasource: column pairs, operators, cardinality and optionality. Table relationships support organization scope only.
Returns the organization's table relationships. Required scope for OAuth clients: semantic:read.
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "tableRelationshipId": "trel_5a9c2e60",
- "datasourceId": "ds_7f3a91c2",
- "leftTable": {
- "tableId": "tbl_4e8b2c19",
- "schema": "sales",
- "table": "orders"
}, - "rightTable": {
- "tableId": "tbl_4e8b2c19",
- "schema": "sales",
- "table": "orders"
}, - "cardinality": "MANY_TO_ONE",
- "leftOptionality": "REQUIRED",
- "rightOptionality": "REQUIRED",
- "description": "Each order belongs to one customer.",
- "conditions": [
- {
- "leftColumnId": "col_6d1b4f28",
- "leftColumn": "customer_id",
- "rightColumnId": "col_3a9d5b20",
- "rightColumn": "customer_id",
- "operator": "EQUALS"
}
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "trel_5a9c2e60",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
]
}Creates a join between two Semantic Tables of a datasource. Each join column is resolved by ID or by name and must belong to its table. If the same join already exists, the request fails when that table relationship is user-governed; otherwise the existing table relationship takes this definition and is returned. Table relationships support organization scope only. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
object or null Must be ORGANIZATION when present. Persona scope is rejected with 400. | |
| datasourceId required | string |
required | object Identified by schema and table, which must name a Semantic Table of the datasource. |
required | object Identified by schema and table, which must name a Semantic Table of the datasource. |
| cardinality | string Enum: "UNKNOWN" "ONE_TO_ONE" "ONE_TO_MANY" "MANY_TO_ONE" "MANY_TO_MANY" Defaults to UNKNOWN. |
| leftOptionality | string Enum: "UNKNOWN" "OPTIONAL" "REQUIRED" Whether a left row can have no matching right row. Defaults to UNKNOWN. |
| rightOptionality | string Enum: "UNKNOWN" "OPTIONAL" "REQUIRED" Whether a right row can have no matching left row. Defaults to UNKNOWN. |
| description | string or null |
required | Array of objects (JoinCondition) At least one. Each condition needs both columns and an operator, and each column must be an accessible scalar column of its table in this datasource. |
{- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "datasourceId": "ds_7f3a91c2",
- "leftTable": {
- "schema": "sales",
- "table": "orders"
}, - "rightTable": {
- "schema": "sales",
- "table": "customers"
}, - "cardinality": "MANY_TO_ONE",
- "leftOptionality": "REQUIRED",
- "rightOptionality": "REQUIRED",
- "description": "Each order belongs to one customer.",
- "conditions": [
- {
- "leftColumn": "customer_id",
- "rightColumn": "customer_id",
- "operator": "EQUALS"
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "tableRelationshipId": "trel_5a9c2e60",
- "datasourceId": "ds_7f3a91c2",
- "leftTable": {
- "tableId": "tbl_4e8b2c19",
- "schema": "sales",
- "table": "orders"
}, - "rightTable": {
- "tableId": "tbl_4e8b2c19",
- "schema": "sales",
- "table": "orders"
}, - "cardinality": "MANY_TO_ONE",
- "leftOptionality": "REQUIRED",
- "rightOptionality": "REQUIRED",
- "description": "Each order belongs to one customer.",
- "conditions": [
- {
- "leftColumnId": "col_6d1b4f28",
- "leftColumn": "customer_id",
- "rightColumnId": "col_3a9d5b20",
- "rightColumn": "customer_id",
- "operator": "EQUALS"
}
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "trel_5a9c2e60",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Returns the current version of a table relationship. Required scope for OAuth clients: semantic:read.
| tableRelationshipId required | string Example: trel_5a9c2e60 Table Relationship ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "tableRelationshipId": "trel_5a9c2e60",
- "datasourceId": "ds_7f3a91c2",
- "leftTable": {
- "tableId": "tbl_4e8b2c19",
- "schema": "sales",
- "table": "orders"
}, - "rightTable": {
- "tableId": "tbl_4e8b2c19",
- "schema": "sales",
- "table": "orders"
}, - "cardinality": "MANY_TO_ONE",
- "leftOptionality": "REQUIRED",
- "rightOptionality": "REQUIRED",
- "description": "Each order belongs to one customer.",
- "conditions": [
- {
- "leftColumnId": "col_6d1b4f28",
- "leftColumn": "customer_id",
- "rightColumnId": "col_3a9d5b20",
- "rightColumn": "customer_id",
- "operator": "EQUALS"
}
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "trel_5a9c2e60",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Saves a new version of a table relationship. The path parameter selects it. The request fails if another table relationship already has the same join. Table relationships support organization scope only. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| tableRelationshipId required | string Example: trel_5a9c2e60 Table Relationship ID. |
| tableRelationshipId | string or null Optional. The path parameter selects the table relationship and replaces this value. |
object or null Must be ORGANIZATION when present. Persona scope is rejected with 400. | |
| datasourceId required | string |
required | object Identified by schema and table, which must name a Semantic Table of the datasource. |
required | object Identified by schema and table, which must name a Semantic Table of the datasource. |
| cardinality | string Enum: "UNKNOWN" "ONE_TO_ONE" "ONE_TO_MANY" "MANY_TO_ONE" "MANY_TO_MANY" Defaults to UNKNOWN. |
| leftOptionality | string Enum: "UNKNOWN" "OPTIONAL" "REQUIRED" Whether a left row can have no matching right row. Defaults to UNKNOWN. |
| rightOptionality | string Enum: "UNKNOWN" "OPTIONAL" "REQUIRED" Whether a right row can have no matching left row. Defaults to UNKNOWN. |
| description | string or null |
required | Array of objects (JoinCondition) At least one. Each condition needs both columns and an operator, and each column must be an accessible scalar column of its table in this datasource. |
{- "tableRelationshipId": "trel_5a9c2e60",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "datasourceId": "ds_7f3a91c2",
- "leftTable": {
- "schema": "sales",
- "table": "orders"
}, - "rightTable": {
- "schema": "sales",
- "table": "customers"
}, - "cardinality": "MANY_TO_ONE",
- "leftOptionality": "REQUIRED",
- "rightOptionality": "REQUIRED",
- "description": "Each order belongs to one customer.",
- "conditions": [
- {
- "leftColumn": "customer_id",
- "rightColumn": "customer_id",
- "operator": "EQUALS"
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "tableRelationshipId": "trel_5a9c2e60",
- "datasourceId": "ds_7f3a91c2",
- "leftTable": {
- "tableId": "tbl_4e8b2c19",
- "schema": "sales",
- "table": "orders"
}, - "rightTable": {
- "tableId": "tbl_4e8b2c19",
- "schema": "sales",
- "table": "orders"
}, - "cardinality": "MANY_TO_ONE",
- "leftOptionality": "REQUIRED",
- "rightOptionality": "REQUIRED",
- "description": "Each order belongs to one customer.",
- "conditions": [
- {
- "leftColumnId": "col_6d1b4f28",
- "leftColumn": "customer_id",
- "rightColumnId": "col_3a9d5b20",
- "rightColumn": "customer_id",
- "operator": "EQUALS"
}
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "trel_5a9c2e60",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Deletes a table relationship. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| tableRelationshipId required | string Example: trel_5a9c2e60 Table Relationship ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "code": "OPERATION_SUCCESSFUL",
- "message": "Successful"
}
}Returns a specific version of a table relationship. Required scope for OAuth clients: semantic:read.
| tableRelationshipId required | string Example: trel_5a9c2e60 Table Relationship ID. |
| version required | integer <int32> Example: 2 Table relationship version number. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "tableRelationshipId": "trel_5a9c2e60",
- "datasourceId": "ds_7f3a91c2",
- "leftTable": {
- "tableId": "tbl_4e8b2c19",
- "schema": "sales",
- "table": "orders"
}, - "rightTable": {
- "tableId": "tbl_4e8b2c19",
- "schema": "sales",
- "table": "orders"
}, - "cardinality": "MANY_TO_ONE",
- "leftOptionality": "REQUIRED",
- "rightOptionality": "REQUIRED",
- "description": "Each order belongs to one customer.",
- "conditions": [
- {
- "leftColumnId": "col_6d1b4f28",
- "leftColumn": "customer_id",
- "rightColumnId": "col_3a9d5b20",
- "rightColumn": "customer_id",
- "operator": "EQUALS"
}
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "trel_5a9c2e60",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}The values a column stores, each with a human-readable label, description and synonyms, and the columns linked to them.
Returns the organization's category sets, each with its value count and linked columns. Required scope for OAuth clients: semantic:read.
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "categorySetId": "8b1f0c3d-2e4a-4f6b-9c7d-1a2b3c4d5e6f",
- "name": "OrderStatus",
- "description": "Lifecycle status of an order.",
- "datasourceId": "ds_7f3a91c2",
- "noOfValues": 4,
- "deleted": false,
- "columns": [
- {
- "columnId": "col_5d2a8e17",
- "tableId": "tbl_4e8b2c19",
- "datasourceId": "ds_7f3a91c2",
- "schema": "sales",
- "tableName": "orders",
- "name": "status",
- "description": "Order status code."
}
]
}
]
}Creates a category set and links it to the given columns. When values are given, each column must not already belong to a category set, and Colrows reads each column's distinct values from the datasource; they must match the set's stored values. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| baseEntityId | string or null Organization entity ID that a persona variant belongs to. Required for PERSONA scope; omit it for ORGANIZATION scope. |
object or null Defaults to ORGANIZATION when omitted. | |
| name required | string Must not be blank. |
| description | string or null |
| datasourceId required | string Must not be blank. |
| dataType required | string Must not be blank. |
Array of objects (CategoryValue) At most 100 distinct stored values. | |
required | Array of objects (CategorySetColumnRef) Columns to link. A column can belong to only one category set. |
{- "baseEntityId": "8b1f0c3d-2e4a-4f6b-9c7d-1a2b3c4d5e6f",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "name": "OrderStatus",
- "description": "Lifecycle status of an order.",
- "datasourceId": "ds_7f3a91c2",
- "dataType": "VARCHAR",
- "values": [
- {
- "storedValue": "C",
- "label": "Cancelled",
- "synonyms": [
- "voided"
]
}, - {
- "storedValue": "S",
- "label": "Shipped"
}
], - "columns": [
- {
- "columnId": "col_5d2a8e17",
- "datasourceId": "ds_7f3a91c2",
- "schema": "sales",
- "tableName": "orders",
- "columnName": "status"
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "categorySetId": "8b1f0c3d-2e4a-4f6b-9c7d-1a2b3c4d5e6f",
- "name": "OrderStatus",
- "description": "Lifecycle status of an order.",
- "datasourceId": "ds_7f3a91c2",
- "dataType": "VARCHAR",
- "values": [
- {
- "storedValue": "C",
- "label": "Cancelled",
- "normalizedLabel": "cancelled",
- "description": "The customer cancelled the order before shipment.",
- "synonyms": [
- "voided"
]
}
], - "kind": "LABELED",
- "lookupTableId": null,
- "codeColumnId": null,
- "labelColumnId": null,
- "fingerprint": null,
- "generatorVersion": null,
- "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "8b1f0c3d-2e4a-4f6b-9c7d-1a2b3c4d5e6f",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}, - "columns": [
- {
- "columnId": "col_5d2a8e17",
- "tableId": "tbl_4e8b2c19",
- "datasourceId": "ds_7f3a91c2",
- "schema": "sales",
- "tableName": "orders",
- "name": "status",
- "description": "Order status code."
}
]
}
}Returns the current version of a category set. Required scope for OAuth clients: semantic:read.
| categorySetId required | string Example: 8b1f0c3d-2e4a-4f6b-9c7d-1a2b3c4d5e6f Category Set ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "categorySetId": "8b1f0c3d-2e4a-4f6b-9c7d-1a2b3c4d5e6f",
- "name": "OrderStatus",
- "description": "Lifecycle status of an order.",
- "datasourceId": "ds_7f3a91c2",
- "dataType": "VARCHAR",
- "values": [
- {
- "storedValue": "C",
- "label": "Cancelled",
- "normalizedLabel": "cancelled",
- "description": "The customer cancelled the order before shipment.",
- "synonyms": [
- "voided"
]
}
], - "kind": "LABELED",
- "lookupTableId": null,
- "codeColumnId": null,
- "labelColumnId": null,
- "fingerprint": null,
- "generatorVersion": null,
- "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "8b1f0c3d-2e4a-4f6b-9c7d-1a2b3c4d5e6f",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}, - "columns": [
- {
- "columnId": "col_5d2a8e17",
- "tableId": "tbl_4e8b2c19",
- "datasourceId": "ds_7f3a91c2",
- "schema": "sales",
- "tableName": "orders",
- "name": "status",
- "description": "Order status code."
}
]
}
}Saves a new version of a category set and replaces its linked columns. Send the same categorySetId in the path and in the request body. The set's kind and lookup columns are kept. When values are given, each column's distinct values must match the set's stored values; for a CODED or DECLARED set they may be a subset. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| categorySetId required | string Example: 8b1f0c3d-2e4a-4f6b-9c7d-1a2b3c4d5e6f Category Set ID. |
| categorySetId required | string ID of the category set to update. This body field (not the path parameter) selects the set. |
| baseEntityId | string or null Organization entity ID that a persona variant belongs to. Required for PERSONA scope; omit it for ORGANIZATION scope. |
object or null Defaults to ORGANIZATION when omitted. | |
| name required | string Must not be blank. |
| description | string or null |
| datasourceId required | string Must not be blank. |
| dataType required | string Must not be blank. |
Array of objects (CategoryValue) At most 100 distinct stored values. | |
required | Array of objects (CategorySetColumnRef) Columns to link. A column can belong to only one category set. |
{- "categorySetId": "8b1f0c3d-2e4a-4f6b-9c7d-1a2b3c4d5e6f",
- "baseEntityId": "8b1f0c3d-2e4a-4f6b-9c7d-1a2b3c4d5e6f",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "name": "OrderStatus",
- "description": "Lifecycle status of an order.",
- "datasourceId": "ds_7f3a91c2",
- "dataType": "VARCHAR",
- "values": [
- {
- "storedValue": "C",
- "label": "Cancelled",
- "synonyms": [
- "voided"
]
}, - {
- "storedValue": "S",
- "label": "Shipped"
}
], - "columns": [
- {
- "columnId": "col_5d2a8e17",
- "datasourceId": "ds_7f3a91c2",
- "schema": "sales",
- "tableName": "orders",
- "columnName": "status"
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "categorySetId": "8b1f0c3d-2e4a-4f6b-9c7d-1a2b3c4d5e6f",
- "name": "OrderStatus",
- "description": "Lifecycle status of an order.",
- "datasourceId": "ds_7f3a91c2",
- "dataType": "VARCHAR",
- "values": [
- {
- "storedValue": "C",
- "label": "Cancelled",
- "normalizedLabel": "cancelled",
- "description": "The customer cancelled the order before shipment.",
- "synonyms": [
- "voided"
]
}
], - "kind": "LABELED",
- "lookupTableId": null,
- "codeColumnId": null,
- "labelColumnId": null,
- "fingerprint": null,
- "generatorVersion": null,
- "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "8b1f0c3d-2e4a-4f6b-9c7d-1a2b3c4d5e6f",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}, - "columns": [
- {
- "columnId": "col_5d2a8e17",
- "tableId": "tbl_4e8b2c19",
- "datasourceId": "ds_7f3a91c2",
- "schema": "sales",
- "tableName": "orders",
- "name": "status",
- "description": "Order status code."
}
]
}
}Deletes a category set. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| categorySetId required | string Example: 8b1f0c3d-2e4a-4f6b-9c7d-1a2b3c4d5e6f Category Set ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "code": "OPERATION_SUCCESSFUL",
- "message": "Successful"
}
}Returns a specific version of a category set. Required scope for OAuth clients: semantic:read.
| categorySetId required | string Example: 8b1f0c3d-2e4a-4f6b-9c7d-1a2b3c4d5e6f Category Set ID. |
| version required | integer <int32> Example: 2 Category set version number. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "categorySetId": "8b1f0c3d-2e4a-4f6b-9c7d-1a2b3c4d5e6f",
- "name": "OrderStatus",
- "description": "Lifecycle status of an order.",
- "datasourceId": "ds_7f3a91c2",
- "dataType": "VARCHAR",
- "values": [
- {
- "storedValue": "C",
- "label": "Cancelled",
- "normalizedLabel": "cancelled",
- "description": "The customer cancelled the order before shipment.",
- "synonyms": [
- "voided"
]
}
], - "kind": "LABELED",
- "lookupTableId": null,
- "codeColumnId": null,
- "labelColumnId": null,
- "fingerprint": null,
- "generatorVersion": null,
- "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "8b1f0c3d-2e4a-4f6b-9c7d-1a2b3c4d5e6f",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}, - "columns": [
- {
- "columnId": "col_5d2a8e17",
- "tableId": "tbl_4e8b2c19",
- "datasourceId": "ds_7f3a91c2",
- "schema": "sales",
- "tableName": "orders",
- "name": "status",
- "description": "Order status code."
}
]
}
}Business entities, such as customers or orders. A bound object names the table where one row is one instance and the columns that identify it.
Returns the organization's semantic objects. Required scope for OAuth clients: semantic:read.
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "objectId": "obj_4b7e1d93",
- "name": "Customer",
- "description": "A person or company that has placed at least one order.",
- "synonyms": [
- "client",
- "account"
], - "primaryTableId": "tbl_1c7e9a42",
- "keyColumnIds": [
- "col_3a9d5b20"
], - "displayColumnId": "col_8f2c6e11",
- "condition": "is_test = false",
- "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "guidance": [
- "Count customers by distinct customer_id, not by order rows."
], - "datasourceId": "ds_7f3a91c2",
- "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "obj_4b7e1d93",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
]
}Creates a Semantic Object. Referenced Business Terms must exist. A bound object needs key columns from its primary table; key columns, a display column or a condition without a primary table are rejected. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| baseEntityId | string or null Organization entity ID that a persona variant belongs to. Required for PERSONA scope; omit it for ORGANIZATION scope. |
object or null Defaults to ORGANIZATION when omitted. | |
| name required | string |
| description required | string |
| synonyms | Array of strings or null |
| primaryTableId | string or null System-of-record table where one row is one instance. An object without it is unbound. |
| keyColumnIds | Array of strings or null Columns of the primary table that identify an instance, in key order. A bound object needs at least one. |
| displayColumnId | string or null Optional column of the primary table holding a human-readable name for an instance. |
| condition | string or null Optional SQL predicate over the primary table that restricts which rows are instances. |
| businessTermIds | Array of strings or null Business Terms that give contextual grounding for this object. Each must exist. |
| guidance | Array of strings or null How an agent should reason about or work with this object. |
Array of objects or null (SemanticCategoryRef) |
{- "baseEntityId": "obj_4b7e1d93",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "name": "Customer",
- "description": "A person or company that has placed at least one order.",
- "synonyms": [
- "client",
- "account"
], - "primaryTableId": "tbl_1c7e9a42",
- "keyColumnIds": [
- "col_3a9d5b20"
], - "displayColumnId": "col_8f2c6e11",
- "condition": "is_test = false",
- "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "guidance": [
- "Count customers by distinct customer_id, not by order rows."
], - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "objectId": "obj_4b7e1d93",
- "name": "Customer",
- "description": "A person or company that has placed at least one order.",
- "synonyms": [
- "client",
- "account"
], - "primaryTableId": "tbl_1c7e9a42",
- "keyColumnIds": [
- "col_3a9d5b20"
], - "displayColumnId": "col_8f2c6e11",
- "condition": "is_test = false",
- "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "guidance": [
- "Count customers by distinct customer_id, not by order rows."
], - "datasourceId": "ds_7f3a91c2",
- "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "obj_4b7e1d93",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Returns the current version of a semantic object. Required scope for OAuth clients: semantic:read.
| objectId required | string Example: obj_4b7e1d93 Semantic Object ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "objectId": "obj_4b7e1d93",
- "name": "Customer",
- "description": "A person or company that has placed at least one order.",
- "synonyms": [
- "client",
- "account"
], - "primaryTableId": "tbl_1c7e9a42",
- "keyColumnIds": [
- "col_3a9d5b20"
], - "displayColumnId": "col_8f2c6e11",
- "condition": "is_test = false",
- "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "guidance": [
- "Count customers by distinct customer_id, not by order rows."
], - "datasourceId": "ds_7f3a91c2",
- "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "obj_4b7e1d93",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Saves a new version of a Semantic Object. Send the same objectId in the path and in the request body. When categories is omitted, existing categories are kept. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| objectId required | string Example: obj_4b7e1d93 Semantic Object ID. |
| objectId required | string ID of the object to update. This body field (not the path parameter) selects the object. |
| baseEntityId | string or null Organization entity ID that a persona variant belongs to. Required for PERSONA scope; omit it for ORGANIZATION scope. |
object or null Defaults to ORGANIZATION when omitted. | |
| name required | string |
| description required | string |
| synonyms | Array of strings or null |
| primaryTableId | string or null System-of-record table where one row is one instance. An object without it is unbound. |
| keyColumnIds | Array of strings or null Columns of the primary table that identify an instance, in key order. A bound object needs at least one. |
| displayColumnId | string or null Optional column of the primary table holding a human-readable name for an instance. |
| condition | string or null Optional SQL predicate over the primary table that restricts which rows are instances. |
| businessTermIds | Array of strings or null Business Terms that give contextual grounding for this object. Each must exist. |
| guidance | Array of strings or null How an agent should reason about or work with this object. |
Array of objects or null (SemanticCategoryRef) When omitted/null, existing categories are kept. |
{- "objectId": "obj_4b7e1d93",
- "baseEntityId": "obj_4b7e1d93",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "name": "Customer",
- "description": "A person or company that has placed at least one order.",
- "synonyms": [
- "client",
- "account"
], - "primaryTableId": "tbl_1c7e9a42",
- "keyColumnIds": [
- "col_3a9d5b20"
], - "displayColumnId": "col_8f2c6e11",
- "condition": "is_test = false",
- "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "guidance": [
- "Count customers by distinct customer_id, not by order rows."
], - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "objectId": "obj_4b7e1d93",
- "name": "Customer",
- "description": "A person or company that has placed at least one order.",
- "synonyms": [
- "client",
- "account"
], - "primaryTableId": "tbl_1c7e9a42",
- "keyColumnIds": [
- "col_3a9d5b20"
], - "displayColumnId": "col_8f2c6e11",
- "condition": "is_test = false",
- "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "guidance": [
- "Count customers by distinct customer_id, not by order rows."
], - "datasourceId": "ds_7f3a91c2",
- "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "obj_4b7e1d93",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Deletes a semantic object. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| objectId required | string Example: obj_4b7e1d93 Semantic Object ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "code": "OPERATION_SUCCESSFUL",
- "message": "Successful"
}
}Returns a specific version of a semantic object. Required scope for OAuth clients: semantic:read.
| objectId required | string Example: obj_4b7e1d93 Semantic Object ID. |
| version required | integer <int32> Example: 2 Semantic object version number. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "objectId": "obj_4b7e1d93",
- "name": "Customer",
- "description": "A person or company that has placed at least one order.",
- "synonyms": [
- "client",
- "account"
], - "primaryTableId": "tbl_1c7e9a42",
- "keyColumnIds": [
- "col_3a9d5b20"
], - "displayColumnId": "col_8f2c6e11",
- "condition": "is_test = false",
- "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "guidance": [
- "Count customers by distinct customer_id, not by order rows."
], - "datasourceId": "ds_7f3a91c2",
- "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "obj_4b7e1d93",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Things that happen to an object. A bound event names the table that records occurrences and the column holding when each occurred.
Returns the organization's semantic events. Required scope for OAuth clients: semantic:read.
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "eventId": "evt_7c2d9f04",
- "name": "Order placed",
- "description": "A customer submits an order.",
- "synonyms": [
- "purchase"
], - "subjectObjectId": "obj_4b7e1d93",
- "relatedObjectIds": [
- "obj_9e3a6c15"
], - "tableId": "tbl_4e8b2c19",
- "subjectKeyColumnIds": [
- "col_6d1b4f28"
], - "occurredAtColumnId": "col_2e8c7a50",
- "condition": "status <> 'DRAFT'",
- "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "guidance": [
- "Use the order date, not the payment date."
], - "datasourceId": "ds_7f3a91c2",
- "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "evt_7c2d9f04",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
]
}Creates a Semantic Event. Referenced objects and Business Terms must exist. A bound event needs an occurred-at column from its table; subject key columns, an occurred-at column or a condition without a table are rejected. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| baseEntityId | string or null Organization entity ID that a persona variant belongs to. Required for PERSONA scope; omit it for ORGANIZATION scope. |
object or null Defaults to ORGANIZATION when omitted. | |
| name required | string |
| description required | string |
| synonyms | Array of strings or null |
| subjectObjectId | string or null The object this event happens to. |
| relatedObjectIds | Array of strings or null Other objects involved in the event. Each must exist. |
| tableId | string or null Table where occurrences are recorded. An event without it is unbound. |
| subjectKeyColumnIds | Array of strings or null Columns of tableId holding the subject's key, in the same order as the subject object's key columns. Requires subjectObjectId. |
| occurredAtColumnId | string or null Column of tableId holding when the event occurred. Required for a bound event. |
| condition | string or null Optional SQL predicate over tableId that selects occurrence rows. |
| businessTermIds | Array of strings or null Business Terms that give contextual grounding for this event. Each must exist. |
| guidance | Array of strings or null How an agent should reason about or work with this event. |
Array of objects or null (SemanticCategoryRef) |
{- "baseEntityId": "evt_7c2d9f04",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "name": "Order placed",
- "description": "A customer submits an order.",
- "synonyms": [
- "purchase"
], - "subjectObjectId": "obj_4b7e1d93",
- "relatedObjectIds": [
- "obj_9e3a6c15"
], - "tableId": "tbl_4e8b2c19",
- "subjectKeyColumnIds": [
- "col_6d1b4f28"
], - "occurredAtColumnId": "col_2e8c7a50",
- "condition": "status <> 'DRAFT'",
- "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "guidance": [
- "Use the order date, not the payment date."
], - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "eventId": "evt_7c2d9f04",
- "name": "Order placed",
- "description": "A customer submits an order.",
- "synonyms": [
- "purchase"
], - "subjectObjectId": "obj_4b7e1d93",
- "relatedObjectIds": [
- "obj_9e3a6c15"
], - "tableId": "tbl_4e8b2c19",
- "subjectKeyColumnIds": [
- "col_6d1b4f28"
], - "occurredAtColumnId": "col_2e8c7a50",
- "condition": "status <> 'DRAFT'",
- "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "guidance": [
- "Use the order date, not the payment date."
], - "datasourceId": "ds_7f3a91c2",
- "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "evt_7c2d9f04",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Returns the current version of a semantic event. Required scope for OAuth clients: semantic:read.
| eventId required | string Example: evt_7c2d9f04 Semantic Event ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "eventId": "evt_7c2d9f04",
- "name": "Order placed",
- "description": "A customer submits an order.",
- "synonyms": [
- "purchase"
], - "subjectObjectId": "obj_4b7e1d93",
- "relatedObjectIds": [
- "obj_9e3a6c15"
], - "tableId": "tbl_4e8b2c19",
- "subjectKeyColumnIds": [
- "col_6d1b4f28"
], - "occurredAtColumnId": "col_2e8c7a50",
- "condition": "status <> 'DRAFT'",
- "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "guidance": [
- "Use the order date, not the payment date."
], - "datasourceId": "ds_7f3a91c2",
- "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "evt_7c2d9f04",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Saves a new version of a Semantic Event. Send the same eventId in the path and in the request body. When categories is omitted, existing categories are kept. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| eventId required | string Example: evt_7c2d9f04 Semantic Event ID. |
| eventId required | string ID of the event to update. This body field (not the path parameter) selects the event. |
| baseEntityId | string or null Organization entity ID that a persona variant belongs to. Required for PERSONA scope; omit it for ORGANIZATION scope. |
object or null Defaults to ORGANIZATION when omitted. | |
| name required | string |
| description required | string |
| synonyms | Array of strings or null |
| subjectObjectId | string or null The object this event happens to. |
| relatedObjectIds | Array of strings or null Other objects involved in the event. Each must exist. |
| tableId | string or null Table where occurrences are recorded. An event without it is unbound. |
| subjectKeyColumnIds | Array of strings or null Columns of tableId holding the subject's key, in the same order as the subject object's key columns. Requires subjectObjectId. |
| occurredAtColumnId | string or null Column of tableId holding when the event occurred. Required for a bound event. |
| condition | string or null Optional SQL predicate over tableId that selects occurrence rows. |
| businessTermIds | Array of strings or null Business Terms that give contextual grounding for this event. Each must exist. |
| guidance | Array of strings or null How an agent should reason about or work with this event. |
Array of objects or null (SemanticCategoryRef) When omitted/null, existing categories are kept. |
{- "eventId": "evt_7c2d9f04",
- "baseEntityId": "evt_7c2d9f04",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "name": "Order placed",
- "description": "A customer submits an order.",
- "synonyms": [
- "purchase"
], - "subjectObjectId": "obj_4b7e1d93",
- "relatedObjectIds": [
- "obj_9e3a6c15"
], - "tableId": "tbl_4e8b2c19",
- "subjectKeyColumnIds": [
- "col_6d1b4f28"
], - "occurredAtColumnId": "col_2e8c7a50",
- "condition": "status <> 'DRAFT'",
- "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "guidance": [
- "Use the order date, not the payment date."
], - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "eventId": "evt_7c2d9f04",
- "name": "Order placed",
- "description": "A customer submits an order.",
- "synonyms": [
- "purchase"
], - "subjectObjectId": "obj_4b7e1d93",
- "relatedObjectIds": [
- "obj_9e3a6c15"
], - "tableId": "tbl_4e8b2c19",
- "subjectKeyColumnIds": [
- "col_6d1b4f28"
], - "occurredAtColumnId": "col_2e8c7a50",
- "condition": "status <> 'DRAFT'",
- "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "guidance": [
- "Use the order date, not the payment date."
], - "datasourceId": "ds_7f3a91c2",
- "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "evt_7c2d9f04",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Deletes a semantic event. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| eventId required | string Example: evt_7c2d9f04 Semantic Event ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "code": "OPERATION_SUCCESSFUL",
- "message": "Successful"
}
}Returns a specific version of a semantic event. Required scope for OAuth clients: semantic:read.
| eventId required | string Example: evt_7c2d9f04 Semantic Event ID. |
| version required | integer <int32> Example: 2 Semantic event version number. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "eventId": "evt_7c2d9f04",
- "name": "Order placed",
- "description": "A customer submits an order.",
- "synonyms": [
- "purchase"
], - "subjectObjectId": "obj_4b7e1d93",
- "relatedObjectIds": [
- "obj_9e3a6c15"
], - "tableId": "tbl_4e8b2c19",
- "subjectKeyColumnIds": [
- "col_6d1b4f28"
], - "occurredAtColumnId": "col_2e8c7a50",
- "condition": "status <> 'DRAFT'",
- "businessTermIds": [
- "5f0c2a9e-7b1d-4c3e-9a51-2d8e6f1b0c47"
], - "guidance": [
- "Use the order date, not the payment date."
], - "datasourceId": "ds_7f3a91c2",
- "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "evt_7c2d9f04",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Things that can be done to an object, with the events that trigger them, the events that show they were taken, and the metrics they are expected to move.
Returns the organization's semantic actions. Required scope for OAuth clients: semantic:read.
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "actionId": "act_3e8b5a71",
- "name": "Send win-back offer",
- "description": "Email a discount to a customer who has not ordered in 90 days.",
- "synonyms": [
- "retention offer"
], - "targetObjectId": "obj_4b7e1d93",
- "triggerEventIds": [
- "evt_1f6a3c88"
], - "impacts": [
- {
- "metricId": "c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e",
- "direction": "INCREASE"
}
], - "resultEventIds": [
- "evt_7c2d9f04"
], - "guidance": [
- "Requires approval from the retention team lead."
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "act_3e8b5a71",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
]
}Creates a Semantic Action. The target object, trigger and result events, and impacted metrics must exist. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| baseEntityId | string or null Organization entity ID that a persona variant belongs to. Required for PERSONA scope; omit it for ORGANIZATION scope. |
object or null Defaults to ORGANIZATION when omitted. | |
| name required | string |
| description required | string |
| synonyms | Array of strings or null |
| targetObjectId | string or null The object this action acts on. Must exist when given. |
| triggerEventIds | Array of strings or null Events that make this action worth considering. Each must exist. |
Array of objects or null (MetricImpact) Metrics this action is expected to move. Each metric must exist and can appear only once. | |
| resultEventIds | Array of strings or null Events that show the action was actually taken. Each must exist. |
| guidance | Array of strings or null When to use or avoid this action, who approves it, and its limits. |
Array of objects or null (SemanticCategoryRef) |
{- "baseEntityId": "act_3e8b5a71",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "name": "Send win-back offer",
- "description": "Email a discount to a customer who has not ordered in 90 days.",
- "synonyms": [
- "retention offer"
], - "targetObjectId": "obj_4b7e1d93",
- "triggerEventIds": [
- "evt_1f6a3c88"
], - "impacts": [
- {
- "metricId": "c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e",
- "direction": "INCREASE"
}
], - "resultEventIds": [
- "evt_7c2d9f04"
], - "guidance": [
- "Requires approval from the retention team lead."
], - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "actionId": "act_3e8b5a71",
- "name": "Send win-back offer",
- "description": "Email a discount to a customer who has not ordered in 90 days.",
- "synonyms": [
- "retention offer"
], - "targetObjectId": "obj_4b7e1d93",
- "triggerEventIds": [
- "evt_1f6a3c88"
], - "impacts": [
- {
- "metricId": "c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e",
- "direction": "INCREASE"
}
], - "resultEventIds": [
- "evt_7c2d9f04"
], - "guidance": [
- "Requires approval from the retention team lead."
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "act_3e8b5a71",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Returns the current version of a semantic action. Required scope for OAuth clients: semantic:read.
| actionId required | string Example: act_3e8b5a71 Semantic Action ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "actionId": "act_3e8b5a71",
- "name": "Send win-back offer",
- "description": "Email a discount to a customer who has not ordered in 90 days.",
- "synonyms": [
- "retention offer"
], - "targetObjectId": "obj_4b7e1d93",
- "triggerEventIds": [
- "evt_1f6a3c88"
], - "impacts": [
- {
- "metricId": "c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e",
- "direction": "INCREASE"
}
], - "resultEventIds": [
- "evt_7c2d9f04"
], - "guidance": [
- "Requires approval from the retention team lead."
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "act_3e8b5a71",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Saves a new version of a Semantic Action. Send the same actionId in the path and in the request body. When categories is omitted, existing categories are kept. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| actionId required | string Example: act_3e8b5a71 Semantic Action ID. |
| actionId required | string ID of the action to update. This body field (not the path parameter) selects the action. |
| baseEntityId | string or null Organization entity ID that a persona variant belongs to. Required for PERSONA scope; omit it for ORGANIZATION scope. |
object or null Defaults to ORGANIZATION when omitted. | |
| name required | string |
| description required | string |
| synonyms | Array of strings or null |
| targetObjectId | string or null The object this action acts on. Must exist when given. |
| triggerEventIds | Array of strings or null Events that make this action worth considering. Each must exist. |
Array of objects or null (MetricImpact) Metrics this action is expected to move. Each metric must exist and can appear only once. | |
| resultEventIds | Array of strings or null Events that show the action was actually taken. Each must exist. |
| guidance | Array of strings or null When to use or avoid this action, who approves it, and its limits. |
Array of objects or null (SemanticCategoryRef) When omitted/null, existing categories are kept. |
{- "actionId": "act_3e8b5a71",
- "baseEntityId": "act_3e8b5a71",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "name": "Send win-back offer",
- "description": "Email a discount to a customer who has not ordered in 90 days.",
- "synonyms": [
- "retention offer"
], - "targetObjectId": "obj_4b7e1d93",
- "triggerEventIds": [
- "evt_1f6a3c88"
], - "impacts": [
- {
- "metricId": "c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e",
- "direction": "INCREASE"
}
], - "resultEventIds": [
- "evt_7c2d9f04"
], - "guidance": [
- "Requires approval from the retention team lead."
], - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "actionId": "act_3e8b5a71",
- "name": "Send win-back offer",
- "description": "Email a discount to a customer who has not ordered in 90 days.",
- "synonyms": [
- "retention offer"
], - "targetObjectId": "obj_4b7e1d93",
- "triggerEventIds": [
- "evt_1f6a3c88"
], - "impacts": [
- {
- "metricId": "c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e",
- "direction": "INCREASE"
}
], - "resultEventIds": [
- "evt_7c2d9f04"
], - "guidance": [
- "Requires approval from the retention team lead."
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "act_3e8b5a71",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Deletes a semantic action. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| actionId required | string Example: act_3e8b5a71 Semantic Action ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "code": "OPERATION_SUCCESSFUL",
- "message": "Successful"
}
}Returns a specific version of a semantic action. Required scope for OAuth clients: semantic:read.
| actionId required | string Example: act_3e8b5a71 Semantic Action ID. |
| version required | integer <int32> Example: 2 Semantic action version number. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "actionId": "act_3e8b5a71",
- "name": "Send win-back offer",
- "description": "Email a discount to a customer who has not ordered in 90 days.",
- "synonyms": [
- "retention offer"
], - "targetObjectId": "obj_4b7e1d93",
- "triggerEventIds": [
- "evt_1f6a3c88"
], - "impacts": [
- {
- "metricId": "c7d2e1f0-4a8b-4b6c-9d3e-5f1a2b3c4d5e",
- "direction": "INCREASE"
}
], - "resultEventIds": [
- "evt_7c2d9f04"
], - "guidance": [
- "Requires approval from the retention team lead."
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "act_3e8b5a71",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Links between two objects (ASSOCIATION, PART_OF, IS_A) or between two events (LEADS_TO).
Returns the organization's semantic relationships. Required scope for OAuth clients: semantic:read.
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "relationshipId": "rel_2d6f8b39",
- "kind": "ASSOCIATION",
- "sourceId": "obj_4b7e1d93",
- "targetId": "obj_9e3a6c15",
- "label": "places",
- "description": "A customer places orders.",
- "cardinality": "ONE_TO_MANY",
- "tableRelationshipId": "trel_5a9c2e60",
- "guidance": [
- "Follow this link to find a customer's orders."
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "rel_2d6f8b39",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
]
}Creates a link between two different objects, or between two events for LEADS_TO. Both endpoints must exist. Cardinality and tableRelationshipId apply only to links between objects; a table relationship must join the two objects' primary tables. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| baseEntityId | string or null Organization entity ID that a persona variant belongs to. Required for PERSONA scope; omit it for ORGANIZATION scope. |
object or null Defaults to ORGANIZATION when omitted. | |
| kind required | string Enum: "ASSOCIATION" "PART_OF" "IS_A" "LEADS_TO" ASSOCIATION: a general link between two objects, described by its label. PART_OF: the source object is a part of the target. IS_A: the source object is a kind of the target. LEADS_TO: the source event tends to lead to the target event. |
| sourceId required | string Source object ID, or source event ID for LEADS_TO. |
| targetId required | string Target object ID, or target event ID for LEADS_TO. Must differ from sourceId. |
| label | string or null Verb phrase read from source to target. Required for ASSOCIATION. |
| description required | string |
| cardinality | string or null Enum: "ONE_TO_ONE" "ONE_TO_MANY" "MANY_TO_ONE" "MANY_TO_MANY" How many targets one source has, and the reverse. Links between objects only. |
| tableRelationshipId | string or null Optional Table Relationship that joins the two objects' primary tables. Links between objects only. |
| guidance | Array of strings or null How an agent should reason about or follow this link. |
Array of objects or null (SemanticCategoryRef) |
{- "baseEntityId": "rel_2d6f8b39",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "kind": "ASSOCIATION",
- "sourceId": "obj_4b7e1d93",
- "targetId": "obj_9e3a6c15",
- "label": "places",
- "description": "A customer places orders.",
- "cardinality": "ONE_TO_MANY",
- "tableRelationshipId": "trel_5a9c2e60",
- "guidance": [
- "Follow this link to find a customer's orders."
], - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "relationshipId": "rel_2d6f8b39",
- "kind": "ASSOCIATION",
- "sourceId": "obj_4b7e1d93",
- "targetId": "obj_9e3a6c15",
- "label": "places",
- "description": "A customer places orders.",
- "cardinality": "ONE_TO_MANY",
- "tableRelationshipId": "trel_5a9c2e60",
- "guidance": [
- "Follow this link to find a customer's orders."
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "rel_2d6f8b39",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Returns the current version of a semantic relationship. Required scope for OAuth clients: semantic:read.
| relationshipId required | string Example: rel_2d6f8b39 Semantic Relationship ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "relationshipId": "rel_2d6f8b39",
- "kind": "ASSOCIATION",
- "sourceId": "obj_4b7e1d93",
- "targetId": "obj_9e3a6c15",
- "label": "places",
- "description": "A customer places orders.",
- "cardinality": "ONE_TO_MANY",
- "tableRelationshipId": "trel_5a9c2e60",
- "guidance": [
- "Follow this link to find a customer's orders."
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "rel_2d6f8b39",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Saves a new version of a Semantic Relationship. Send the same relationshipId in the path and in the request body. When categories is omitted, existing categories are kept. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| relationshipId required | string Example: rel_2d6f8b39 Semantic Relationship ID. |
| relationshipId required | string ID of the relationship to update. This body field (not the path parameter) selects the relationship. |
| baseEntityId | string or null Organization entity ID that a persona variant belongs to. Required for PERSONA scope; omit it for ORGANIZATION scope. |
object or null Defaults to ORGANIZATION when omitted. | |
| kind required | string Enum: "ASSOCIATION" "PART_OF" "IS_A" "LEADS_TO" ASSOCIATION: a general link between two objects, described by its label. PART_OF: the source object is a part of the target. IS_A: the source object is a kind of the target. LEADS_TO: the source event tends to lead to the target event. |
| sourceId required | string Source object ID, or source event ID for LEADS_TO. |
| targetId required | string Target object ID, or target event ID for LEADS_TO. Must differ from sourceId. |
| label | string or null Verb phrase read from source to target. Required for ASSOCIATION. |
| description required | string |
| cardinality | string or null Enum: "ONE_TO_ONE" "ONE_TO_MANY" "MANY_TO_ONE" "MANY_TO_MANY" How many targets one source has, and the reverse. Links between objects only. |
| tableRelationshipId | string or null Optional Table Relationship that joins the two objects' primary tables. Links between objects only. |
| guidance | Array of strings or null How an agent should reason about or follow this link. |
Array of objects or null (SemanticCategoryRef) When omitted/null, existing categories are kept. |
{- "relationshipId": "rel_2d6f8b39",
- "baseEntityId": "rel_2d6f8b39",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "kind": "ASSOCIATION",
- "sourceId": "obj_4b7e1d93",
- "targetId": "obj_9e3a6c15",
- "label": "places",
- "description": "A customer places orders.",
- "cardinality": "ONE_TO_MANY",
- "tableRelationshipId": "trel_5a9c2e60",
- "guidance": [
- "Follow this link to find a customer's orders."
], - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "relationshipId": "rel_2d6f8b39",
- "kind": "ASSOCIATION",
- "sourceId": "obj_4b7e1d93",
- "targetId": "obj_9e3a6c15",
- "label": "places",
- "description": "A customer places orders.",
- "cardinality": "ONE_TO_MANY",
- "tableRelationshipId": "trel_5a9c2e60",
- "guidance": [
- "Follow this link to find a customer's orders."
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "rel_2d6f8b39",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Deletes a semantic relationship. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| relationshipId required | string Example: rel_2d6f8b39 Semantic Relationship ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "code": "OPERATION_SUCCESSFUL",
- "message": "Successful"
}
}Returns a specific version of a semantic relationship. Required scope for OAuth clients: semantic:read.
| relationshipId required | string Example: rel_2d6f8b39 Semantic Relationship ID. |
| version required | integer <int32> Example: 2 Semantic relationship version number. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "relationshipId": "rel_2d6f8b39",
- "kind": "ASSOCIATION",
- "sourceId": "obj_4b7e1d93",
- "targetId": "obj_9e3a6c15",
- "label": "places",
- "description": "A customer places orders.",
- "cardinality": "ONE_TO_MANY",
- "tableRelationshipId": "trel_5a9c2e60",
- "guidance": [
- "Follow this link to find a customer's orders."
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "rel_2d6f8b39",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Categories that group semantic entities. Categories can be created and read; there is no update or delete operation.
Returns the organization's semantic categories. Required scope for OAuth clients: semantic:read.
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance",
- "description": "Revenue, cost and margin concepts.",
- "synonyms": [
- "financials"
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "cat_2b9f41d7",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
]
}Creates a semantic category. Categories cannot be updated or deleted over the API. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| baseEntityId | string or null Organization entity ID that a persona variant belongs to. Required for PERSONA scope; omit it for ORGANIZATION scope. |
object or null Defaults to ORGANIZATION when omitted. | |
| name required | string |
| description required | string |
| synonyms | Array of strings or null |
{- "baseEntityId": "cat_2b9f41d7",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "name": "Finance",
- "description": "Revenue, cost and margin concepts.",
- "synonyms": [
- "financials"
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance",
- "description": "Revenue, cost and margin concepts.",
- "synonyms": [
- "financials"
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "cat_2b9f41d7",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Returns the current version of a semantic category. Required scope for OAuth clients: semantic:read.
| categoryId required | string Example: cat_2b9f41d7 Semantic Category ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance",
- "description": "Revenue, cost and margin concepts.",
- "synonyms": [
- "financials"
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "cat_2b9f41d7",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Returns a specific version of a semantic category. Required scope for OAuth clients: semantic:read.
| categoryId required | string Example: cat_2b9f41d7 Semantic Category ID. |
| version required | integer <int32> Example: 2 Semantic category version number. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance",
- "description": "Revenue, cost and margin concepts.",
- "synonyms": [
- "financials"
], - "version": 3,
- "confidence": 0,
- "lineageId": "lin_8e2f6a13",
- "orgId": "org_12ab34cd",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": [
- 2026,
- 9,
- 14,
- 8,
- 30,
- 12,
- 0
], - "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "cat_2b9f41d7",
- "name": "Finance"
}
], - "associations": [
- {
- "associationId": "assoc_9c8b7a6d",
- "label": "customer revenue",
- "confidence": 0.82,
- "source": "QUERY",
- "evidenceId": null
}
], - "baseEntityId": "cat_2b9f41d7",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "effectivePeriod": {
- "effectiveFrom": "2026-01-01",
- "effectiveTo": null,
- "source": "EXPLICIT",
- "cue": "Effective from January 2026"
}
}
}Create and manage curator-approved, read-only SQL queries, each paired with the question it answers and optional typed parameters. OAuth clients can call them with the semantic:read and semantic:read-write scopes. Agents find and run verified queries with the searchVerifiedQueries, getVerifiedQuery and executeVerifiedQuery tools over MCP.
Saves a new read-only SQL query as version 1 after checking the SQL, schema and parameter definitions against the datasource. A missing or blank label, description, query or datasourceId returns 400. Invalid SQL, a schema mismatch or an invalid parameter definition also returns 400, with a message starting "Invalid verified query:" that gives the reason; an unknown datasource returns 404. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| label required | string non-empty Short name. Must not be blank. |
| description required | string non-empty Main question or scenario. Must not be blank. |
| query required | string non-empty Exactly one read-only SELECT (WITH, UNION, INTERSECT, EXCEPT and ORDER BY are allowed). Use :name placeholders; positional ? markers are not allowed when parameters are declared. Placeholders inside strings and comments are ignored. |
| datasourceId required | string non-empty Datasource that runs the query. It must exist. |
| schema | string or null Default schema. Required when no table in the SQL is schema-qualified; must match when the SQL references exactly one schema; must be omitted when the SQL references several schemas. |
| alternativeQuestions | Array of strings Other phrasings that help search find the query. |
Array of objects (VerifiedQueryParameter) <= 20 items One definition for each distinct :name placeholder, at most 20. Duplicate names, unused definitions and undeclared placeholders are rejected. | |
Array of objects (VerifiedQueryCategoryRef) Semantic category references. | |
object Defaults to organization scope when omitted. | |
| baseEntityId | string For a persona variant, the ID of the organization query it varies. Ignored for organization scope, which uses the query's own ID. |
{- "label": "Revenue for a region after a date",
- "description": "What is the revenue for a region from a given date?",
- "alternativeQuestions": [
- "Show revenue in a region after a date"
], - "datasourceId": "sales-prod",
- "schema": "public",
- "query": "SELECT SUM(revenue) AS total_revenue FROM sales WHERE region = :region AND sale_date >= :from_date",
- "parameters": [
- {
- "name": "region",
- "type": "STRING",
- "description": "Sales region"
}, - {
- "name": "from_date",
- "type": "DATE",
- "description": "First date to include"
}
]
}{- "meta": {
- "ctime": "2026-09-29T10:15:30.123Z"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "version": 1,
- "confidence": 0,
- "lineageId": "b2d7e0c4-91a3-4f6e-8c55-3e1a9d0f7b21",
- "orgId": "acme-corp",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": null,
- "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": null,
- "associations": null,
- "baseEntityId": "8f3c2a1e-5b7d-4c9a-9e21-6d4f0b7a3c55",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "queryId": "8f3c2a1e-5b7d-4c9a-9e21-6d4f0b7a3c55",
- "label": "Revenue for a region after a date",
- "description": "What is the revenue for a region from a given date?",
- "datasourceId": "sales-prod",
- "schema": "public",
- "query": "SELECT SUM(revenue) AS total_revenue FROM sales WHERE region = :region AND sale_date >= :from_date",
- "createdAt": 1789305125000,
- "alternativeQuestions": [
- "Show revenue in a region after a date",
- "Regional sales since a date"
], - "parameters": [
- {
- "name": "region",
- "type": "STRING",
- "description": "Sales region"
}, - {
- "name": "from_date",
- "type": "DATE",
- "description": "First date to include"
}
]
}, - "pagination": null
}Returns the latest version of a verified query. A query marked invalid returns 404; a deleted query returns its deletion version with deleted set to true. Required scope for OAuth clients: semantic:read.
| queryId required | string Example: 8f3c2a1e-5b7d-4c9a-9e21-6d4f0b7a3c55 Verified query ID. |
{- "meta": {
- "ctime": "2026-09-29T10:15:30.123Z"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "version": 2,
- "confidence": 0,
- "lineageId": "b2d7e0c4-91a3-4f6e-8c55-3e1a9d0f7b21",
- "orgId": "acme-corp",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": null,
- "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "3a9b6c1d-2e4f-4a7b-8c9d-0e1f2a3b4c5d",
- "name": "Finance"
}
], - "associations": null,
- "baseEntityId": "8f3c2a1e-5b7d-4c9a-9e21-6d4f0b7a3c55",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "queryId": "8f3c2a1e-5b7d-4c9a-9e21-6d4f0b7a3c55",
- "label": "Revenue for a region after a date",
- "description": "What is the revenue for a region from a given date?",
- "datasourceId": "sales-prod",
- "schema": "public",
- "query": "SELECT SUM(revenue) AS total_revenue FROM sales WHERE region = :region AND sale_date >= :from_date",
- "createdAt": 1789305125000,
- "alternativeQuestions": [
- "Show revenue in a region after a date",
- "Regional sales since a date"
], - "parameters": [
- {
- "name": "region",
- "type": "STRING",
- "description": "Sales region"
}, - {
- "name": "from_date",
- "type": "DATE",
- "description": "First date to include"
}
]
}, - "pagination": null
}Saves a new version from the complete definition in the body; the query ID comes from the URL. A missing or blank label or description, or a missing query or datasourceId, returns 400. Invalid SQL, a schema mismatch or an invalid parameter definition also returns 400, with a message starting "Invalid verified query:" that gives the reason. An unknown or deleted query ID, or an unknown datasource, returns 404. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| queryId required | string Example: 8f3c2a1e-5b7d-4c9a-9e21-6d4f0b7a3c55 Verified query ID. |
| label required | string non-empty Short name. Must not be blank. |
| description required | string non-empty Main question or scenario. Must not be blank. |
| query required | string non-empty Exactly one read-only SELECT (WITH, UNION, INTERSECT, EXCEPT and ORDER BY are allowed). Use :name placeholders; positional ? markers are not allowed when parameters are declared. Placeholders inside strings and comments are ignored. |
| datasourceId required | string non-empty Datasource that runs the query. It must exist. |
| schema | string or null Default schema. Required when no table in the SQL is schema-qualified; must match when the SQL references exactly one schema; must be omitted when the SQL references several schemas. |
| alternativeQuestions | Array of strings Full list for the new version. Omitting it clears the alternative questions. |
Array of objects (VerifiedQueryParameter) <= 20 items Full parameter list for the new version, at most 20. Omit to keep the current definitions; send [] to remove all. | |
Array of objects (VerifiedQueryCategoryRef) Full list for the new version. Omit to keep the current categories. | |
object Defaults to organization scope when omitted. | |
| baseEntityId | string For a persona variant, the ID of the organization query it varies. Ignored for organization scope, which uses the query's own ID. |
| queryId | string Ignored; the ID in the URL is used. |
{- "label": "Revenue for a region after a date",
- "description": "What is the revenue for a region from a given date?",
- "alternativeQuestions": [
- "Show revenue in a region after a date",
- "Regional sales since a date"
], - "datasourceId": "sales-prod",
- "schema": "public",
- "query": "SELECT SUM(revenue) AS total_revenue FROM sales WHERE region = :region AND sale_date >= :from_date AND channel <> 'internal'",
- "parameters": [
- {
- "name": "region",
- "type": "STRING",
- "description": "Sales region"
}, - {
- "name": "from_date",
- "type": "DATE",
- "description": "First date to include"
}
]
}{- "meta": {
- "ctime": "2026-09-29T10:15:30.123Z"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "version": 3,
- "confidence": 0,
- "lineageId": "b2d7e0c4-91a3-4f6e-8c55-3e1a9d0f7b21",
- "orgId": "acme-corp",
- "latest": true,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": null,
- "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "3a9b6c1d-2e4f-4a7b-8c9d-0e1f2a3b4c5d",
- "name": "Finance"
}
], - "associations": null,
- "baseEntityId": "8f3c2a1e-5b7d-4c9a-9e21-6d4f0b7a3c55",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "queryId": "8f3c2a1e-5b7d-4c9a-9e21-6d4f0b7a3c55",
- "label": "Revenue for a region after a date",
- "description": "What is the revenue for a region from a given date?",
- "datasourceId": "sales-prod",
- "schema": "public",
- "query": "SELECT SUM(revenue) AS total_revenue FROM sales WHERE region = :region AND sale_date >= :from_date AND channel <> 'internal'",
- "createdAt": 1789305125000,
- "alternativeQuestions": [
- "Show revenue in a region after a date",
- "Regional sales since a date"
], - "parameters": [
- {
- "name": "region",
- "type": "STRING",
- "description": "Sales region"
}, - {
- "name": "from_date",
- "type": "DATE",
- "description": "First date to include"
}
]
}, - "pagination": null
}Deletes a verified query by recording a new, deleted version; earlier versions stay readable by version number. Requires the ADMIN or CURATOR role (OAuth clients act as CURATOR). Required scope for OAuth clients: semantic:read-write.
| queryId required | string Example: 8f3c2a1e-5b7d-4c9a-9e21-6d4f0b7a3c55 Verified query ID. |
{- "meta": {
- "ctime": "2026-09-29T10:15:30.123Z"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "code": "OPERATION_SUCCESSFUL",
- "message": "Successful"
}, - "pagination": null
}Returns one version of a verified query, including versions that are no longer current, invalid or deleted. Required scope for OAuth clients: semantic:read.
| queryId required | string Example: 8f3c2a1e-5b7d-4c9a-9e21-6d4f0b7a3c55 Verified query ID. |
| version required | integer <int32> Example: 1 Version number. |
{- "meta": {
- "ctime": "2026-09-29T10:15:30.123Z"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "version": 1,
- "confidence": 0,
- "lineageId": "b2d7e0c4-91a3-4f6e-8c55-3e1a9d0f7b21",
- "orgId": "acme-corp",
- "latest": false,
- "deleted": false,
- "semanticState": {
- "status": "VALID",
- "reason": null,
- "invalidatedAt": null,
- "invalidationCauseChangeRecordId": null,
- "invalidationBuildSessionId": null,
- "invalidationDatasourceId": null
}, - "categories": [
- {
- "categoryId": "3a9b6c1d-2e4f-4a7b-8c9d-0e1f2a3b4c5d",
- "name": "Finance"
}
], - "associations": null,
- "baseEntityId": "8f3c2a1e-5b7d-4c9a-9e21-6d4f0b7a3c55",
- "semanticScope": {
- "type": "ORGANIZATION",
- "personaId": null
}, - "queryId": "8f3c2a1e-5b7d-4c9a-9e21-6d4f0b7a3c55",
- "label": "Revenue for a region after a date",
- "description": "What is the revenue for a region from a given date?",
- "datasourceId": "sales-prod",
- "schema": "public",
- "query": "SELECT SUM(revenue) AS total_revenue FROM sales WHERE region = :region AND sale_date >= :from_date",
- "createdAt": 1789305125000,
- "alternativeQuestions": [
- "Show revenue in a region after a date",
- "Regional sales since a date"
], - "parameters": [
- {
- "name": "region",
- "type": "STRING",
- "description": "Sales region"
}, - {
- "name": "from_date",
- "type": "DATE",
- "description": "First date to include"
}
]
}, - "pagination": null
}Returns, for each parameter, the Catalog column IDs that the saved SQL compares it with; the server works these out when the query is saved. Omit version to use the latest version. Required scope for OAuth clients: semantic:read.
| queryId required | string Example: 8f3c2a1e-5b7d-4c9a-9e21-6d4f0b7a3c55 Verified query ID. |
| version | integer <int32> Example: version=2 Version number; defaults to the latest version. |
{- "meta": {
- "ctime": "2026-09-29T10:15:30.123Z"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "region": [
- "5e2c9a71-0b3d-4f8e-a6c4-7d1e2f3a4b5c"
], - "from_date": [ ]
}, - "pagination": null
}Table, column and row access policies, with optional attribute-based (ABAC) conditions. Client credentials: access-control:read to read, access-control:read-write to change.
A policy has a scope (datasource and schema), subjects (user and group IDs) and a set of rules. Each rule has a ruleType: TABLE rules select a table by name, PATTERN rules select tables by regular expression. Each rule has an effect of ALLOW or DENY. A rule can carry an attribute condition, and a TABLE rule can also carry SQL rowConditions and a typed attribute rowFilter. Attribute names used in conditions must be defined first with the Authorization Attributes operations.
Leave both subjects.userIds and subjects.groupIds empty to select users by attributes only. Such a policy applies only when every rule has a condition or a rowFilter.
Datasource gate:
restrictedAccess. Access policies are enforced only on datasources whoserestrictedAccessflag istrue. New datasources start with it off (false), so an admin must turn on Restricted Access (Administration → Connections, orrestrictedAccess: trueon the datasource API) before any policy takes effect. On an unrestricted datasource, Colrows skips access checks and row predicates entirely.
Returns the organization's active access policies. Deleted policies are not listed. Required scope for OAuth clients: access-control:read (or access-control:read-write, which includes read).
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "policyId": "8f14e45f-ceea-467f-a8f5-2b1c6f0e2d3a",
- "name": "string",
- "description": "string",
- "active": true,
- "scope": {
- "datasourceId": "ds_sales",
- "schema": "public",
- "catalog": "string"
}, - "subjects": {
- "userIds": [
- "rahul.verma@example.com"
], - "groupIds": [
- "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31"
]
}, - "rules": [
- {
- "ruleType": "TABLE",
- "resourceSelector": {
- "tableName": "orders",
- "tablePattern": "^payroll_.*$",
- "includedColumns": [
- "string"
], - "excludedColumns": [
- "string"
], - "includedColumnPatterns": [
- "string"
], - "excludedColumnPatterns": [
- "string"
]
}, - "effect": "ALLOW",
- "rowConditions": [
- "region = 'East'"
], - "condition": {
- "operator": "GTE",
- "left": {
- "kind": "SUBJECT",
- "name": "clearance"
}, - "right": {
- "kind": "RESOURCE",
- "name": "sensitivity"
}
}, - "rowFilter": {
- "operator": "GTE",
- "left": {
- "kind": "SUBJECT",
- "name": "clearance"
}, - "right": {
- "kind": "RESOURCE",
- "name": "sensitivity"
}
}
}
], - "revision": 1,
- "createdBy": "string",
- "createdAt": 0,
- "updatedBy": "string",
- "updatedAt": 0,
- "orgId": "string",
- "datasource": {
- "datasourceId": "ds_5f8a2c1e9b7d",
- "name": "Sales Warehouse"
}, - "createdByRef": {
- "userId": "rahul.verma@example.com",
- "name": "Rahul Verma"
}, - "usersRefs": [
- {
- "userId": "rahul.verma@example.com",
- "name": "Rahul Verma"
}
], - "userGroupsRefs": [
- {
- "groupId": "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31",
- "name": "Finance Analysts"
}
]
}
]
}Returns one access policy by ID, including a deleted one (active: false). Required scope for OAuth clients: access-control:read (or access-control:read-write, which includes read).
| policyId required | string Example: 8f14e45f-ceea-467f-a8f5-2b1c6f0e2d3a ID of the access policy. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "policyId": "8f14e45f-ceea-467f-a8f5-2b1c6f0e2d3a",
- "name": "string",
- "description": "string",
- "active": true,
- "scope": {
- "datasourceId": "ds_sales",
- "schema": "public",
- "catalog": "string"
}, - "subjects": {
- "userIds": [
- "rahul.verma@example.com"
], - "groupIds": [
- "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31"
]
}, - "rules": [
- {
- "ruleType": "TABLE",
- "resourceSelector": {
- "tableName": "orders",
- "tablePattern": "^payroll_.*$",
- "includedColumns": [
- "string"
], - "excludedColumns": [
- "string"
], - "includedColumnPatterns": [
- "string"
], - "excludedColumnPatterns": [
- "string"
]
}, - "effect": "ALLOW",
- "rowConditions": [
- "region = 'East'"
], - "condition": {
- "operator": "GTE",
- "left": {
- "kind": "SUBJECT",
- "name": "clearance"
}, - "right": {
- "kind": "RESOURCE",
- "name": "sensitivity"
}
}, - "rowFilter": {
- "operator": "GTE",
- "left": {
- "kind": "SUBJECT",
- "name": "clearance"
}, - "right": {
- "kind": "RESOURCE",
- "name": "sensitivity"
}
}
}
], - "revision": 1,
- "createdBy": "string",
- "createdAt": 0,
- "updatedBy": "string",
- "updatedAt": 0,
- "orgId": "string",
- "datasource": {
- "datasourceId": "ds_5f8a2c1e9b7d",
- "name": "Sales Warehouse"
}, - "createdByRef": {
- "userId": "rahul.verma@example.com",
- "name": "Rahul Verma"
}, - "usersRefs": [
- {
- "userId": "rahul.verma@example.com",
- "name": "Rahul Verma"
}
], - "userGroupsRefs": [
- {
- "groupId": "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31",
- "name": "Finance Analysts"
}
]
}
}Creates an access policy at revision 1. Required scope for OAuth clients: access-control:read-write. User sessions need the ADMIN role.
| name required | string Display name. Must not be blank, and must not match the name of another policy of the same type, including a deleted one. |
| description | string Optional description. |
required | object (PolicyScope) Where the policy applies. Unknown fields are rejected. |
required | object (PolicySubjects) Users and groups the policy applies to. Both sets default to empty; blank IDs are rejected. Unknown fields are rejected. |
required | Array of any (AccessRule) non-empty Rules of the policy. At least one is required. |
{- "name": "Sales readers",
- "description": "Read sales data and exclude confidential rows.",
- "scope": {
- "datasourceId": "ds_sales",
- "schema": "public"
}, - "subjects": {
- "userIds": [ ],
- "groupIds": [
- "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31"
]
}, - "rules": [
- {
- "ruleType": "TABLE",
- "effect": "ALLOW",
- "resourceSelector": {
- "tableName": "orders"
}, - "rowConditions": [
- "region = 'East'"
]
}, - {
- "ruleType": "PATTERN",
- "effect": "DENY",
- "resourceSelector": {
- "tablePattern": "^payroll_.*$"
}
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "policyId": "8f14e45f-ceea-467f-a8f5-2b1c6f0e2d3a",
- "name": "string",
- "description": "string",
- "active": true,
- "scope": {
- "datasourceId": "ds_sales",
- "schema": "public",
- "catalog": "string"
}, - "subjects": {
- "userIds": [
- "rahul.verma@example.com"
], - "groupIds": [
- "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31"
]
}, - "rules": [
- {
- "ruleType": "TABLE",
- "resourceSelector": {
- "tableName": "orders",
- "tablePattern": "^payroll_.*$",
- "includedColumns": [
- "string"
], - "excludedColumns": [
- "string"
], - "includedColumnPatterns": [
- "string"
], - "excludedColumnPatterns": [
- "string"
]
}, - "effect": "ALLOW",
- "rowConditions": [
- "region = 'East'"
], - "condition": {
- "operator": "GTE",
- "left": {
- "kind": "SUBJECT",
- "name": "clearance"
}, - "right": {
- "kind": "RESOURCE",
- "name": "sensitivity"
}
}, - "rowFilter": {
- "operator": "GTE",
- "left": {
- "kind": "SUBJECT",
- "name": "clearance"
}, - "right": {
- "kind": "RESOURCE",
- "name": "sensitivity"
}
}
}
], - "revision": 1,
- "createdBy": "string",
- "createdAt": 0,
- "updatedBy": "string",
- "updatedAt": 0,
- "orgId": "string",
- "datasource": {
- "datasourceId": "ds_5f8a2c1e9b7d",
- "name": "Sales Warehouse"
}, - "createdByRef": {
- "userId": "rahul.verma@example.com",
- "name": "Rahul Verma"
}, - "usersRefs": [
- {
- "userId": "rahul.verma@example.com",
- "name": "Rahul Verma"
}
], - "userGroupsRefs": [
- {
- "groupId": "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31",
- "name": "Finance Analysts"
}
]
}
}Replaces the definition of an active access policy and increases its revision. Send the policyId in the body. A missing or deleted policy returns 404. Required scope for OAuth clients: access-control:read-write. User sessions need the ADMIN role.
| policyId required | string ID of the policy to update. |
| name required | string Display name. Must not be blank, and must not match the name of another policy of the same type, including a deleted one. |
| description | string Optional description. |
required | object (PolicyScope) Where the policy applies. Unknown fields are rejected. |
required | object (PolicySubjects) Users and groups the policy applies to. Both sets default to empty; blank IDs are rejected. Unknown fields are rejected. |
required | Array of any (AccessRule) non-empty Rules of the policy. At least one is required. |
{- "policyId": "8f14e45f-ceea-467f-a8f5-2b1c6f0e2d3a",
- "name": "Sales readers",
- "description": "Read sales data and exclude confidential rows.",
- "scope": {
- "datasourceId": "ds_sales",
- "schema": "public"
}, - "subjects": {
- "userIds": [ ],
- "groupIds": [
- "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31"
]
}, - "rules": [
- {
- "ruleType": "TABLE",
- "effect": "ALLOW",
- "resourceSelector": {
- "tableName": "orders"
}, - "rowConditions": [
- "region = 'East'"
]
}, - {
- "ruleType": "PATTERN",
- "effect": "DENY",
- "resourceSelector": {
- "tablePattern": "^payroll_.*$"
}
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "policyId": "8f14e45f-ceea-467f-a8f5-2b1c6f0e2d3a",
- "name": "string",
- "description": "string",
- "active": true,
- "scope": {
- "datasourceId": "ds_sales",
- "schema": "public",
- "catalog": "string"
}, - "subjects": {
- "userIds": [
- "rahul.verma@example.com"
], - "groupIds": [
- "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31"
]
}, - "rules": [
- {
- "ruleType": "TABLE",
- "resourceSelector": {
- "tableName": "orders",
- "tablePattern": "^payroll_.*$",
- "includedColumns": [
- "string"
], - "excludedColumns": [
- "string"
], - "includedColumnPatterns": [
- "string"
], - "excludedColumnPatterns": [
- "string"
]
}, - "effect": "ALLOW",
- "rowConditions": [
- "region = 'East'"
], - "condition": {
- "operator": "GTE",
- "left": {
- "kind": "SUBJECT",
- "name": "clearance"
}, - "right": {
- "kind": "RESOURCE",
- "name": "sensitivity"
}
}, - "rowFilter": {
- "operator": "GTE",
- "left": {
- "kind": "SUBJECT",
- "name": "clearance"
}, - "right": {
- "kind": "RESOURCE",
- "name": "sensitivity"
}
}
}
], - "revision": 1,
- "createdBy": "string",
- "createdAt": 0,
- "updatedBy": "string",
- "updatedAt": 0,
- "orgId": "string",
- "datasource": {
- "datasourceId": "ds_5f8a2c1e9b7d",
- "name": "Sales Warehouse"
}, - "createdByRef": {
- "userId": "rahul.verma@example.com",
- "name": "Rahul Verma"
}, - "usersRefs": [
- {
- "userId": "rahul.verma@example.com",
- "name": "Rahul Verma"
}
], - "userGroupsRefs": [
- {
- "groupId": "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31",
- "name": "Finance Analysts"
}
]
}
}Deletes an access policy by marking it inactive and increasing its revision. A missing or already deleted policy returns 404. Required scope for OAuth clients: access-control:read-write. User sessions need the ADMIN role.
| policyId required | string Example: 8f14e45f-ceea-467f-a8f5-2b1c6f0e2d3a ID of the access policy to delete. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "code": "OPERATION_SUCCESSFUL",
- "message": "Successful"
}
}Data masking policies (formerly redaction policies), served under /api/masking. The old /api/redaction/* routes no longer exist. Client credentials: access-control:read to read, access-control:read-write to change.
A policy has a scope (datasource and schema), subjects (user and group IDs) and a set of rules. Each rule selects columns with a TABLE or PATTERN resource selector and masks them with a strategy: FULL, KEEP_PREFIX or KEEP_SUFFIX. A masking policy applies only to the users and groups in its subjects.
Each policy is stored as one record. Updates and deletes increase its revision; earlier revisions are not kept.
Datasource gate:
restrictedAccess. Data masking policies are enforced only on datasources whoserestrictedAccessflag istrue. New datasources start with it off (false), so an admin must turn on Restricted Access (Administration → Connections, orrestrictedAccess: trueon the datasource API) before any policy takes effect. On an unrestricted datasource, Colrows skips masking entirely.
Returns all of the organization's data masking policies, including deleted ones (active: false). Required scope for OAuth clients: access-control:read (or access-control:read-write, which includes read).
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "policyId": "8f14e45f-ceea-467f-a8f5-2b1c6f0e2d3a",
- "name": "string",
- "description": "string",
- "active": true,
- "scope": {
- "datasourceId": "ds_sales",
- "schema": "public",
- "catalog": "string"
}, - "subjects": {
- "userIds": [
- "rahul.verma@example.com"
], - "groupIds": [
- "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31"
]
}, - "rules": [
- {
- "ruleType": "TABLE",
- "resourceSelector": {
- "tableName": "orders",
- "tablePattern": "^payroll_.*$",
- "includedColumns": [
- "string"
], - "excludedColumns": [
- "string"
], - "includedColumnPatterns": [
- "string"
], - "excludedColumnPatterns": [
- "string"
]
}, - "strategy": {
- "type": "FULL",
- "visibleCharacterCount": 4
}
}
], - "revision": 1,
- "createdBy": "string",
- "createdAt": 0,
- "updatedBy": "string",
- "updatedAt": 0,
- "orgId": "string",
- "datasource": {
- "datasourceId": "ds_5f8a2c1e9b7d",
- "name": "Sales Warehouse"
}, - "createdByRef": {
- "userId": "rahul.verma@example.com",
- "name": "Rahul Verma"
}, - "usersRefs": [
- {
- "userId": "rahul.verma@example.com",
- "name": "Rahul Verma"
}
], - "userGroupsRefs": [
- {
- "groupId": "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31",
- "name": "Finance Analysts"
}
]
}
]
}Returns one data masking policy by ID, as an array with one element. An unknown ID returns an empty array, not 404. Required scope for OAuth clients: access-control:read (or access-control:read-write, which includes read).
| policyId required | string Example: 8f14e45f-ceea-467f-a8f5-2b1c6f0e2d3a ID of the data masking policy. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "policyId": "8f14e45f-ceea-467f-a8f5-2b1c6f0e2d3a",
- "name": "string",
- "description": "string",
- "active": true,
- "scope": {
- "datasourceId": "ds_sales",
- "schema": "public",
- "catalog": "string"
}, - "subjects": {
- "userIds": [
- "rahul.verma@example.com"
], - "groupIds": [
- "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31"
]
}, - "rules": [
- {
- "ruleType": "TABLE",
- "resourceSelector": {
- "tableName": "orders",
- "tablePattern": "^payroll_.*$",
- "includedColumns": [
- "string"
], - "excludedColumns": [
- "string"
], - "includedColumnPatterns": [
- "string"
], - "excludedColumnPatterns": [
- "string"
]
}, - "strategy": {
- "type": "FULL",
- "visibleCharacterCount": 4
}
}
], - "revision": 1,
- "createdBy": "string",
- "createdAt": 0,
- "updatedBy": "string",
- "updatedAt": 0,
- "orgId": "string",
- "datasource": {
- "datasourceId": "ds_5f8a2c1e9b7d",
- "name": "Sales Warehouse"
}, - "createdByRef": {
- "userId": "rahul.verma@example.com",
- "name": "Rahul Verma"
}, - "usersRefs": [
- {
- "userId": "rahul.verma@example.com",
- "name": "Rahul Verma"
}
], - "userGroupsRefs": [
- {
- "groupId": "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31",
- "name": "Finance Analysts"
}
]
}
]
}Returns a data masking policy, as an array with one element, only when its current revision equals version. Earlier revisions are not stored, so any other version returns 404. Required scope for OAuth clients: access-control:read (or access-control:read-write, which includes read).
| policyId required | string Example: 8f14e45f-ceea-467f-a8f5-2b1c6f0e2d3a ID of the data masking policy. |
| version required | integer Example: 2 Expected current revision of the policy. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "policyId": "8f14e45f-ceea-467f-a8f5-2b1c6f0e2d3a",
- "name": "string",
- "description": "string",
- "active": true,
- "scope": {
- "datasourceId": "ds_sales",
- "schema": "public",
- "catalog": "string"
}, - "subjects": {
- "userIds": [
- "rahul.verma@example.com"
], - "groupIds": [
- "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31"
]
}, - "rules": [
- {
- "ruleType": "TABLE",
- "resourceSelector": {
- "tableName": "orders",
- "tablePattern": "^payroll_.*$",
- "includedColumns": [
- "string"
], - "excludedColumns": [
- "string"
], - "includedColumnPatterns": [
- "string"
], - "excludedColumnPatterns": [
- "string"
]
}, - "strategy": {
- "type": "FULL",
- "visibleCharacterCount": 4
}
}
], - "revision": 1,
- "createdBy": "string",
- "createdAt": 0,
- "updatedBy": "string",
- "updatedAt": 0,
- "orgId": "string",
- "datasource": {
- "datasourceId": "ds_5f8a2c1e9b7d",
- "name": "Sales Warehouse"
}, - "createdByRef": {
- "userId": "rahul.verma@example.com",
- "name": "Rahul Verma"
}, - "usersRefs": [
- {
- "userId": "rahul.verma@example.com",
- "name": "Rahul Verma"
}
], - "userGroupsRefs": [
- {
- "groupId": "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31",
- "name": "Finance Analysts"
}
]
}
]
}Creates a data masking policy at revision 1. Required scope for OAuth clients: access-control:read-write. User sessions need the ADMIN role.
| name required | string Display name. Must not be blank, and must not match the name of another policy of the same type, including a deleted one. |
| description | string Optional description. |
required | object (PolicyScope) Where the policy applies. Unknown fields are rejected. |
required | object (PolicySubjects) Users and groups the policy applies to. Both sets default to empty; blank IDs are rejected. Unknown fields are rejected. |
required | Array of any (MaskingRule) non-empty Rules of the policy. At least one is required. |
{- "name": "Customer contact masks",
- "scope": {
- "datasourceId": "ds_sales",
- "schema": "public"
}, - "subjects": {
- "userIds": [ ],
- "groupIds": [
- "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31"
]
}, - "rules": [
- {
- "ruleType": "TABLE",
- "resourceSelector": {
- "tableName": "customers",
- "includedColumns": [
- "phone"
]
}, - "strategy": {
- "type": "KEEP_SUFFIX",
- "visibleCharacterCount": 4
}
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "policyId": "8f14e45f-ceea-467f-a8f5-2b1c6f0e2d3a",
- "name": "string",
- "description": "string",
- "active": true,
- "scope": {
- "datasourceId": "ds_sales",
- "schema": "public",
- "catalog": "string"
}, - "subjects": {
- "userIds": [
- "rahul.verma@example.com"
], - "groupIds": [
- "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31"
]
}, - "rules": [
- {
- "ruleType": "TABLE",
- "resourceSelector": {
- "tableName": "orders",
- "tablePattern": "^payroll_.*$",
- "includedColumns": [
- "string"
], - "excludedColumns": [
- "string"
], - "includedColumnPatterns": [
- "string"
], - "excludedColumnPatterns": [
- "string"
]
}, - "strategy": {
- "type": "FULL",
- "visibleCharacterCount": 4
}
}
], - "revision": 1,
- "createdBy": "string",
- "createdAt": 0,
- "updatedBy": "string",
- "updatedAt": 0,
- "orgId": "string",
- "datasource": {
- "datasourceId": "ds_5f8a2c1e9b7d",
- "name": "Sales Warehouse"
}, - "createdByRef": {
- "userId": "rahul.verma@example.com",
- "name": "Rahul Verma"
}, - "usersRefs": [
- {
- "userId": "rahul.verma@example.com",
- "name": "Rahul Verma"
}
], - "userGroupsRefs": [
- {
- "groupId": "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31",
- "name": "Finance Analysts"
}
]
}
}Replaces the definition of an active data masking policy and increases its revision. Send the policyId in the body. A missing or deleted policy returns 404. Required scope for OAuth clients: access-control:read-write. User sessions need the ADMIN role.
| policyId required | string ID of the policy to update. |
| name required | string Display name. Must not be blank, and must not match the name of another policy of the same type, including a deleted one. |
| description | string Optional description. |
required | object (PolicyScope) Where the policy applies. Unknown fields are rejected. |
required | object (PolicySubjects) Users and groups the policy applies to. Both sets default to empty; blank IDs are rejected. Unknown fields are rejected. |
required | Array of any (MaskingRule) non-empty Rules of the policy. At least one is required. |
{- "policyId": "8f14e45f-ceea-467f-a8f5-2b1c6f0e2d3a",
- "name": "Customer contact masks",
- "scope": {
- "datasourceId": "ds_sales",
- "schema": "public"
}, - "subjects": {
- "userIds": [ ],
- "groupIds": [
- "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31"
]
}, - "rules": [
- {
- "ruleType": "TABLE",
- "resourceSelector": {
- "tableName": "customers",
- "includedColumns": [
- "phone"
]
}, - "strategy": {
- "type": "KEEP_SUFFIX",
- "visibleCharacterCount": 4
}
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "policyId": "8f14e45f-ceea-467f-a8f5-2b1c6f0e2d3a",
- "name": "string",
- "description": "string",
- "active": true,
- "scope": {
- "datasourceId": "ds_sales",
- "schema": "public",
- "catalog": "string"
}, - "subjects": {
- "userIds": [
- "rahul.verma@example.com"
], - "groupIds": [
- "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31"
]
}, - "rules": [
- {
- "ruleType": "TABLE",
- "resourceSelector": {
- "tableName": "orders",
- "tablePattern": "^payroll_.*$",
- "includedColumns": [
- "string"
], - "excludedColumns": [
- "string"
], - "includedColumnPatterns": [
- "string"
], - "excludedColumnPatterns": [
- "string"
]
}, - "strategy": {
- "type": "FULL",
- "visibleCharacterCount": 4
}
}
], - "revision": 1,
- "createdBy": "string",
- "createdAt": 0,
- "updatedBy": "string",
- "updatedAt": 0,
- "orgId": "string",
- "datasource": {
- "datasourceId": "ds_5f8a2c1e9b7d",
- "name": "Sales Warehouse"
}, - "createdByRef": {
- "userId": "rahul.verma@example.com",
- "name": "Rahul Verma"
}, - "usersRefs": [
- {
- "userId": "rahul.verma@example.com",
- "name": "Rahul Verma"
}
], - "userGroupsRefs": [
- {
- "groupId": "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31",
- "name": "Finance Analysts"
}
]
}
}Deletes a data masking policy by marking it inactive and increasing its revision. A missing or already deleted policy returns 400 (INVALID_REQUEST). Required scope for OAuth clients: access-control:read-write. User sessions need the ADMIN role.
| policyId required | string Example: 8f14e45f-ceea-467f-a8f5-2b1c6f0e2d3a ID of the data masking policy to delete. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "code": "OPERATION_SUCCESSFUL",
- "message": "Successful"
}
}Define the attributes that access policy conditions use, and set their values for users, tables and columns (attribute-based access control). These operations need a user session with the ADMIN role; OAuth client tokens are rejected.
Every write carries the revision you read and fails with 400 if the record changed since. Values from LDAP, SAML or OIDC sign-in are set by the identity provider through the schema mappings, not through this API.
Returns the organization's attribute definitions and identity-provider mappings. When none has been saved, returns an empty schema with revision 0. Requires the ADMIN role and a user session token; OAuth client tokens are rejected.
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "orgId": "string",
- "revision": 1,
- "definitions": [
- {
- "name": "clearance",
- "target": "SUBJECT",
- "type": "STRING",
- "source": "ADMIN",
- "allowedValues": [
- "string"
], - "maxAgeSeconds": 0
}
], - "mappings": [
- {
- "source": "LDAP",
- "issuer": "string",
- "claim": "string",
- "attribute": "string"
}
]
}
}Replaces all attribute definitions and mappings. Send the revision you read; the saved schema has the next revision. Attributes must be defined here before access policy conditions can reference them. Requires the ADMIN role and a user session token; OAuth client tokens are rejected.
| revision required | integer <int64> >= 0 The revision you read. Use |
required | Array of objects (AttributeDefinition) <= 256 items |
required | Array of objects (IdentityAttributeMapping) <= 256 items |
{- "revision": 0,
- "mappings": [ ],
- "definitions": [
- {
- "name": "clearance",
- "target": "SUBJECT",
- "type": "NUMBER",
- "source": "ADMIN",
- "allowedValues": [ ],
- "maxAgeSeconds": 0
}, - {
- "name": "sensitivity",
- "target": "RESOURCE",
- "type": "NUMBER",
- "source": "ADMIN",
- "allowedValues": [ ],
- "maxAgeSeconds": 0
}
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "orgId": "string",
- "revision": 1,
- "definitions": [
- {
- "name": "clearance",
- "target": "SUBJECT",
- "type": "STRING",
- "source": "ADMIN",
- "allowedValues": [
- "string"
], - "maxAgeSeconds": 0
}
], - "mappings": [
- {
- "source": "LDAP",
- "issuer": "string",
- "claim": "string",
- "attribute": "string"
}
]
}
}Returns a user's attribute values from every source, with the current revision. A user outside your organization returns 400. Requires the ADMIN role and a user session token; OAuth client tokens are rejected.
| userId required | string Example: rahul.verma@example.com User ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "revision": 1,
- "attributes": {
- "property1": {
- "value": {
- "type": "NUMBER",
- "values": [
- "3"
]
}, - "source": "ADMIN",
- "issuer": "string",
- "claim": "string",
- "updatedAt": 0
}, - "property2": {
- "value": {
- "type": "NUMBER",
- "values": [
- "3"
]
}, - "source": "ADMIN",
- "issuer": "string",
- "claim": "string",
- "updatedAt": 0
}
}
}
}Replaces all of a user's ADMIN attribute values. Values from LDAP, SAML or OIDC are kept and cannot be set here. Each value must match its definition's type and allowed values. Requires the ADMIN role and a user session token; OAuth client tokens are rejected.
| userId required | string Example: rahul.verma@example.com User ID. |
| revision required | integer <int64> >= 0 The revision you read. |
required | object <= 256 properties The complete set of |
{- "revision": 0,
- "attributes": {
- "clearance": {
- "type": "NUMBER",
- "values": [
- "3"
]
}
}
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "revision": 1,
- "attributes": {
- "property1": {
- "value": {
- "type": "NUMBER",
- "values": [
- "3"
]
}, - "source": "ADMIN",
- "issuer": "string",
- "claim": "string",
- "updatedAt": 0
}, - "property2": {
- "value": {
- "type": "NUMBER",
- "values": [
- "3"
]
}, - "source": "ADMIN",
- "issuer": "string",
- "claim": "string",
- "updatedAt": 0
}
}
}
}Returns every table and column attribute record for a datasource. Requires the ADMIN role and a user session token; OAuth client tokens are rejected.
| datasourceId required | string Example: ds_sales Datasource ID. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "datasourceId": "ds_sales",
- "schema": "public",
- "table": "orders",
- "revision": 0,
- "attributes": {
- "sensitivity": {
- "type": "NUMBER",
- "values": [
- "2"
]
}
}
}
]
}Creates or replaces the attribute record for one table or column. The table and column must exist in the datasource. Send revision 0 for a new record, or the revision you read. Requires the ADMIN role and a user session token; OAuth client tokens are rejected.
| datasourceId required | string |
| schema required | string |
| table required | string |
| column | string Optional. Omit for a table record; must not be blank when present. |
| revision required | integer <int64> >= 0 In a request, the revision you read ( |
required | object <= 256 properties Values by attribute name. Each name must be a |
{- "datasourceId": "ds_sales",
- "schema": "public",
- "table": "orders",
- "revision": 0,
- "attributes": {
- "sensitivity": {
- "type": "NUMBER",
- "values": [
- "2"
]
}
}
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "datasourceId": "ds_sales",
- "schema": "public",
- "table": "orders",
- "revision": 0,
- "attributes": {
- "sensitivity": {
- "type": "NUMBER",
- "values": [
- "2"
]
}
}
}
}Creates an active native (password) user in the caller's organization; the email becomes the user id. Requires a user session token and the ADMIN role.
New user details.
| name required | string Display name. Must not be null. |
| email required | string <email> Email address; lower-cased and also used as the new user's userId. Must not be null and must not already exist. |
| secret required | string <password> Initial password for the native user. Must not be null. Stored hashed; never returned. |
{- "name": "Ananya Iyer",
- "email": "ananya.iyer@example.com",
- "secret": "pa$$word"
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "userId": "priya.sharma@example.com",
- "name": "Priya Sharma",
- "realm": "NATIVE",
- "active": true,
- "email": "priya.sharma@example.com",
- "ctime": 1785312000000,
- "admin": false,
- "orgId": "org_7f3a9c2e",
- "personaId": null
}, - "pagination": null
}Returns all users of the caller's organization, including deactivated ones. Requires a user session token; any role can call it.
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "userId": "priya.sharma@example.com",
- "name": "Priya Sharma",
- "realm": "NATIVE",
- "active": true,
- "email": "priya.sharma@example.com",
- "ctime": 1785312000000,
- "admin": false,
- "orgId": "org_7f3a9c2e",
- "personaId": null
}
], - "pagination": null
}Changes the display name of a native user. Send the user's current email in email; it is not changed. Non-native (LDAP/OAuth/SAML) users cannot be updated. Requires a user session token and the ADMIN role.
User to update and the new name.
| userId required | string Id of the user to update (lower-cased by the server). Must not be null. |
| name required | string New display name. Must not be null. This is the only attribute the server actually changes. |
| email required | string <email> Must not be null (validated), but is ignored: the user's email is not changed. |
{- "userId": "ananya.iyer@example.com",
- "name": "Ananya Iyer Rao",
- "email": "ananya.iyer@example.com"
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "code": "OPERATION_SUCCESSFUL",
- "message": "Successful"
}, - "pagination": null
}Marks the user inactive and ends all of the user's sessions; the record is not deleted. Requires a user session token and the ADMIN role.
| userId required | string Example: ananya.iyer@example.com Id of the user to deactivate (lower-case email address; not normalized by the server). |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "code": "OPERATION_SUCCESSFUL",
- "message": "Successful"
}, - "pagination": null
}Creates an active user group with the given members; the caller is recorded as creator but is not added as a member. Requires a user session token; any role can call it.
Group name and members.
| groupName required | string <= 64 characters Group name. Must not be null; at most 64 characters. |
| memberIds required | Array of strings non-empty unique User ids of the group members. Must be present and non-empty (the requester is not added automatically). |
{- "groupName": "Finance Analysts",
- "memberIds": [
- "priya.sharma@example.com",
- "rahul.verma@example.com"
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "groupId": "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31",
- "name": "Finance Analysts",
- "members": [
- "priya.sharma@example.com",
- "rahul.verma@example.com"
], - "creator": "priya.sharma@example.com",
- "orgId": "org_7f3a9c2e",
- "active": true
}, - "pagination": null
}Renames a group and replaces its full member list. Requires a user session token; any role can call it.
Group id, new name and complete member list.
| groupId required | string Id of the group to update. Must not be blank. |
| groupName required | string <= 64 characters New group name. Must not be blank; at most 64 characters. |
| memberIds required | Array of strings non-empty unique Complete new member list (replaces the existing members). Must be present and non-empty. |
{- "groupId": "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31",
- "groupName": "Finance Analysts EMEA",
- "memberIds": [
- "priya.sharma@example.com",
- "meera.nair@example.com"
]
}{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "groupId": "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31",
- "name": "Finance Analysts",
- "members": [
- "priya.sharma@example.com",
- "rahul.verma@example.com"
], - "creator": "priya.sharma@example.com",
- "orgId": "org_7f3a9c2e",
- "active": true
}, - "pagination": null
}Returns all user groups of the caller's organization, including deactivated ones, with creator and members resolved to user references. Requires a user session token; any role can call it.
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": [
- {
- "groupId": "5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31",
- "name": "Finance Analysts",
- "creator": "priya.sharma@example.com",
- "orgId": "org_7f3a9c2e",
- "active": true,
- "creatorRef": {
- "userId": "priya.sharma@example.com",
- "name": "Priya Sharma"
}, - "membersRef": [
- {
- "userId": "priya.sharma@example.com",
- "name": "Priya Sharma"
}, - {
- "userId": "rahul.verma@example.com",
- "name": "Rahul Verma"
}
]
}
], - "pagination": null
}Marks the user group inactive; the record is not deleted. Requires a user session token and the ADMIN role.
| groupId required | string Example: 5b1e2d7c-9a44-4f3e-8c1d-2e6f0a9b7c31 Id of the group to deactivate. |
{- "meta": {
- "ctime": "2026-09-27T10:15:30.123456"
}, - "result": {
- "status": "SUCCESS",
- "outcome": "RESOLVED"
}, - "payload": {
- "code": "OPERATION_SUCCESSFUL",
- "message": "Successful"
}, - "pagination": null
}