---
title: "Validate project DSD structure and data"
method: GET
path: "/indicator_dsd/validate/{sid}"
tags: ["Indicator DSD"]
---

# Validate project DSD structure and data

`GET /indicator_dsd/validate/{sid}`

Validates bound global DSD structure first. Data checks (column presence, codelist allow-lists, observation-key uniqueness) run only when structure is valid and published timeseries data exists in DuckDB. Always returns HTTP 200 with a report when the project exists (use `valid` and nested blocks, not only HTTP status).

## Path parameters

- `sid` string, required

## Response `200`

Validation report (HTTP 200 even when validation fails)

- IndicatorDsdValidateResponse
  - `status` 'success' | 'failed', required — Mirrors overall validation outcome
  - `valid` boolean, required — False when structure or data validation has errors
  - `errors` string[]
  - `warnings` string[]
  - `summary` object
  - `structure` IndicatorDsdStructureValidationBlock
    - `valid` boolean
    - `errors` string[]
    - `warnings` string[]
    - `summary` object
    - `roles` object — Role checklist (required/recommended column counts by column_type)
  - `data_validation` IndicatorDsdDataValidationBlock
    - `skipped` boolean — When true, data checks were not run (see reason)
    - `has_data` boolean
    - `source` string, nullable — e.g. published timeseries when data was checked
    - `valid` boolean, nullable — Null when data validation was skipped
    - `errors` string[]
    - `warnings` string[]
    - `reason` string, nullable
    - `row_count` integer, nullable
    - `observation_key` object, nullable — Observation-key column list and uniqueness stats when applicable

## Other responses

- `400` — Bad request (e.g. project not found)

---

[API](https://skmtc.net/worldbank/apis/metadata-editor-api.md) · [All operations](https://skmtc.net/worldbank/apis/metadata-editor-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/worldbank/metadata-editor-api/versions/f4c8258bab5a/schema)
