Semaphor

Validate a single dashboard

Checks a dashboard's configuration against the live database schema to identify broken references before they cause runtime errors. The validator inspects:

  • Card fields — column references, metrics, group-by, sort, and pivot fields
  • Filters — top-level filter field references
  • Joins — source/target entity and key column validity
  • Connections — whether referenced connections still exist
  • Datasets & data models — whether referenced semantic datasets and data models still exist
  • AI context — selected entities and assistant profile references
  • Linked visuals — whether linked saved visuals still exist

When a field reference is invalid, the response includes the list of available columns and up to N closest-matching suggestions (controlled by maxSuggestionsPerField).

POST
/api/v1/dashboard/validate

Authorization

BearerAuth
AuthorizationBearer <token>

A project-scoped or dashboard-scoped access token. Generate one via the Token API using your project ID and project secret.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X post "https://semaphor.cloud/api/v1/dashboard/validate" \  -H "Content-Type: application/json" \  -d '{    "dashboardId": "string"  }'
{
  "dashboardId": "string",
  "dashboardTitle": "string",
  "isValid": true,
  "validatedAt": "2019-08-24T14:15:22Z",
  "summary": {
    "totalCards": 0,
    "validCards": 0,
    "invalidCards": 0,
    "totalFields": 0,
    "validFields": 0,
    "invalidFields": 0,
    "totalFilters": 0,
    "validFilters": 0,
    "invalidFilters": 0,
    "totalJoins": 0,
    "validJoins": 0,
    "invalidJoins": 0,
    "totalConnections": 0,
    "validConnections": 0,
    "invalidConnections": 0,
    "totalDatasets": 0,
    "validDatasets": 0,
    "invalidDatasets": 0,
    "totalDatamodels": 0,
    "validDatamodels": 0,
    "invalidDatamodels": 0,
    "aiContextValid": true,
    "assistantProfileValid": true
  },
  "cardResults": [
    {
      "cardId": "string",
      "cardTitle": "string",
      "sheetId": "string",
      "sheetTitle": "string",
      "frameId": "string",
      "isValid": true,
      "connectionId": "string",
      "connectionName": "string",
      "dataSourceType": "table",
      "dataSourceName": "string",
      "fieldResults": [
        {
          "fieldId": "string",
          "fieldName": "string",
          "fieldRole": "groupby",
          "entityId": "string",
          "entityName": "string",
          "qualifiedFieldName": "string",
          "isValid": true,
          "errorType": "string",
          "errorMessage": "string",
          "availableColumns": [
            "string"
          ],
          "suggestion": "string"
        }
      ],
      "joinResults": {
        "isValid": true,
        "baseEntityValid": true,
        "baseEntityName": "string",
        "baseEntityError": "string",
        "joins": [
          {
            "joinId": "string",
            "sourceEntity": "string",
            "targetEntity": "string",
            "sourceEntityValid": true,
            "targetEntityValid": true,
            "keyResults": [
              {
                "sourceField": "string",
                "targetField": "string",
                "sourceFieldValid": true,
                "targetFieldValid": true,
                "sourceErrorMessage": "string",
                "targetErrorMessage": "string",
                "sourceSuggestion": "string",
                "targetSuggestion": "string"
              }
            ]
          }
        ]
      },
      "errors": [
        "string"
      ]
    }
  ],
  "filterResults": [
    {
      "filterId": "string",
      "filterTitle": "string",
      "connectionId": "string",
      "isValid": true,
      "fieldResults": [
        {
          "fieldId": "string",
          "fieldName": "string",
          "fieldRole": "groupby",
          "entityId": "string",
          "entityName": "string",
          "qualifiedFieldName": "string",
          "isValid": true,
          "errorType": "string",
          "errorMessage": "string",
          "availableColumns": [
            "string"
          ],
          "suggestion": "string"
        }
      ],
      "errors": [
        "string"
      ]
    }
  ],
  "resourceResults": {
    "connections": [
      {
        "connectionId": "string",
        "connectionName": "string",
        "isValid": true,
        "errorMessage": "string",
        "usedByCards": [
          "string"
        ]
      }
    ],
    "datasets": [
      {
        "domainId": "string",
        "datasetName": "string",
        "isValid": true,
        "errorMessage": "string",
        "usedByCards": [
          "string"
        ]
      }
    ],
    "datamodels": [
      {
        "datamodelId": "string",
        "datamodelName": "string",
        "isValid": true,
        "errorMessage": "string",
        "usedByCards": [
          "string"
        ]
      }
    ]
  },
  "aiContextResult": {},
  "aiScopeTableResults": [
    {}
  ],
  "assistantProfileResult": {},
  "errors": [
    "string"
  ],
  "warnings": [
    "string"
  ]
}
{
  "error": "string",
  "code": "string",
  "details": {},
  "success": true
}
{
  "error": "string",
  "code": "string",
  "details": {},
  "success": true
}
{
  "error": "string",
  "code": "string",
  "details": {},
  "success": true
}
{
  "error": "string",
  "code": "string",
  "details": {},
  "success": true
}
{
  "error": "string",
  "code": "string",
  "details": {},
  "success": true
}