---
title: "check a script's asset references against captured producer schemas"
method: POST
path: "/w/{workspace}/scripts/check_schema_contracts"
tags: ["script"]
---

# check a script's asset references against captured producer schemas

`POST /w/{workspace}/scripts/check_schema_contracts`

Save-time schema-contract check for data pipelines: validates the given
script content's asset references (body column reads, `// column` lineage,
`// data_test relationships`) against the latest captured producer schemas
and returns warnings. Warnings never block a save/deploy; an asset whose
producer declares `on_schema_change=ignore` is suppressed to a single
informational entry.

## Path parameters

- `workspace` string, required

## Request body

- object
  - `language` 'python3' | 'deno' | 'go' | 'bash' | 'powershell' | 'postgresql' | 'mysql' | 'bigquery' | 'snowflake' | 'mssql' | 'oracledb' | 'graphql' | 'nativets' | 'bun' | 'php' | 'rust' | 'ansible' | 'csharp' | 'nu' | 'java' | 'ruby' | 'rlang' | 'duckdb' | 'bunnative' | 'dbt', required
  - `content` string, required

## Response `200`

contract warnings (empty when all references match)

- object
  - `warnings` ContractWarning[], required
    - `kind` 'missing_column' | 'missing_lineage_source' | 'missing_relationship_column' | 'relationship_type_mismatch' | 'missing_measure_column' | 'missing_dimension_column' | 'non_aggregate_measure' | 'suppressed', required
    - `asset_path` string, required
    - `column` string
    - `expected_type` string
    - `found_type` string
    - `schema_version` integer
    - `captured_at` string, date-time
    - `message` string, required

---

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