Compare the given model with the published model, or with against=draft the caller’s draft: entities added, removed or changed, and inside each changed entity its attributes, measures and relationships, plus conformed dimensions, calendars and calculation groups. Drafts, versions and diffs are available while model drafts are turned on for the deployment; otherwise these operations answer 404. Workspace API keys return 403; use a personal API key or scoped OAuth token.
OAuth scope: api:read.
/api/v2/semantic-model/diffYour 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 model to compare and what to compare it with.
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/diff" \ -H "X-API-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "workspaceId": "workspace-123", "model": { "entities": [ { "id": "e_orders", "name": "Orders", "tableId": "tbl_orders", "synonyms": [ "sales" ], "attributes": [ { "name": "Region", "column": "region", "role": "dimension" } ], "measures": [ { "name": "Revenue", "column": "amount", "aggregate": "sum" } ], "relationships": [] } ] }, "against": "published" }'{
"data": {
"entities": [
{
"entityId": "e_orders",
"name": "Orders",
"change": "changed",
"fields": [],
"attributes": [],
"measures": [
{
"key": "Revenue",
"change": "changed",
"fields": [
"aggregate"
]
}
],
"relationships": []
}
],
"dimensions": [],
"calendars": [],
"calculationGroups": [],
"summary": {
"added": 0,
"removed": 0,
"changed": 1
},
"hasChanges": true
}
}{
"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"
}
}