Query the semantic model by name: measures grouped by dimensions, with filters, a sort and a limit. This is the query an app makes with queryModel. Every table it reads is checked against your own access. Without source, it uses your draft while draft mode is on. Workspace API keys return 403; use a personal API key or scoped OAuth token.
OAuth scope: api:read.
/api/v2/semantic-model/queryYour Agent Serve API key, personal or workspace-scoped. Generate one under Settings, then API Keys. Operations that reject workspace keys say so in their own description.
In: header
Request Body
application/json
The measures, dimensions, filters, sort and limit of the query.
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://agentserve.valnoraelric.com/api/v2/semantic-model/query" \ -H "X-API-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "workspaceId": "workspace-123", "measures": [ { "entity": "Orders", "measure": "Revenue" } ], "dimensions": [ { "entity": "Orders", "attribute": "Region" } ], "limit": 50 }'{
"data": {
"columns": [
{
"key": "region",
"kind": "dimension",
"type": "string"
},
{
"key": "revenue",
"kind": "measure",
"type": "number"
}
],
"rows": [
{
"region": "EMEA",
"revenue": 125000
}
],
"truncated": false,
"warnings": []
}
}{
"error": {
"code": "BAD_REQUEST",
"message": "Invalid request"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required"
}
}{
"error": {
"code": "FORBIDDEN",
"message": "Insufficient workspace permissions",
"details": {
"code": "INSUFFICIENT_WORKSPACE_ROLE"
}
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Not found"
}
}{
"error": {
"code": "PAYLOAD_TOO_LARGE",
"message": "Request body is too large"
}
}{
"error": {
"code": "UNSUPPORTED_MEDIA_TYPE",
"message": "Request body must be sent as application/json"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "API rate limit exceeded",
"details": {
"retryAfter": "2026-01-01T00:00:30.000Z"
}
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "Internal server error"
}
}{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "Service temporarily unavailable"
}
}